[TOC] #### 1. 前言 ---- [网页授权官方文档](https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html "网页授权官方文档") #### 2. 第一步:用户同意授权,获取 code --- 引导用户打开授权页面 下面是微信官方给出的授权地址,以下 url 中大写的参数值代表的动态参数,需要开发者去传参,小写的参数值代表固定值,无需动态修改 appid:公众号 appid redirect_uri: 用户同意授权后的回调地址 scope:授权作用域,可取值:snsapi_base、snsapi_userinfo snsapi_base 不弹出授权页面,只能获取到用户openid snsapi_userinfo 弹出授权页面,可获取到用户openid、昵称、头像等信息 ``` https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect ``` 用户同意授权后将跳转到授权地址中的 redirect_uri 回调地址,并且携带 code 和 state 两个参数 ``` redirect_uri/?code=CODE&state=STATE ``` 在 tp6.0 中的使用示例 ``` public function index() { // 公众号appid $appid = 'wx0a48233ca8de759e'; // 回调地址 $redirect_uri = url('grant', [], true, true); // 对回调地址进行url编码 $redirect_uri = urlencode($redirect_uri); // 授权作用域 $scope = 'snsapi_base、snsapi_userinfo'; // snsapi_base、snsapi_userinfo // 授权页面 $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$appid}&redirect_uri={$redirect_uri}&response_type=code&scope={$scope}&state=STATE#wechat_redirect"; // 跳转到授权页面让用户授权 return redirect($url); } ``` #### 3. 第二步:通过code换取网页授权 access_token (网页授权接口调用凭证) --- snsapi_base、snsapi_userinfo 返回的内容格式一样,只是 scope 为各自相应的值 ```json { "access_token":"46_F7gxRgt-dgY7SWa43sX8xxxx", "expires_in":7200, "refresh_token":"46_a-XaTkDiL5e47vEYVa3emUjMxxx", "openid":"ozlgE6DGcfpHE1Qz69U9xKQtsRkw", "scope":"snsapi_userinfo" } ``` 特别注意:snsapi_base 式的网页授权流程到此为止 #### 4. 第三步:刷新 access_token (网页授权接口调用凭证) --- #### 5. 第四步:拉取用户信息 --- 根据第二步或第三步获取到的 `access_token` 和 `openid` 获取用户信息 ``` $openid = $res['openid']; $access_token = $res['access_token']; $api = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$openid}&lang=zh_CN"; $info = $this->http_curl($api); halt($info); ``` 返回示例 ``` ^ array:9 [▼ "openid" => "ozlgE6DGcfpHE1Qz69U9xKQtsRkw" "nickname" => "liang" "sex" => 1 "language" => "zh_CN" "city" => "开封" "province" => "河南" "country" => "中国" "headimgurl" => "https://thirdwx.qlogo.cn/mmopen/vi_32/L3D1cS26ogySia7UNlTScztBicIWYFhSzzUnXalicpaYCJAia4oewvGgVw0qCZ58t8eqcb2FsBYTN2wiaiasiabDkHfWg/132" "privilege" => [] ] ``` #### 6. 网页授权常见错误 ---- **一、提示微信客户端打开链接** 因为网页授权是要获取微信用户的信息,所以必须在微信浏览器中打开授权页面(微信客户端:`手机端` 和 `PC端微信浏览器`)  **二、Scope 参数错误或没有 Scope 权限** 可能的原因如下: 1、 使用的是个人订阅号,订阅号没有权限使用网页授权 2、使用的服务号,没有认证或认证已过期  **三、redirect_uri 参数错误** 授权回调页面域名配置错误,登陆公众号平台,在 “设置与开发-公众号设置-功能设置-网页授权域名” 中检查域名配置是否正确 