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;
        }
    }
}