laravel先后端分离获取微信受权,结合laravel-wechat

一、开始以前,请必定仔细阅读微信开发者文档
文档中,总共写了几个步骤:php

  • 一、经过appId和须要跳转的路由去请求受权
  • 二、受权以后跳转路由中返回的code 注:前端只须要知道这两个步骤
  • 三、根据code获取access_token
  • 四、根据access_token获取用户信息(snsapi_userinfo受权)
二、前端发起受权请求。这一步须要前端拼凑路由,而且将页面跳转到拼凑路由,路由规则如: https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的公众appId号&redirect_uri=你的回调路由&response_type=code&scope=你选择的方式&state=STATE#wechat_redirect
受权方式可选择为snsapi_userinfo或者snsapi_base,差异请看文档

跳转以后受权页面以下(开发者工具效果)前端

clipboard.png

三、点击赞成以后,会根据你以前拼凑的回调路由返回code,以下:

http://test.***.com/index?code=021Azdiu12zdXd05kkju1ZYkiu1AzdiR&state=1vue

四、将路由中的code直接传递给后端,让后端作获取用户信息的系列的逻辑处理。
注:以下是laravel中间件中处理方式,session只用于此次请求,也能够将用户的微信信息放在request中到controller进行逻辑处理,看我的喜爱
public function handle($request, Closure $next, $scopes = null)
  {
         $wechatCacheKey = 'wechat.oauth_user.default';
            if (config("qa.mock_user") == 1){
                $user = new SocialiteUser(config('wechat.mock_user'));
            } else {
                $code = $request->get("code", "");
                if ($code === ""){
                    $appId = $this->config["app_id"];
                    return Response::toJson(["aid" => $appId], "请从新获取受权CODE!",10006);
                }
                // 开始拉取用户信息
                $app = Factory::officialAccount($this->config);
                $user = $app->oauth->user();
            }
            session([$wechatCacheKey => $user]);
        }
        return $next($request);
  }

注:这个例子只是写了受权的逻辑,token相关验证我已经作了剔除laravel

坑点:

一、vue的路由会将code拼接在url和#之间,如 www.****.com/?code=XXXXX/#/index,这个code须要单独处理
相关文章
相关标签/搜索