src/AppBundle/Component/OAuthClient/QqOAuthClient.php

(开头部分) 2KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

<?php

namespace AppBundle\Component\OAuthClient;

class QqOAuthClient extends AbstractOAuthClient
{
    const USERINFO_URL = 'https://graph.qq.com/user/get_user_info';
    const AUTHORIZE_URL = 'https://graph.qq.com/oauth2.0/authorize?';
    const OAUTH_TOKEN_URL = 'https://graph.qq.com/oauth2.0/token';
    const OAUTH_ME_URL = 'https://graph.qq.com/oauth2.0/me';

    public function getAuthorizeUrl($callbackUrl)
    {
        $params = array();
        $params['client_id'] = $this->config['key'];
        $params['response_type'] = 'code';
        $params['redirect_uri'] = $callbackUrl;
        $params['status'] = 'pro';

        return self::AUTHORIZE_URL.http_build_query($params);
    }

    public function getAccessToken($code, $callbackUrl)
    {
        $params = array(
            'grant_type' => 'authorization_code',
            'client_id' => $this->config['key'],
            'redirect_uri' => $callbackUrl,
            'client_secret' => $this->config['secret'],
            'code' => $code,
        );
        $result = $this->getRequest(self::OAUTH_TOKEN_URL, $params);
        $rawToken = array();
        parse_str($result, $rawToken);
        $userInfo = $this->getUserInfo($rawToken);

        return  array(
            'userId' => $userInfo['id'],
            'expiredTime' => $rawToken['expires_in'],
            'access_token' => $rawToken['access_token'],
            'token' => $rawToken['access_token'],
        );
    }

    public function getUserInfo($token)
    {
        $params = array('access_token' => $token['access_token']);
        $result = $this->getRequest(self::OAUTH_ME_URL, $params);
        if (false !== strpos($result, 'callback')) {
            $lpos = strpos($result, '(');
            $rpos = strrpos($result, ')');
            $result = substr($result, $lpos + 1, $rpos - $lpos - 1);
        }
        $user = json_decode($result);
        $token['id'] = $user->openid;
        $params = array(
            'oauth_consumer_key' => isset($token['key']) ? $token['key'] : $this->config['key'], // 因为移动端第三方登录会走此接口,移动端的key和网站的key是不一样的
            'openid' => $token['id'],
            'format' => 'json',
            'access_token' => $token['access_token'],

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。