Skip to content

Commit

Permalink
first
Browse files Browse the repository at this point in the history
  • Loading branch information
Brian Faust committed Oct 27, 2016
0 parents commit 34bf9d6
Show file tree
Hide file tree
Showing 3 changed files with 175 additions and 0 deletions.
137 changes: 137 additions & 0 deletions Provider.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
<?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);
return $this->buildAuthUrlFromBase($this->getConfig(
'auth_base_uri',
'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' => array_get($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 getAccessTokenResponse($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());
return $this->credentialsResponseBody;
}

public static function additionalConfigKeys()
{
return ['auth_base_uri'];
}
}
20 changes: 20 additions & 0 deletions WeixinWebExtendSocialite.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

namespace SocialiteProviders\WeixinWeb;

use SocialiteProviders\Manager\SocialiteWasCalled;

class WeixinWebExtendSocialite
{
/**
* Register the provider.
*
* @param \SocialiteProviders\Manager\SocialiteWasCalled $socialiteWasCalled
*/
public function handle(SocialiteWasCalled $socialiteWasCalled)
{
$socialiteWasCalled->extendSocialite(
'weixinweb', __NAMESPACE__.'\Provider'
);
}
}
18 changes: 18 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "socialiteproviders/weixin-web",
"description": "Weixin-Web OAuth2 Provider for Laravel Socialite",
"license": "MIT",
"authors": [{
"name": "xyxu",
"email": "techxu@gmail.com"
}],
"require": {
"php": "^5.6 || ^7.0",
"socialiteproviders/manager": "~2.0"
},
"autoload": {
"psr-4": {
"SocialiteProviders\\WeixinWeb\\": ""
}
}
}

0 comments on commit 34bf9d6

Please sign in to comment.