first commit
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
class OauthCacheFile implements OauthCacheInterface
|
||||
{
|
||||
private $directory;
|
||||
|
||||
/**
|
||||
* @param string $directory
|
||||
* @throws OpenPayU_Exception_Configuration
|
||||
*/
|
||||
public function __construct($directory = null)
|
||||
{
|
||||
if ($directory === null) {
|
||||
$directory = dirname(__FILE__).'/../../../Cache';
|
||||
}
|
||||
|
||||
if (!is_dir($directory) || !is_writable($directory)) {
|
||||
throw new OpenPayU_Exception_Configuration('Cache directory [' . $directory . '] not exist or not writable.');
|
||||
}
|
||||
|
||||
$this->directory = $directory . (substr($directory, -1) != '/' ? '/' : '');
|
||||
}
|
||||
|
||||
public function get($key)
|
||||
{
|
||||
$cache = @file_get_contents($this->directory . md5($key));
|
||||
return $cache === false ? null : unserialize($cache);
|
||||
}
|
||||
|
||||
public function set($key, $value)
|
||||
{
|
||||
return @file_put_contents($this->directory . md5($key), serialize($value));
|
||||
}
|
||||
|
||||
public function invalidate($key)
|
||||
{
|
||||
return @unlink($this->directory . md5($key));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
|
||||
interface OauthCacheInterface
|
||||
{
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @return null | object
|
||||
*/
|
||||
public function get($key);
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @param object $value
|
||||
* @return bool
|
||||
*/
|
||||
public function set($key, $value);
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @return bool
|
||||
*/
|
||||
public function invalidate($key);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
class OauthCacheMemcached implements OauthCacheInterface
|
||||
{
|
||||
private $memcached;
|
||||
|
||||
/**
|
||||
* @param string $host
|
||||
* @param int $port
|
||||
* @param int $weight
|
||||
* @throws OpenPayU_Exception_Configuration
|
||||
*/
|
||||
public function __construct($host = 'localhost', $port = 11211, $weight = 0)
|
||||
{
|
||||
if (!class_exists('Memcached')) {
|
||||
throw new OpenPayU_Exception_Configuration('PHP Memcached extension not installed.');
|
||||
}
|
||||
|
||||
$this->memcached = new Memcached('PayU');
|
||||
$this->memcached->addServer($host, $port, $weight);
|
||||
$stats = $this->memcached->getStats();
|
||||
if ($stats[$host . ':' . $port]['pid'] == -1) {
|
||||
throw new OpenPayU_Exception_Configuration('Problem with connection to memcached server [host=' . $host . '] [port=' . $port . '] [weight=' . $weight . ']');
|
||||
}
|
||||
}
|
||||
|
||||
public function get($key)
|
||||
{
|
||||
$cache = $this->memcached->get($key);
|
||||
return $cache === false ? null : unserialize($cache);
|
||||
}
|
||||
|
||||
public function set($key, $value)
|
||||
{
|
||||
return $this->memcached->set($key, serialize($value));
|
||||
}
|
||||
|
||||
public function invalidate($key)
|
||||
{
|
||||
return $this->memcached->delete($key);
|
||||
}
|
||||
|
||||
}
|
||||
123
modules/payu/tools/sdk/OpenPayU/Oauth/Oauth.php
Normal file
123
modules/payu/tools/sdk/OpenPayU/Oauth/Oauth.php
Normal file
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
|
||||
class OpenPayU_Oauth
|
||||
{
|
||||
/**
|
||||
* @var OauthCacheInterface
|
||||
*/
|
||||
private static $oauthTokenCache;
|
||||
|
||||
const CACHE_KEY = 'AccessToken';
|
||||
|
||||
/**
|
||||
* @param string $clientId
|
||||
* @param string $clientSecret
|
||||
* @return OauthResultClientCredentials
|
||||
* @throws OpenPayU_Exception_ServerError
|
||||
*/
|
||||
public static function getAccessToken($clientId = null, $clientSecret = null)
|
||||
{
|
||||
if (OpenPayU_Configuration::getOauthGrantType() === OauthGrantType::TRUSTED_MERCHANT) {
|
||||
return self::retrieveAccessToken($clientId, $clientSecret);
|
||||
}
|
||||
|
||||
$cacheKey = self::CACHE_KEY . OpenPayU_Configuration::getOauthClientId();
|
||||
|
||||
self::getOauthTokenCache();
|
||||
|
||||
$tokenCache = self::$oauthTokenCache->get($cacheKey);
|
||||
|
||||
if ($tokenCache instanceof OauthResultClientCredentials && !$tokenCache->hasExpire()) {
|
||||
return $tokenCache;
|
||||
}
|
||||
|
||||
self::$oauthTokenCache->invalidate($cacheKey);
|
||||
$response = self::retrieveAccessToken($clientId, $clientSecret);
|
||||
self::$oauthTokenCache->set($cacheKey, $response);
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $clientId
|
||||
* @param $clientSecret
|
||||
* @return OauthResultClientCredentials
|
||||
* @throws OpenPayU_Exception_ServerError
|
||||
*/
|
||||
private static function retrieveAccessToken($clientId, $clientSecret)
|
||||
{
|
||||
$authType = new AuthType_TokenRequest();
|
||||
|
||||
$oauthUrl = OpenPayU_Configuration::getOauthEndpoint();
|
||||
$data = array(
|
||||
'grant_type' => OpenPayU_Configuration::getOauthGrantType(),
|
||||
'client_id' => $clientId ? $clientId : OpenPayU_Configuration::getOauthClientId(),
|
||||
'client_secret' => $clientSecret ? $clientSecret : OpenPayU_Configuration::getOauthClientSecret()
|
||||
);
|
||||
|
||||
if (OpenPayU_Configuration::getOauthGrantType() === OauthGrantType::TRUSTED_MERCHANT) {
|
||||
$data['email'] = OpenPayU_Configuration::getOauthEmail();
|
||||
$data['ext_customer_id'] = OpenPayU_Configuration::getOauthExtCustomerId();
|
||||
}
|
||||
|
||||
return self::parseResponse(OpenPayU_Http::doPost($oauthUrl, http_build_query($data, '', '&'), $authType));
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse response from PayU
|
||||
*
|
||||
* @param array $response
|
||||
* @return OauthResultClientCredentials
|
||||
* @throws OpenPayU_Exception
|
||||
* @throws OpenPayU_Exception_Authorization
|
||||
* @throws OpenPayU_Exception_Network
|
||||
* @throws OpenPayU_Exception_ServerError
|
||||
* @throws OpenPayU_Exception_ServerMaintenance
|
||||
*/
|
||||
private static function parseResponse($response)
|
||||
{
|
||||
$httpStatus = $response['code'];
|
||||
|
||||
if ($httpStatus == 500) {
|
||||
$result = new ResultError();
|
||||
$result->setErrorDescription($response['response']);
|
||||
OpenPayU_Http::throwErrorHttpStatusException($httpStatus, $result);
|
||||
}
|
||||
|
||||
$message = OpenPayU_Util::convertJsonToArray($response['response'], true);
|
||||
|
||||
if (json_last_error() == JSON_ERROR_SYNTAX) {
|
||||
throw new OpenPayU_Exception_ServerError('Incorrect json response. Response: [' . $response['response'] . ']');
|
||||
}
|
||||
|
||||
if ($httpStatus == 200) {
|
||||
$result = new OauthResultClientCredentials();
|
||||
$result->setAccessToken($message['access_token'])
|
||||
->setTokenType($message['token_type'])
|
||||
->setExpiresIn($message['expires_in'])
|
||||
->setGrantType($message['grant_type'])
|
||||
->calculateExpireDate(new \DateTime());
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
$result = new ResultError();
|
||||
$result->setError($message['error'])
|
||||
->setErrorDescription($message['error_description']);
|
||||
|
||||
OpenPayU_Http::throwErrorHttpStatusException($httpStatus, $result);
|
||||
|
||||
}
|
||||
|
||||
private static function getOauthTokenCache()
|
||||
{
|
||||
$oauthTokenCache = OpenPayU_Configuration::getOauthTokenCache();
|
||||
|
||||
if (!$oauthTokenCache instanceof OauthCacheInterface) {
|
||||
$oauthTokenCache = new OauthCacheFile();
|
||||
OpenPayU_Configuration::setOauthTokenCache($oauthTokenCache);
|
||||
}
|
||||
|
||||
self::$oauthTokenCache = $oauthTokenCache;
|
||||
}
|
||||
}
|
||||
7
modules/payu/tools/sdk/OpenPayU/Oauth/OauthGrantType.php
Normal file
7
modules/payu/tools/sdk/OpenPayU/Oauth/OauthGrantType.php
Normal file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
abstract class OauthGrantType
|
||||
{
|
||||
const CLIENT_CREDENTIAL = 'client_credentials';
|
||||
const TRUSTED_MERCHANT = 'trusted_merchant';
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
class OauthResultClientCredentials
|
||||
{
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $accessToken;
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $tokenType;
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $expiresIn;
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $grantType;
|
||||
|
||||
/**
|
||||
* @var DateTime
|
||||
*/
|
||||
private $expireDate;
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getAccessToken()
|
||||
{
|
||||
return $this->accessToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $accessToken
|
||||
* @return OauthResultClientCredentials
|
||||
*/
|
||||
public function setAccessToken($accessToken)
|
||||
{
|
||||
$this->accessToken = $accessToken;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getTokenType()
|
||||
{
|
||||
return $this->tokenType;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $tokenType
|
||||
* @return OauthResultClientCredentials
|
||||
*/
|
||||
public function setTokenType($tokenType)
|
||||
{
|
||||
$this->tokenType = $tokenType;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getExpiresIn()
|
||||
{
|
||||
return $this->expiresIn;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $expiresIn
|
||||
* @return OauthResultClientCredentials
|
||||
*/
|
||||
public function setExpiresIn($expiresIn)
|
||||
{
|
||||
$this->expiresIn = $expiresIn;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getGrantType()
|
||||
{
|
||||
return $this->grantType;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $grantType
|
||||
* @return OauthResultClientCredentials
|
||||
*/
|
||||
public function setGrantType($grantType)
|
||||
{
|
||||
$this->grantType = $grantType;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return DateTime
|
||||
*/
|
||||
public function getExpireDate()
|
||||
{
|
||||
return $this->expireDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param DateTime $date
|
||||
*/
|
||||
public function calculateExpireDate($date)
|
||||
{
|
||||
$this->expireDate = $date->add(new DateInterval('PT' . ($this->expiresIn - 60) . 'S'));
|
||||
}
|
||||
|
||||
public function hasExpire()
|
||||
{
|
||||
return ($this->expireDate <= new DateTime());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user