后端微信授权登录步骤及方法

微信公众号开发文档链接:

链接: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html.

第一步:获取微信授权code

在这里我只讲后端的主要实现方式,前端负责把微信授权登录页面调起,获取code,实在需要理解,在上述链接中找到这一段,按步骤操作即可。这里获得的code主要是为了传给后端,后端要去校验和获取用户信息,code是必要的信息,可以说是前端需要传的唯一的参数
在这里插入图片描述

第二步:通过code换取网页授权access_token

这一步就需要我的后端要去操作了,我们拿到前端传过来的code,去请求微信的网址:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code.,校验code的有效性,如果code有效,则可以获取access_token回来。
在这里插入图片描述

第三步:拉取用户信息(需scope为 snsapi_userinfo)

如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。

请求方法

http:GET(请使用https协议)https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN.
这里的access_token和openid都是第二步的返回成功获取的
在这里插入图片描述
在这里插入图片描述
这样我们就可以获取到用户的信息去做注册或者登陆了

后端代码示例:

可能还是有很多人不懂具体怎么去编码哈,可以看看示例:

// A code block
var foo = 'bar';
    /**
     * 微信授权登陆
     */
    public function vxLogin(UserRepository $userRepository)
    {
        try {
            $rule = [
                'code' => 'require',
            ];
            $msg = [
                'code.require' => 'Param error',
            ];
            $validate = Validate::make($rule, $msg);
            $result = $validate->check($this->request->post());
            if (!$result) {
                return api_format(self::PARAM_ERROR, $validate->getError());
            }

            $code = $this->request->post('code', '');
            //微信获取access_token的地址
            $getAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . Config::get('wechat.app_id') . "&secret="
                . Config::get('wechat.app_secret') . "&code=" . $code . "&grant_type=authorization_code";
            $str = HttpClient::get($getAccessTokenUrl);
            //一般要转成数组去做处理
            $params = json_decode($str, true);
            if (isset($params['errcode'])) {
                return api_format(4000, '授权失败');
            }

            //微信获取用户的信息地址
            $getUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $params['access_token'] . "&openid=" . $params['openid'];
            $strUser = HttpClient::get($getUserInfoUrl);
            $userInfo = json_decode($strUser, true);
            if (isset($userInfo['errcode'])) {
                 return api_format(4000, '获取用户信息失败');
            }
			//以下是自己针对自己的业务逻辑一些判断看是注册还是登陆步骤,可以不看
            //根据wx的openid查找用户表的vx_open_id
            $user = $userRepository->getUserByVxUnionId($params['unionid']);
            if ($user) {
                $sessionKey = get_session_key($user->id, $this->appId);
                //会话token的key
                $tokenValue = [
                    'id' => $user->id,
                    'open_id' => $user->open_id,
                    'union_id' => $user->union_id,
                    'name' => $user->name,
                    'invite_code' => $user->invite_code,
                    'avatar' => $user->avatar,
                ];
                app('mycache')->set($sessionKey, json_encode($tokenValue), 864000 * 30);
                $data = [
                    'token' => $sessionKey,
                    'id' => intval($user->id),
                    'expire' => 864000 * 30,
                ];

                return api_format(self::OK, 'Success login', $data);
            }

            //微信注册失败
            return api_format(self::VX_NO_REGISTER, 'Vx is not registered', $userInfo);
        } catch (Exception $e) {
            throw $e;
        }
    }
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值