123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- <?php
- namespace common\modules\user\clients;
- use yii\authclient\OAuth2;
- class WeixinAuth extends OAuth2
- {
- public $authUrl = 'https://open.weixin.qq.com/connect/qrconnect';
- public $tokenUrl = 'https://api.weixin.qq.com/sns/oauth2/access_token';
- public $apiBaseUrl = 'https://api.weixin.qq.com';
- public $scope = 'snsapi_login';
- /**
- * Composes user authorization URL.
- *
- * @param array $params
- * additional auth GET params.
- * @return string authorization URL.
- */
- public function buildAuthUrl(array $params = [])
- {
- $defaultParams = [
- 'appid' => $this->clientId,
- 'redirect_uri' => $this->getReturnUrl(),
- 'response_type' => 'code'
- ];
- if (! empty($this->scope)) {
- $defaultParams['scope'] = $this->scope;
- }
- return $this->composeUrl($this->authUrl, array_merge($defaultParams, $params));
- }
- /**
- * Fetches access token from authorization code.
- *
- * @param string $authCode
- * authorization code, usually comes at $_GET['code'].
- * @param array $params
- * additional request params.
- * @return OAuthToken access token.
- */
- public function fetchAccessToken($authCode, array $params = [])
- {
- $defaultParams = [
- 'appid' => $this->clientId,
- 'secret' => $this->clientSecret,
- 'code' => $authCode,
- 'grant_type' => 'authorization_code'
- ];
- $response = $this->sendRequest('POST', $this->tokenUrl, array_merge($defaultParams, $params));
- $token = $this->createToken([
- 'params' => $response
- ]);
- $this->setAccessToken($token);
- return $token;
- }
- /**
- * @inheritdoc
- */
- protected function apiInternal($accessToken, $url, $method, array $params, array $headers)
- {
- $params['access_token'] = $accessToken->getToken();
- $params['openid'] = $this->getOpenid();
- return $this->sendRequest($method, $url, $params, $headers);
- }
- /**
- *
- * @return []
- * @see https://open.weixin.qq.com/cgi-bin/showdocument?action=doc&id=open1419316518&t=0.14920092844688204
- */
- protected function initUserAttributes()
- {
- $attributes = $this->api('sns/userinfo');
- $attributes['id'] = $attributes['openid'];
- return $attributes;
- }
- /**
- * @inheritdoc
- */
- public function getEmail()
- {
- return isset($this->getUserAttributes()['email']) ? $this->getUserAttributes()['email'] : null;
- }
- /**
- * @inheritdoc
- */
- public function getUsername()
- {
- return isset($this->getUserAttributes()['login']) ? $this->getUserAttributes()['login'] : null;
- }
- protected function defaultName()
- {
- return 'weixin';
- }
- protected function defaultTitle()
- {
- return '微信';
- }
- }
|