first commit
This commit is contained in:
104
lib/Client/GateWayRouter.php
Normal file
104
lib/Client/GateWayRouter.php
Normal file
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
|
||||
namespace Yeepay\Yop\Sdk\Client;
|
||||
|
||||
use GuzzleHttp\Psr7\Uri;
|
||||
use Yeepay\Yop\Sdk\Config\Mode;
|
||||
use Yeepay\Yop\Sdk\Internal\Request;
|
||||
|
||||
class GateWayRouter
|
||||
{
|
||||
|
||||
/**
|
||||
* @var ServerRootSpace
|
||||
*/
|
||||
private $serverRootSpace;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $independentApiGroups;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $defaultMode;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private $modes;
|
||||
|
||||
/**
|
||||
* GateWayRouter constructor.
|
||||
* @param ServerRootSpace $serverRootSpace
|
||||
* @param $modes
|
||||
*/
|
||||
public function __construct(ServerRootSpace $serverRootSpace, $modes = [])
|
||||
{
|
||||
$this->serverRootSpace = $serverRootSpace;
|
||||
$this->independentApiGroups = ["bank-encryption"];
|
||||
$this->defaultMode = getenv("yop.sdk.mode");
|
||||
$this->modes = $modes;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $appKey string
|
||||
* @param $request Request
|
||||
* @return Uri
|
||||
*/
|
||||
public function route($appKey, $request)
|
||||
{
|
||||
if ($this->isAppInSandboxMode($appKey)) {
|
||||
return $this->serverRootSpace->getSandboxServerRoot();
|
||||
} else {
|
||||
$serverRoot = $request->getYosFlag() ? $this->serverRootSpace->getYosServerRoot() :
|
||||
$this->serverRootSpace->getServerRoot();
|
||||
$apiGroup = str_replace('_', '-', strtolower($request->getServiceName()));
|
||||
if (in_array($apiGroup, $this->independentApiGroups)) {
|
||||
$result = new Uri();
|
||||
$result->withScheme($serverRoot->getScheme());
|
||||
$result->withHost($serverRoot->getHost());
|
||||
$result->withPort($serverRoot->getPort());
|
||||
$result->withPath($serverRoot->getPath());
|
||||
$result->withUserInfo($serverRoot->getUserInfo());
|
||||
$result->withQuery($serverRoot->getQuery());
|
||||
$result->withFragment($serverRoot->getFragment());
|
||||
|
||||
return $result;
|
||||
} else {
|
||||
return $serverRoot;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $appKey
|
||||
* @return bool
|
||||
*/
|
||||
private function isAppInSandboxMode($appKey)
|
||||
{
|
||||
if (empty($this->defaultMode)) {
|
||||
return isset($this->modes[$appKey]) && $this->modes[$appKey] = Mode::SANDBOX;
|
||||
}
|
||||
|
||||
return $this->defaultMode == Mode::SANDBOX;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $apiGroup
|
||||
* @param string $originHost
|
||||
* @param bool $isYosRequest
|
||||
* @return string
|
||||
*/
|
||||
private function getIndependentApiGroupHost($apiGroup, $originHost, $isYosRequest)
|
||||
{
|
||||
if ($isYosRequest) {
|
||||
return $originHost;
|
||||
}
|
||||
$index = strpos($originHost, '.');
|
||||
|
||||
return substr($originHost, 0, $index).'_'.$apiGroup.substr($originHost, $index, -1);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user