Gaoming13\WechatPhpSdk\Api::get_userinfo_by_authorize PHP Method

get_userinfo_by_authorize() public method

Examples: $api->get_userinfo_by_authorize('snsapi_base', $_GET['code']); $api->get_userinfo_by_authorize('snsapi_userinfo', $_GET['code']);
public get_userinfo_by_authorize ( $scope, string $lang = 'zh_CN' ) : array | object
$scope `get_authorize_url`时使用的授权类型
$lang string 可选,返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
return array | object
    public function get_userinfo_by_authorize($scope, $lang = 'zh_CN')
    {
        if (isset($_GET['code']) && !empty($_GET['code'])) {
            $code = $_GET['code'];
            // 1. 通过code换取网页授权access_token
            $url = self::API_DOMAIN . 'sns/oauth2/access_token?appid=' . $this->appId . '&secret=' . $this->appSecret . '&code=' . $code . '&grant_type=authorization_code';
            $res = HttpCurl::get($url, 'json');
            // 异常处理: 获取时网络错误
            if ($res === false) {
                return Error::code('ERR_POST');
            }
            // 判断是否调用成功
            if (isset($res->access_token)) {
                if ($scope == 'snsapi_userinfo') {
                    // 2.1 `snsapi_userinfo` 继续通过access_token和openid拉取用户信息
                    $url = self::API_DOMAIN . 'sns/userinfo?access_token=' . $res->access_token . '&openid=' . $res->openid . '&lang=' . $lang;
                    $res = HttpCurl::get($url, 'json');
                    // 异常处理: 获取时网络错误
                    if ($res === false) {
                        return Error::code('ERR_POST');
                    }
                    // 判断是否调用成功
                    if (isset($res->openid)) {
                        return array(null, $res);
                    } else {
                        return array($res, null);
                    }
                } else {
                    // 2.2 `snsapi_base` 不弹出授权页面,直接跳转,只能获取用户openid
                    return array(null, $res);
                }
            } else {
                return array($res, null);
            }
        } else {
            return array('授权失败', null);
        }
    }

Usage Example

コード例 #1
0
 *
 * @author 		gaoming13 <*****@*****.**>
 * @link 		https://github.com/gaoming13/wechat-php-sdk
 * @link 		http://me.diary8.com/
 */
require '../../autoload.php';
use Gaoming13\WechatPhpSdk\Api;
// 开发者中心-配置项-AppID(应用ID)
$appId = 'wx733d7f24bd29224a';
// 开发者中心-配置项-AppSecret(应用密钥)
$appSecret = 'c6d165c5785226806f42440e376a410e';
// 这是使用了Memcached来保存access_token
// 由于access_token每日请求次数有限
// 用户需要自己定义获取和保存access_token的方法
$m = new Memcached();
$m->addServer('localhost', 11211);
// api模块 - 包含各种系统主动发起的功能
$api = new Api(array('appId' => $appId, 'appSecret' => $appSecret, 'get_access_token' => function () use($m) {
    // 用户需要自己实现access_token的返回
    return $m->get('access_token');
}, 'save_access_token' => function ($token) use($m) {
    // 用户需要自己实现access_token的保存
    $m->set('access_token', $token, 0);
}));
header('Content-type: text/html; charset=utf-8');
list($err, $user_info) = $api->get_userinfo_by_authorize('snsapi_userinfo');
if ($user_info !== null) {
    var_dump($user_info);
} else {
    echo '授权失败!';
}