目录
1.相关准备
- 需要准备自己公众号的appId与appSecret,可在微信公众平台后台中查看
- 本地开发可以使用微信提供的微信公众平台测试账号来进行调试
- 微信测试账号登录地址为:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
- 使用微信扫码即可直接登录,登录后微信会提供一个测试用的appId 与 appSecret
- 关注一下自己的测试公众号
- 在下方的体验接口权限列表中配置 网页服务--网页账号--网页授权获取用户基本信息
- 配置回调页面成自己的域名地址或IP地址
2.代码实现
- 微信网页授权文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
- 首先引导用户进入授权页面同意授权,使用appId获取code
public function wxLogin(){
//appId
$appId = 'your appId';
// 回调的url
$redirect_uri = urlencode('http://127.0.0.1/test/public/index/user/getUserInfo');
//跳转微信回调到redirect_uri获取code
$url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=$appId&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
$this->redirect($url);
}
scope参数这里官方有一个说明
- 以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
- 以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
- 用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。
- 通过code获取网页授权access_token,然后通过网页授权access_token和openId即可获取到用户基本信息
public function getUserInfo(){
//获取code
$code = $_GET["code"];
// appId与appSecret
$appId = 'your appId';
$appSecret = 'your appSecret';
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appId&secret=$appSecret&code=$code&grant_type=authorization_code";
$res = $this->sendRequest($url);
$access_token = $res["access_token"];
$openId = $res['openid'];
$getUserInfo = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openId&lang=zh_CN";
//得到用户信息
$user_info = $this->sendRequest($getUserInfo);
dump($user_info);
//接下来的逻辑...
}
//发送请求
public function sendRequest($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}
- 成功获取到用户信息