## **接口內容列表**
[TOC]
## **關于網頁授權的兩種`scope`說明**
* 1、以`snsapi_base`為`scope`發起的網頁授權,僅可以獲取到粉絲的`openid`。(靜默授權用戶不需要操作、無感知)
* 2、以`snsapi_userinfo`為`scope`發起的網頁授權,是用來獲取用戶的基本信息的。(需要授權用戶手動確認,是可以拒絕哦)
* \*\*注意:\*\*未關注公眾號的粉絲是無法通過`WechatUser::getUserInfo`接口獲取詳細信息的,這里可以用到`snsapi_userinfo`來發起網頁授權,再通過`WechatOauth::getOauthUserinfo`來獲取。
* **授權的步驟大概分為幾步**
> 1. 第一步:用戶同意授權,獲取code
> 2. 第二步:通過code換取網頁授權access\_token
> 3. 第三步:刷新access\_token(如果需要)
> 4. 第四步:拉取用戶信息(需scope為 snsapi\_userinfo)
## **創建微信網頁授權URL**
* 參數`$callback`為微信回跳地址(接口已經默認`url_encode`處理,授權成功會有`$_GET['code']`值,可用于下個步驟)
* 參數`$state`為重定向后會帶上state參數(開發者可以填寫`a-zA-Z0-9`的參數值,最多`128`字節)
* 參數`$scope`為應用授權作用域(snsapi\_base | snsapi\_userinfo)
* 注意:`scope`為`snsapi_userinfo`時,若用戶取消授權,那么`$callback`將不會有`$_GET['code']`值。`callback`必需為完全`URL`地址,如`http://basic.demo.cuci.cc/api.html`
~~~
// SDK實例對象
$oauth = & load_wechat('Oauth');
// 執行接口操作
$result = $oauth->getOauthRedirect($callback, $state, $scope);
// 處理返回結果
if($result===FALSE){
// 接口失敗的處理
return false;
}else{
// 接口成功的處理
}
~~~
## **通過`code`換取網頁授權`access_token`**
* 這里不需要傳入`code`,SDK會自動從URL中取`$_GET['code']`值
* 返回值里,包含用戶的`openid`及`access_token`,可用于下個操作
~~~
// SDK實例對象
$oauth = & load_wechat('Oauth');
// 執行接口操作
$result = $oauth->getOauthAccessToken();
// 處理返回結果
if($result===FALSE){
// 接口失敗的處理
return false;
}else{
// 接口成功的處理
}
~~~
## **獲取授權后的用戶資料**
* 參數`$access_token`為通過`WechatOauth::getOauthAccessToken`換取來的`access_token`
* 參數`$openid`為通過`WechatOauth::getOauthAccessToken`獲取來的`openid`
~~~
// SDK實例對象
$oauth = & load_wechat('Oauth');
// 執行接口操作
$result = $oauth->getOauthUserinfo($access_token, $openid);
// 處理返回結果
if($result===FALSE){
// 接口失敗的處理
return false;
}else{
// 接口成功的處理
}
~~~
**一般項目的檢測情況**
* 首先對進入微信網頁的用戶進入簡單的網頁授權,獲取到用戶的`openid`
* 通過簡單接口獲取到的openid,可以查詢數據庫或者調接口`WechatUser::getUserInfo`獲取用戶信息
* 如果用戶參數沒有或沒有關注,可以再次生成微信Oauth授權鏈接跳轉過去,當然這次需要使用高級模式
* 當用戶確認授權之后,我們就可以使用`WechatOauth::getOauthUserInfo`接口來拉取用戶信息。
* **注意**:在上面環境要記錄`openid`到`SESSION`,如果有`openid`就不需要進行第一次授權了