2019-02-11 11:36:01
围观(6272)
写微信小程序开发时,一边开发一边骂着官方文档烂。
现在需要写公众号的网页授权,突然觉得小程序文档已经很良心了...
小程序文档每个组件或者API至少有DEMO代码片段,到了公众号这边,只告诉你API的URL和使用流程,DEMO或者API测试工具?不存在的!
官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
既然官方不给DEMO 那就只能把写好的代码贴到这 记录一下,以后需要用到可以来搬
入口代码 (index.php/login.php) 括号内的是文件命名 随便命名都行:
<?php
$appid='appid';
//将字符串以URL编码。
$redirect_uri = urlencode ( 'http://localhost/getUserInfo.php' );
//拼接字串 将参数拼接进官方接口中
$url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid={$appid}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
//重定向向官方发送HTTP报头。
header("Location:".$url);
?>回调代码 (getUserInfo.php):
<?php
header("content-type:text/html;charset=utf-8");
//将GET方式提交的code数据存入变量
$code = $_GET["code"];
//判断code是否存在
if (isset($_GET['code'])){
$userinfo = getUserInfo($code);
//userinfo即是用户信息 是个数组。
var_dump($userinfo);
/***
*
* #CODE
* 业务逻辑编写
*
***/
}else{
echo "NO CODE";
}
function getUserInfo($code)
{
$appid = "appid";
$appsecret = "appsecret";
//获取access_token
$access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$appsecret}&code={$code}&grant_type=authorization_code";
//发起请求 调用https_request函数
$access_token_json = https_request($access_token_url);
//将JSON格式的字符串进行解码,并转换为数组
$access_token_array = json_decode($access_token_json,true);
//获取access_token
$access_token = $access_token_array['access_token'];
//获取openid
$openid = $access_token_array['openid'];
//获取用户信息
$userinfo_url = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}";
//发起请求获得用户信息的JSON格式字符串
$userinfo_json = https_request($userinfo_url);
//将JSON格式字符串编码并转为数组
$userinfo_array = json_decode($userinfo_json,ture);
return $userinfo_array;
}
/***
* 自定义https_request函数,发起请求并返回结果
***/
function https_request($url)
{
//初始化CURL
$curl = curl_init();
//设置CURL请求参数
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
$data = curl_exec($curl);
if (curl_errno($curl)){
return 'ERROR'.curl_error($curl);
}
curl_close($curl);
return $data;
}
?>最后别忘了需要到公众号平台设置一下:

设置的时候需要验证token 代码后续再贴上。