微信扫描登录申请及PHP实现方式

      发布在:后端技术      评论:0 条评论

微信扫描登录申请及PHP实现方式方法摘抄自讯睿cms框架。

首先申请地址:https://open.weixin.qq.com/cgi-bin/frame?t=home/web_tmpl&lang=zh_CN

1

填写网站信息

2

回调域名填写网站主域名,不要填写http:

3

申请成功后得到key

4

后面就是代码的实现方式参考如下代码也是摘抄自讯睿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的网址上,并且带上codestate参数
   //redirect_uri?code=CODE&state=STATE
   //若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数
   //redirect_uri?state=STATE
   dr_redirect($url);
}


相关文章
热门推荐