@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace Extend\Ca;
|
||||
|
||||
use App\Exception\BusinessException;
|
||||
use Extend\Ca_V2\CaOffline as CaOfflineV2;
|
||||
use Extend\Ca_V2\CaOnline as CaOnlineV2;
|
||||
|
||||
class CaGatewayFactory
|
||||
{
|
||||
public static function makeScene(string $scene): Ca
|
||||
{
|
||||
$sceneConfig = config("ca.gateway.{$scene}", []);
|
||||
if (!is_array($sceneConfig)) {
|
||||
throw new BusinessException("不支持的CA场景配置: {$scene}");
|
||||
}
|
||||
|
||||
$driver = (string) ($sceneConfig['driver'] ?? config('ca.gateway.driver', 'legacy'));
|
||||
$mode = (string) ($sceneConfig['mode'] ?? config('ca.gateway.mode', 'online'));
|
||||
|
||||
return self::make($mode, $driver);
|
||||
}
|
||||
|
||||
public static function make(?string $mode = null, ?string $driver = null): Ca
|
||||
{
|
||||
$resolvedMode = strtolower($mode ?: (string) config('ca.gateway.mode', 'online'));
|
||||
$resolvedDriver = strtolower($driver ?: (string) config('ca.gateway.driver', 'legacy'));
|
||||
|
||||
return match ([$resolvedDriver, $resolvedMode]) {
|
||||
['legacy', 'online'] => new CaOnline(),
|
||||
['legacy', 'offline'] => new CaOffline(),
|
||||
['v2', 'online'] => new CaOnlineV2(),
|
||||
['v2', 'offline'] => new CaOfflineV2(),
|
||||
default => throw new BusinessException("不支持的CA驱动配置: {$resolvedDriver}/{$resolvedMode}"),
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user