Otázka 03 / 15
Platba kartou
Kolega napojil platbu kartou přes externí platební bránu: zákazník na konci objednávky zadá kartu a podle výsledku se objednávka označí jako zaplacená. Chce to ještě tento týden nasadit a prosí o review. Co mu vrátíš?
Ctrl/Cmd+klik na metodu, třídu nebo konstantu otevře její deklaraci, Alt+← vrátí zpět.
app › Services › Payment › PaymentService.php
<?php declare(strict_types=1);
namespace App\Services\Payment;
use App\Models\Order;
use App\Services\Payment\Gateway\ChargeRequest;
use App\Services\Payment\Gateway\GatewayClient;
use Psr\Log\LoggerInterface;
final class PaymentService
{
public function __construct(
private readonly GatewayClient $gatewayClient,
private readonly LoggerInterface $logger,
)
{}
public function chargeCard(Order $order, string $cardToken): ?string
{
try {
$result = $this->gatewayClient->charge(ChargeRequest::forOrder($order, $cardToken));
return $result->isPaid()
? $result->transactionId
: null;
} catch (\Exception $e) {
$this->logger->critical('Payment failed');
return null;
}
}
}