1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- <?php
- namespace common\modules\user\clients;
- use yii\authclient\OAuth2;
- use yii\base\Exception;
- use yii\helpers\Json;
- class QqAuth extends OAuth2
- {
- public $authUrl = 'https://graph.qq.com/oauth2.0/authorize';
- public $tokenUrl = 'https://graph.qq.com/oauth2.0/token';
- public $apiBaseUrl = 'https://graph.qq.com';
- public function init()
- {
- parent::init();
- if ($this->scope === null) {
- $this->scope = implode(',', [
- 'get_user_info',
- ]);
- }
- }
- protected function initUserAttributes()
- {
- // 因为authclient升级导致processResponse方法没有了,QQ获取openid这个接口的返回又很奇葩,是个jsonp格式,httpclient又不支持
- $openid = $this->getOpenId();
- $qquser = $this->api("user/get_user_info", 'GET', ['oauth_consumer_key'=>$openid['client_id'], 'openid'=>$openid['openid']]);
- $qquser['openid'] = $openid['openid'];
- $qquser['id'] = $qquser['openid'];
- $qquser['login'] = $qquser['nickname'];
- $qquser['email'] = $qquser['nickname'] . '@qq.com';
- $qquser['avatar'] = $qquser['figureurl_qq_2'];
- return $qquser;
- }
- public function getOpenId()
- {
- $request = $this->createApiRequest()
- ->setMethod('get')
- ->setUrl('oauth2.0/me');
- $response = $request->send();
- $rawResponse = $response->getContent();
- if(strpos($rawResponse, "callback") !== false){
- $lpos = strpos($rawResponse, "(");
- $rpos = strrpos($rawResponse, ")");
- $rawResponse = substr($rawResponse, $lpos + 1, $rpos - $lpos -1);
- $openid = Json::decode($rawResponse);
- return $openid;
- }
- return false;
- }
- protected function defaultName()
- {
- return 'QQ';
- }
- protected function defaultTitle()
- {
- return 'QQ';
- }
- }
|