微信網頁受權獲取用戶基本信息

微信公衆號能夠經過微信網頁受權機制,來獲取用戶基本信息,能夠用於微信登陸功能php

關於網頁受權的兩種scope的區別說明json

一、靜默受權:以snsapi_base爲scope發起的網頁受權,是用來獲取進入頁面的用戶的openid的,而且是靜默受權並自動跳轉到回調頁的。用戶感知的就是直接進入了回調頁(每每是業務頁面)api

二、顯示受權:以snsapi_userinfo爲scope發起的網頁受權,是用來獲取用戶的基本信息的。但這種受權須要用戶手動贊成,而且因爲用戶贊成過,因此無須關注,就可在受權後獲取該用戶的基本信息。 微信

具體而言,網頁受權流程分爲四步:app

一、引導用戶進入受權頁面贊成受權,獲取code curl

二、經過code換取網頁受權access_token(與基礎支持中的access_token不一樣) ui

三、若是須要,開發者能夠刷新網頁受權access_token,避免過時 this

四、經過網頁受權access_token和openid獲取用戶基本信息(支持UnionID機制) url

第一步:用戶贊成受權,獲取codespa

 1 function getCode($scope,$state = 'STATE'){
 2            $method = 'https://open.weixin.qq.com/connect/oauth2/authorize?';
 3            $params = array(
 4                'appid' => $this->appId,
 5                'redirect_uri' => ($_SERVER['REQUEST_SCHEME'] ? $_SERVER['REQUEST_SCHEME'] : 'http')."://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING'],
 6                'response_type' => 'code',
 7                'scope' => $scope,
 8                'state' => $state,
 9            );
10 
11            $getCodeApi = $method.(http_build_query($params))."#wechat_redirect";
12            header("Location:".$getCodeApi);
13 
14        }

若是是顯示受權,則會出現受權界面

用戶贊成受權後

若是用戶贊成受權,頁面將跳轉至 redirect_uri/?code=CODE&state=STATE。

第二步:經過code換取網頁受權access_token

首先請注意,這裏經過code換取的是一個特殊的網頁受權access_token,與基礎支持中的access_token(該access_token用於調用其餘接口)不一樣。公衆號可經過下述接口來獲取網頁受權access_token。若是網頁受權的做用域爲snsapi_base,則本步驟中獲取到網頁受權access_token的同時,也獲取到了openid,snsapi_base式的網頁受權流程即到此爲止。

請求方法

獲取code後,請求如下連接獲取access_token:  https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code 

參數說明

參數 是否必須 說明
appid 公衆號的惟一標識
secret 公衆號的appsecret
code 填寫第一步獲取的code參數
grant_type 填寫爲authorization_code   

返回說明

正確時返回的JSON數據包以下:

{ "access_token":"ACCESS_TOKEN",    

 "expires_in":7200,    

 "refresh_token":"REFRESH_TOKEN",    

 "openid":"OPENID",    

 "scope":"SCOPE" } 

function getAccessToken($code){
           $res = array();
           if(!$code) return $res;
           $method = 'https://api.weixin.qq.com/sns/oauth2/access_token?';
           $params = array(
               'appid' => $this->appId,
               'secret' => $this->appSecret,
               'code' => $code,
               'grant_type' => 'authorization_code',
           );
           $getAccessTokenApi = $method.(http_build_query($params));
           p($getAccessTokenApi);
           $res = $this->http_curl($getAccessTokenApi);
           $res = json_decode($res,1);p($res);
           if($res['errcode']) $this->showError($res);
           return $res;
       }

  

 

第三步:刷新access_token(若是須要)

因爲access_token擁有較短的有效期,當access_token超時後,可使用refresh_token進行刷新,refresh_token有效期爲30天,當refresh_token失效以後,須要用戶從新受權。

請求方法

獲取第二步的refresh_token後,請求如下連接獲取access_token:  

https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN 

 

參數 是否必須 說明
appid 公衆號的惟一標識
grant_type 填寫爲refresh_token
refresh_token 填寫經過access_token獲取到的refresh_token參數  

返回說明

正確時返回的JSON數據包以下:

{ "access_token":"ACCESS_TOKEN",  

 "expires_in":7200,   

 "refresh_token":"REFRESH_TOKEN",   

 "openid":"OPENID",   

 "scope":"SCOPE" } 

參數 描述
access_token 網頁受權接口調用憑證,注意:此access_token與基礎支持的access_token不一樣
expires_in access_token接口調用憑證超時時間,單位(秒)
refresh_token 用戶刷新access_token
openid 用戶惟一標識
scope 用戶受權的做用域,使用逗號(,)分隔

錯誤時微信會返回JSON數據包以下(示例爲code無效錯誤):

{"errcode":40029,"errmsg":"invalid code"} 

第四步:拉取用戶信息(需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 網頁受權接口調用憑證,注意:此access_token與基礎支持的access_token不一樣
openid 用戶的惟一標識
lang 返回國家地區語言版本,zh_CN 簡體,zh_TW 繁體,en 英語

返回說明

正確時返回的JSON數據包以下:

{    "openid":" OPENID",  

 " nickname": NICKNAME,   

 "sex":"1",   

 "province":"PROVINCE"   

 "city":"CITY",   

 "country":"COUNTRY",    

 "headimgurl":    "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ

4eMsv84eavHiaiceqxibJxCfHe/46",  

"privilege":[ "PRIVILEGE1" "PRIVILEGE2"     ],    

 "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" 

function getUserInfo($data = array()){
           $res = array();
           if(!$data) return $res;
           $method = 'https://api.weixin.qq.com/sns/userinfo?';
           $params = array(
               'access_token' => $data['access_token'],
               'openid' => $data['openid'],
           );
           $getUserInfoApi = $method.(http_build_query($params));
           $res = $this->http_curl($getUserInfoApi);
           $res = json_decode($res,1);
           if($res['errcode']) $this->showError($res);
           return $res;
       }

  

 

須要完整代碼能夠聯繫 851 488 243 備註:網頁受權

相關文章
相關標籤/搜索