122 lines
2.9 KiB
PHP
122 lines
2.9 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the overtrue/socialite.
|
|
*
|
|
* (c) overtrue <i@overtrue.me>
|
|
*
|
|
* This source file is subject to the MIT license that is bundled
|
|
* with this source code in the file LICENSE.
|
|
*/
|
|
|
|
namespace Overtrue\Socialite\Providers;
|
|
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
|
|
/**
|
|
* Class WeChatProvider.
|
|
*
|
|
* @see https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318590&token=&lang=zh_CN [WeChat - 公众开放平台代公众号 OAuth 文档]
|
|
*/
|
|
class WeChatOpenPlatformProvider extends WeChatProvider
|
|
{
|
|
/**
|
|
* Component AppId.
|
|
*
|
|
* @deprecated 2.0 Will be removed in the future
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $componentAppId;
|
|
|
|
/**
|
|
* Component Access Token.
|
|
*
|
|
* @deprecated 2.0 Will be removed in the future
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $componentAccessToken;
|
|
|
|
/**
|
|
* @var \EasyWeChat\OpenPlatform\AccessToken|array
|
|
*/
|
|
protected $credentials;
|
|
|
|
/**
|
|
* {@inheritdoc}.
|
|
*/
|
|
protected $scopes = ['snsapi_base'];
|
|
|
|
/**
|
|
* Create a new provider instance.
|
|
* (Overriding).
|
|
*
|
|
* @param \Symfony\Component\HttpFoundation\Request $request
|
|
* @param string $clientId
|
|
* @param \EasyWeChat\OpenPlatform\AccessToken|array $credentials
|
|
* @param string|null $redirectUrl
|
|
*/
|
|
public function __construct(Request $request, $clientId, $credentials, $redirectUrl = null)
|
|
{
|
|
parent::__construct($request, $clientId, null, $redirectUrl);
|
|
|
|
$this->credentials = $credentials;
|
|
if (is_array($credentials)) {
|
|
list($this->componentAppId, $this->componentAccessToken) = $credentials;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}.
|
|
*/
|
|
public function getCodeFields($state = null)
|
|
{
|
|
$this->with(['component_appid' => $this->componentAppId()]);
|
|
|
|
return parent::getCodeFields($state);
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}.
|
|
*/
|
|
protected function getTokenUrl()
|
|
{
|
|
return $this->baseUrl.'/oauth2/component/access_token';
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}.
|
|
*/
|
|
protected function getTokenFields($code)
|
|
{
|
|
return [
|
|
'appid' => $this->clientId,
|
|
'component_appid' => $this->componentAppId(),
|
|
'component_access_token' => $this->componentAccessToken(),
|
|
'code' => $code,
|
|
'grant_type' => 'authorization_code',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Get component app id.
|
|
*
|
|
* @return string
|
|
*/
|
|
protected function componentAppId()
|
|
{
|
|
return $this->componentAppId ?: $this->credentials->getAppId();
|
|
}
|
|
|
|
/**
|
|
* Get component access token.
|
|
*
|
|
* @return string
|
|
*/
|
|
protected function componentAccessToken()
|
|
{
|
|
return $this->componentAccessToken ?: $this->credentials->getToken();
|
|
}
|
|
}
|