www.gusucode.com > KPPW众包威客PHP开源建站系统 v3.0源码程序 > KPPW/vendor/socialiteproviders/weixin-web/src/Provider.php
<?php namespace SocialiteProviders\WeixinWeb; use Laravel\Socialite\Two\ProviderInterface; use SocialiteProviders\Manager\OAuth2\AbstractProvider; use SocialiteProviders\Manager\OAuth2\User; class Provider extends AbstractProvider implements ProviderInterface { /** * Unique Provider Identifier. */ const IDENTIFIER = 'WEIXINWEB'; /** * @var string */ protected $openId; /** * {@inheritdoc}. */ protected $scopes = ['snsapi_login']; /** * set Open Id. * * @param string $openId */ public function setOpenId($openId) { $this->openId = $openId; } /** * {@inheritdoc}. */ protected function getAuthUrl($state) { return $this->buildAuthUrlFromBase('https://open.weixin.qq.com/connect/qrconnect', $state); } /** * {@inheritdoc}. */ protected function buildAuthUrlFromBase($url, $state) { $query = http_build_query($this->getCodeFields($state), '', '&', $this->encodingType); return $url.'?'.$query.'#wechat_redirect'; } /** * {@inheritdoc}. */ protected function getCodeFields($state = null) { return [ 'appid' => $this->clientId, 'redirect_uri' => $this->redirectUrl, 'response_type' => 'code', 'scope' => $this->formatScopes($this->scopes, $this->scopeSeparator), 'state' => $state, ]; } /** * {@inheritdoc}. */ protected function getTokenUrl() { return 'https://api.weixin.qq.com/sns/oauth2/access_token'; } /** * {@inheritdoc}. */ protected function getUserByToken($token) { $response = $this->getHttpClient()->get('https://api.weixin.qq.com/sns/userinfo', [ 'query' => [ 'access_token' => $token, 'openid' => $this->openId, 'lang' => 'zh_CN', ], ]); return json_decode($response->getBody(), true); } /** * {@inheritdoc}. */ protected function mapUserToObject(array $user) { return (new User())->setRaw($user)->map([ 'id' => $user['openid'], 'nickname' => $user['nickname'], 'avatar' => $user['headimgurl'], 'name' => null, 'email' => null, ]); } /** * {@inheritdoc}. */ protected function getTokenFields($code) { return [ 'appid' => $this->clientId, 'secret' => $this->clientSecret, 'code' => $code, 'grant_type' => 'authorization_code', ]; } /** * {@inheritdoc}. */ public function getAccessToken($code) { $response = $this->getHttpClient()->get($this->getTokenUrl(), [ 'query' => $this->getTokenFields($code), ]); $this->credentialsResponseBody = json_decode($response->getBody(), true); $this->openId = $this->credentialsResponseBody['openid']; return $this->parseAccessToken($response->getBody()); } }