You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
ymww_backend/addons/epay/library/v2/Yansongda/Pay/Pay.php

131 lines
2.9 KiB

<?php
namespace Yansongda\Pay;
use Exception;
use Yansongda\Pay\Contracts\GatewayApplicationInterface;
use Yansongda\Pay\Exceptions\InvalidGatewayException;
use Yansongda\Pay\Gateways\Alipay;
use Yansongda\Pay\Gateways\Wechat;
use Yansongda\Pay\Listeners\KernelLogSubscriber;
use Yansongda\Supports\Config;
use Yansongda\Supports\Log;
use Yansongda\Supports\Logger;
use Yansongda\Supports\Str;
/**
* @method static Alipay alipay(array $config) 支付宝
* @method static Wechat wechat(array $config) 微信
*/
class Pay
{
/**
* Config.
*
* @var Config
*/
protected $config;
/**
* Bootstrap.
*
* @author yansongda <me@yansongda.cn>
*
* @throws Exception
*/
public function __construct(array $config)
{
$this->config = new Config($config);
$this->registerLogService();
$this->registerEventService();
}
/**
* Magic static call.
*
* @author yansongda <me@yansongda.cn>
*
* @param string $method
* @param array $params
*
* @throws InvalidGatewayException
* @throws Exception
*/
public static function __callStatic($method, $params): GatewayApplicationInterface
{
$app = new self(...$params);
return $app->create($method);
}
/**
* Create a instance.
*
* @author yansongda <me@yansongda.cn>
*
* @param string $method
*
* @throws InvalidGatewayException
*/
protected function create($method): GatewayApplicationInterface
{
$gateway = __NAMESPACE__.'\\Gateways\\'.Str::studly($method);
if (class_exists($gateway)) {
return self::make($gateway);
}
throw new InvalidGatewayException("Gateway [{$method}] Not Exists");
}
/**
* Make a gateway.
*
* @author yansongda <me@yansonga.cn>
*
* @param string $gateway
*
* @throws InvalidGatewayException
*/
protected function make($gateway): GatewayApplicationInterface
{
$app = new $gateway($this->config);
if ($app instanceof GatewayApplicationInterface) {
return $app;
}
throw new InvalidGatewayException("Gateway [{$gateway}] Must Be An Instance Of GatewayApplicationInterface");
}
/**
* Register log service.
*
* @author yansongda <me@yansongda.cn>
*
* @throws Exception
*/
protected function registerLogService()
{
$config = $this->config->get('log');
$config['identify'] = 'yansongda.pay';
$logger = new Logger();
$logger->setConfig($config);
Log::setInstance($logger);
}
/**
* Register event service.
*
* @author yansongda <me@yansongda.cn>
*/
protected function registerEventService()
{
Events::setDispatcher(Events::createDispatcher());
Events::addSubscriber(new KernelLogSubscriber());
}
}