feat(payment): enhance payment configuration to include active gateways and update CORS settings
This commit is contained in:
@@ -545,12 +545,36 @@ class PaymentController extends BaseController
|
||||
#[Route('/api/v1/payment/config', methods: ['GET'])]
|
||||
public function config(): JsonResponse
|
||||
{
|
||||
$testMode = $this->configRepo->get('payment_test_mode') === '1';
|
||||
|
||||
return $this->success([
|
||||
'test_mode' => $this->configRepo->get('payment_test_mode') === '1',
|
||||
'appointment_fee_rials' => (int) $this->configRepo->get('appointment_fee_rials'),
|
||||
'test_mode' => $testMode,
|
||||
'appointment_fee_rials' => (int) ($this->configRepo->get('appointment_fee_rials') ?: 0),
|
||||
'gateways' => $this->activeGateways($testMode),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* درگاههای قابلانتخاب: در حالت تست فقط درگاه آزمایشی، در غیر این صورت هر درگاهی که اعتبارنامهاش ست شده.
|
||||
* @return array<int, array{name: string, label: string}>
|
||||
*/
|
||||
private function activeGateways(bool $testMode): array
|
||||
{
|
||||
if ($testMode) {
|
||||
return [['name' => 'mellat', 'label' => 'بانک ملت (آزمایشی)']];
|
||||
}
|
||||
|
||||
$labels = ['mellat' => 'بانک ملت', 'sep' => 'سپ (سامان کیش)'];
|
||||
$gateways = [];
|
||||
foreach ([$this->mellat, $this->sep] as $gateway) {
|
||||
if ($gateway->isConfigured()) {
|
||||
$name = $gateway->getName();
|
||||
$gateways[] = ['name' => $name, 'label' => $labels[$name] ?? $name];
|
||||
}
|
||||
}
|
||||
return $gateways;
|
||||
}
|
||||
|
||||
#[IsGranted('IS_AUTHENTICATED_FULLY')]
|
||||
#[Route('/api/v1/my/payments', methods: ['GET'])]
|
||||
public function myPayments(Request $request, #[CurrentUser] User $user): JsonResponse
|
||||
|
||||
@@ -21,6 +21,13 @@ class MellatGateway implements PaymentGatewayInterface
|
||||
|
||||
public function getName(): string { return 'mellat'; }
|
||||
|
||||
public function isConfigured(): bool
|
||||
{
|
||||
return $this->cfg('mellat_terminal_id', $this->terminalId) !== ''
|
||||
&& $this->cfg('mellat_username', $this->username) !== ''
|
||||
&& $this->cfg('mellat_password', $this->password) !== '';
|
||||
}
|
||||
|
||||
private function cfg(string $key, string $envFallback): string
|
||||
{
|
||||
return $this->configRepo->get($key) ?: $envFallback;
|
||||
|
||||
@@ -6,6 +6,8 @@ class MockGateway implements PaymentGatewayInterface
|
||||
{
|
||||
public function getName(): string { return 'mock'; }
|
||||
|
||||
public function isConfigured(): bool { return true; }
|
||||
|
||||
public function initiate(int $amountRials, string $orderId, string $callbackUrl): PaymentInitResult
|
||||
{
|
||||
$redirectUrl = $callbackUrl . '&mock=1&ResCode=0&RefId=MOCK-' . $orderId;
|
||||
|
||||
@@ -6,6 +6,11 @@ interface PaymentGatewayInterface
|
||||
{
|
||||
public function getName(): string;
|
||||
|
||||
/**
|
||||
* Whether this gateway has valid credentials configured and can be offered to users.
|
||||
*/
|
||||
public function isConfigured(): bool;
|
||||
|
||||
/**
|
||||
* Initiates payment, returns redirect URL or token.
|
||||
*/
|
||||
|
||||
@@ -20,6 +20,11 @@ class SepGateway implements PaymentGatewayInterface
|
||||
|
||||
public function getName(): string { return 'sep'; }
|
||||
|
||||
public function isConfigured(): bool
|
||||
{
|
||||
return $this->cfg('sep_terminal_id', $this->terminalId) !== '';
|
||||
}
|
||||
|
||||
private function cfg(string $key, string $envFallback): string
|
||||
{
|
||||
return $this->configRepo->get($key) ?: $envFallback;
|
||||
|
||||
Reference in New Issue
Block a user