## **接口内容列表**
[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`就不需要进行第一次授权了