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 个评论

要回复文章请先登录注册