[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 參數錯誤** 授權回調頁面域名配置錯誤,登陸公眾號平臺,在 “設置與開發-公眾號設置-功能設置-網頁授權域名” 中檢查域名配置是否正確 