微信扫描登录申请及PHP实现方式方法摘抄自讯睿cms框架。
首先申请地址:https://open.weixin.qq.com/cgi-bin/frame?t=home/web_tmpl&lang=zh_CN
填写网站信息
回调域名填写网站主域名,不要填写http:
申请成功后得到key
后面就是代码的实现方式参考如下代码也是摘抄自讯睿cms框架插件代码
if ($action == 'callback') {
// 表示回调返回
if (isset($_REQUEST['code'])) {
// 获取access_token
//通过code获取access_token
$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appkey.'&code='.$_REQUEST['code'].'&grant_type=authorization_code';
/**
正确的返回:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
**/
$token = json_decode(dr_catcher_data($url), true);
if (!$token) {
$this->_msg(0, dr_lang('无法获取到远程信息'));
} elseif ($token['errmsg']) {
$this->_msg(0, $token['errmsg']);
}
// 获取用户信息
//参考https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Authorized_Interface_Calling_UnionID.html
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$token['access_token'].'&openid='.$token['openid'];
/**
正确的Json返回结果:
{
"openid":"OPENID",
"nickname":"NICKNAME",
"sex":1,
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
"privilege":[
"PRIVILEGE1",
"PRIVILEGE2"
],
"unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
有人用户信息后面就是插入会员信息或做绑定处理了
**/
$user = json_decode(dr_catcher_data($url), true);
if (!$user) {
$this->_msg(0, dr_lang('无法获取到用户信息'));
} elseif ($user['errmsg']) {
$this->_msg(0, $user['errmsg']);
}
$rt = \Phpcmf\Service::M('member')->insert_oauth($this->uid, $type, [
'oid' => $token['openid'],
'oauth' => 'weixin',
'avatar' => $user['headimgurl'],
'unionid' => (string)$user['unionid'],
'nickname' => dr_emoji2html($user['nickname']),
'expire_at' => SYS_TIME,
'access_token' => 0,
'refresh_token' => $token['refresh_token'],
], null, $back);
if (!$rt['code']) {
$this->_msg(0, $rt['msg']);exit;
} else {
dr_redirect($rt['msg']);
}
} else {
$this->_msg(0, dr_lang('回调参数code不存在'));exit;
}
} else {
// 跳转授权页面
//参考https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
$url = 'https://open.weixin.qq.com/connect/qrconnect?appid='.$appid.'&redirect_uri='.urlencode($callback_url).'&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect';
//返回说明
//用户允许授权后,将会重定向到redirect_uri的网址上,并且带上code和state参数
//redirect_uri?code=CODE&state=STATE
//若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数
//redirect_uri?state=STATE
dr_redirect($url);
}
登录微信公众号平台https://mp.weixin.qq.com打开设置与开发》账号设置》功能设置,设置网页授权域名,参考如下图