上节我们获得了微信开放平台的AppID,AppSecret,接下来在本节中我们介绍下,微信扫码登录的程序设计,ShopWind 电商系统 把第三方登录做成插件的形式,包括微信登录,支付宝登录,新浪微博登录,腾讯QQ登录。
后台配置 AppID,AppSecret。登录网站后台
上面导航点击 扩展 > 插件 > 微信登录 填写 AppID,AppSecret提交,电商系统微信登录配置完成。
下面简单介绍下代码实现。
第一步:请求CODE
我们在PC端登录页面做微信图标链接,点击图标打开以下链接:
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
这个链接里面的APPID读取我们后台配置的APPID,REDIRECT_URI为回调接收地址。
若提示“该链接无法访问”,请检查参数是否填写错误,如redirect_uri的域名与审核时填写的授权域名不一致或scope不为snsapi_login。
关键代码片段:
$data = array(
'gateway' => 'https://open.weixin.qq.com/connect/qrconnect?',
'AppId' => $this->_config['AppId'],
'AppSecret' => $this->_config['AppSecret'],
'redirect_uri' => urlencode(SITE_URL . "/external/plugins/weixinconnect/callback.php"),
'response_type' => 'code',
'scope' => 'snsapi_login',
'state' => mt_rand()
);
$url = $gateway . "appid=".$AppId."&redirect_uri=".$redirect_uri."&response_type=code&scope=".$scope."&state=".$state."#wechat_redirect";
header("location:$url");
第二步:通过code获取access_token
第一步打开链接发起请求后,我们在 callback.php文件中用get接收微信那边发回来的code。通过code和appid,AppSecret,拼接重新发起请求获取access_token。
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$AppId}&secret={$AppSecret}&code={$_GET['code']}&grant_type=authorization_code";
$result = file_get_contents($url);
正确返回的结构是:
{
"access_token":"ACCESS_TOKEN", //接口调用凭证
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID", //授权用户唯一标识
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" //当且仅当该网站应用已获得该用户的userinfo授权时,才会出现该字段。
}
获取返回正确的返回结果后,接收 unionid,access_token。
$unionid = isset($result['unionid']) ? $result['unionid'] : $openid;
$token = $result['access_token'];
第三步:通过access_token,unionid查询用户信息
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$token."&openid=".$openid; $user_info = file_get_contents($url);
到此$user_info 里面就包含有用户信息,微信头像,微信名称等,后面就是程序逻辑的问题了,ShopWind会跳转到绑定手机号码的页面,绑定完成后插入用户表,并完成登录进入用户中心。微信扫码登录完成,如果有疑问可以联系交流,QQ 1983447904