Feat add payment with gateway of montify
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Payment;
|
||||
|
||||
use App\Services\ConfigService;
|
||||
use App\Services\Payment\Contracts\WalletPaymentGatewayInterface;
|
||||
use App\Services\Payment\Gateways\MontifyPartnerGateway;
|
||||
use InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* انتخاب و مدیریت درگاه فعال شارژ کیف پول.
|
||||
*
|
||||
* افزودن درگاه جدید:
|
||||
* 1) کلاس Gateway با WalletPaymentGatewayInterface
|
||||
* 2) ثبت در map داخل drivers()
|
||||
* 3) مقدار جدید در setting: wallet_payment_provider
|
||||
*/
|
||||
class WalletPaymentManager
|
||||
{
|
||||
public const PROVIDER_NONE = 'none';
|
||||
|
||||
public const PROVIDER_MONTIFY = 'montify';
|
||||
|
||||
public function __construct(private ConfigService $config)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, class-string<WalletPaymentGatewayInterface>>
|
||||
*/
|
||||
public function drivers(): array
|
||||
{
|
||||
return [
|
||||
self::PROVIDER_MONTIFY => MontifyPartnerGateway::class,
|
||||
// مثال آینده:
|
||||
// self::PROVIDER_PAYPING => PaypingDirectGateway::class,
|
||||
];
|
||||
}
|
||||
|
||||
public function configuredProvider(): string
|
||||
{
|
||||
$provider = strtolower($this->config->getString('wallet_payment_provider', ''));
|
||||
if ($provider !== '' && $provider !== self::PROVIDER_NONE) {
|
||||
return $provider;
|
||||
}
|
||||
|
||||
// سازگاری با سوییچ قدیمی external_payment_enabled
|
||||
if ($this->config->getBool('external_payment_enabled', false)) {
|
||||
return self::PROVIDER_MONTIFY;
|
||||
}
|
||||
|
||||
return self::PROVIDER_NONE;
|
||||
}
|
||||
|
||||
public function resolve(?string $provider = null): ?WalletPaymentGatewayInterface
|
||||
{
|
||||
$key = strtolower($provider ?: $this->configuredProvider());
|
||||
if ($key === '' || $key === self::PROVIDER_NONE) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$drivers = $this->drivers();
|
||||
if (!isset($drivers[$key])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return app($drivers[$key]);
|
||||
}
|
||||
|
||||
public function resolveOrFail(?string $provider = null): WalletPaymentGatewayInterface
|
||||
{
|
||||
$gateway = $this->resolve($provider);
|
||||
if (!$gateway) {
|
||||
throw new InvalidArgumentException('درگاه پرداخت پیکربندی نشده است');
|
||||
}
|
||||
|
||||
return $gateway;
|
||||
}
|
||||
|
||||
/** فقط برای UI کلاینت — بدون افشای نوع/credential */
|
||||
public function isOnlineDepositAvailable(): bool
|
||||
{
|
||||
$gateway = $this->resolve();
|
||||
|
||||
return $gateway !== null && $gateway->isAvailable();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{online_enabled: bool}
|
||||
*/
|
||||
public function publicOptions(): array
|
||||
{
|
||||
return [
|
||||
'online_enabled' => $this->isOnlineDepositAvailable(),
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user