在公众号开发中避免不了获取微信用户头像,昵称等登录信息。这里我总结了一下微信开发中从网页授权到获取到用户openid,nickname,headimgurl等信息。
微信开发手册
首先要在微信公众平台中配置好网页授权域名,建议设置为项目域名即可。
thinkPHP5的话建议在入口文档定义AppID和APPSecret,因为这两个参数会多次用到,如果以后有变更方便修改,也可在配置文件中定义。
define('APPID', 'wx8fc535aaa112dfb3');
define('SECRET', '97f96488de4911994dfc86f0e287a969');
接下来获取code
public function index()
{
//获取code
$redirect_uri = urlencode('http://www.XXX.com/index/index/getAccesstoken');
header('Location:https://open.weixin.qq.com/connect/oauth2/authorize?appid='.APPID.'&redirect_uri='.$redirect_uri.'&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect');
exit;
}
使用**urlencode()**函数来对回调地址进行加密,回调地址的域名和网页授权域名一致就好,回调地址控制器方法应为接下来获取access_token和openID的控制器和方法。
public function getAccesstoken(){
//得到openID
$code = $_GET['code'];
//获取access_token值
$get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.APPID.'&secret='.SECRET.'&code='.$code.'&grant_type=authorization_code';
$data = json_decode(httpRequest($get_token_url),true);
// 得到用户信息
$get_user_info = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$data["access_token"].'&openid='.$data["openid"].'&lang=zh_CN';
$userinfo = json_decode(httpRequest($get_user_info),true);
var_dump($userinfo);
// var_dump($data);
}
通过回调链接,会将携带code的返回值返回到该方法中,发送获取access_token的请求,得到access_token,这里的access_token仅限于获取用户信息,具体建议查看手册。
拿到access_token和openID后发送获取用户信息的请求,得到的$userinfo就是包含用户昵称,性别,头像等信息的数组(通过json_decode将json格式转为数组,微信返回为json格式)。
这里的httpRequest()方法为发送curl请求的一个方法,如下:
function httpRequest($url, $postData=array()){
// (1)初始化
$ch = curl_init();
// (2)设置选项
// 设置请求的url
curl_setopt($ch, CURLOPT_URL, $url);
// 将curl_exec()获取的数据以字符串返回,而不是直接输出。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if(!empty($postData)){
// 设置请求方式为post
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
}
//curl注意事项,如果发送的请求是https,必须要禁止服务器端校检SSL证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// (3)执行
$result = curl_exec($ch);
// (4)关闭
curl_close($ch);
return $result;
}