ThinkPHP 移动应用授权微信登录

在第三方应用上使用微信登录已经是很常见的了,因为本身微信用户基数大,使用微信登录来拓展用户群,这篇文章是本人在参与公司app开发的时候,授权登录这一块的总结内容。

应用微信授权流程

上面这张图就是第三方应用授权微信登录的整个流程示意图,以下将对流程进行详解。

  1. 用户在第三方app的微信登录按钮点击后,转跳到微信,弹出微信用户授权页面,如果用户允许,这时候就获取到微信返回的临时票据(code),这个code是让服务端换取到access_token
  2. 利用access_tokenappidappsecret获取到access_token,包括有用户的openid,如果有多个应用绑定在同一开放平台将会有unionid
    获取到accesstoken内容
  3. 利用第二步的access_tokenopenid来获取到用户详细信息,信息格式如下图。
    获取用户信息内容

说明:WechatController调用WeChatTool封装的方法,WeChatTool加载wechat配置文件,发起请求。
下面是使用ThinkPHP6进行用户授权登录的代码块:

  • route/api/route.php
  • WeChatTool.php
config = config('wechat');
    }
    // 属于移动应用掉起登录方法
    /**
     * 使用开放平台信息获取到token
     * @param $code app返回的code
     * @return bool|string
     */
    public function get_token($code){
       if(is_array($this->config)){
           $configs = $this->config;
           $result = $this->start_get_request($configs['get_token_url'],[
               'appid'=>$configs['app_id'],
               'secret'=>$configs['app_secret'],
               'code'=>$code,
               'grant_type'=>'authorization_code'
           ]);
           if(false == $result){
               return false;
           }
           return $result;
       }
    }
    /**
     * 根据accesstoken和openid获取到授权登录的用户信息
     * @param $access_token
     * @param $openid
     * @return bool|string
     */
    public function get_user_info($access_token,$openid){
        $result = $this->start_get_request($this->config['get_user_info_url'],[
           'access_token'=>$access_token,
            'openid'=>$openid
        ]);
        if(false == $result){
            return false;
        }
        return $result;
    }
    // 工具类方法
    /**
     * 发起Get请求并且返回结果
     * @param $uri 请求地址
     * @param $query 请求参数
     * @return string
     */
    public function start_get_request($uri,$query){
        $body = (new Client())->request('GET',$uri,[
            'query'=>$query,
            'timeout'=>3.14
        ]);
        if($body->getStatusCode()!=200){
            return false;
        }
        return json_decode($body->getBody(),true,512,JSON_BIGINT_AS_STRING);
    }
}
  • wechat.php
'wx5834b39894c*****',
    'app_secret'=>'f5af06ffd4fd217e78b4948fd9b*****',
    'get_token_url'=>'https://api.weixin.qq.com/sns/oauth2/access_token',// 获取token基础url
    'get_user_info_url'=>'https://api.weixin.qq.com/sns/userinfo',//获取到用户信息
];
  • WeChatController.php
get_token($request->param('code'));
        if(false == $wechat_token_callback || isset($wechat_token_callback['errcode'])){
                return app('json')->fail('请求出错,请重试');
        }
        $wechat_user_callback = $wechatTool->get_user_info($wechat_token_callback['access_token'],$wechat_token_callback['openid']);
        if(false == $wechat_user_callback || isset($wechat_user_callback['errcode'])){
            return app('json')->fail('请求出错,请重试');
// 其余业务代码内容忽略
        }
}

你可能感兴趣的:(ThinkPHP 移动应用授权微信登录)