wecenter里改造扫码登录跳到自己定义的页面里拿到openid
微信oauth登录过程:
引导用户跳转到微信服务器,并且带上一个编码后的地址A
用户在微信服务器,点击同意授权(或者无感知的登录),就会跳转到地址A,并且带上参数code
我们需要在地址A拿到code参数,然后加上微信服务号的appid和appkey等参数,请求微信服务器,然后就得到了用户openid和一个token
用户openid已经是唯一标识符了,如果我们还需要用户其它信息,就需要用token和openid再一次请求微信服务器,从而获取所需信息。
-----------------------------------------------------
wecenter扫码登录的二维码解析后是:
http://www.xxxx.com/?/m/weixin/oauth_redirect/?uri=http://www.xxxx.com/?/m/weixin/qr_login/token-14869783&scope=snsapi_userinfo&state=OAUTH_REDIRECT
扫码回跳后会拿到code
具体的参见:
/app/m/weixin.php里的public function qr_login_action()方法
我们可以拿到 code 和 token两个参数,这里的token应该是wc生成的,不是微信的access_token
当然,我的这篇帖子并不是用来介绍wecenter的扫码登录的。
所以我利用官方的方法来实现自己的目的。
我们首先改造二维码。
我们在/app/weixin/main.php里新增代码
public function login_qr_code_4winform_action()
{
include(AWS_PATH . 'Services/phpqrcode/qrlib.php');
header('Content-Type: image/png');
ob_clean();
QRcode::png($this->model('openid_weixin_weixin')->get_oauth_url(get_js_url('/winform/ajax/get_openid/token-' . $this->model('openid_weixin_weixin')->request_client_login_token(session_id())), 'snsapi_userinfo', 'OAUTH_REDIRECT'), null, QR_ECLEVEL_L, 4);
}
这里我们参考了官方的代码,修改了上面标红的地方。
然后我们在 /app/winform/里增加ajax.php,然后在php里增加方法:
public function get_openid_action()
{
if ($_GET['code'])
{
if ($access_token = $this->model('openid_weixin_weixin')->get_sns_access_token_by_authorization_code($_GET['code']))
{
echo $access_token['openid'];
}
//
}
}
这样就可以在扫码后跳到这个函数里拿到openid了,当然还有access_token 具体想做什么随你。
全部 0条评论