|
3 | 3 | namespace Kaninstein\MultiAcquirerCheckout\Application\Services; |
4 | 4 |
|
5 | 5 | use Illuminate\Contracts\Events\Dispatcher; |
| 6 | +use Kaninstein\MultiAcquirerCheckout\Domain\Webhooks\Events\GatewayWebhookReceived; |
6 | 7 | use Kaninstein\MultiAcquirerCheckout\Infrastructure\Repositories\Contracts\PaymentRepositoryInterface; |
7 | 8 |
|
8 | 9 | final readonly class PagarmeWebhookService |
@@ -31,6 +32,17 @@ public function handle(array $payload): array |
31 | 32 | return ['status' => 'ignored']; |
32 | 33 | } |
33 | 34 |
|
| 35 | + $status = $this->normalizeStatusForEvent($eventType); |
| 36 | + if ($status !== null) { |
| 37 | + $this->events->dispatch(new GatewayWebhookReceived( |
| 38 | + gatewayName: 'pagarme', |
| 39 | + gatewayTransactionId: $gatewayTransactionId, |
| 40 | + status: $status, |
| 41 | + eventType: $eventType, |
| 42 | + payload: $payload, |
| 43 | + )); |
| 44 | + } |
| 45 | + |
34 | 46 | $payment = $this->payments->findByGatewayTransactionId($gatewayTransactionId); |
35 | 47 | if ($payment === null) { |
36 | 48 | return ['status' => 'ignored']; |
@@ -110,5 +122,16 @@ private function extractGatewayTransactionId(string $eventType, array $data): ?s |
110 | 122 |
|
111 | 123 | return null; |
112 | 124 | } |
113 | | -} |
114 | 125 |
|
| 126 | + private function normalizeStatusForEvent(string $eventType): ?string |
| 127 | + { |
| 128 | + return match ($eventType) { |
| 129 | + 'charge.paid', 'charge.payment_succeeded', 'order.paid' => 'paid', |
| 130 | + 'charge.pending', 'charge.waiting_payment', 'order.pending' => 'pending', |
| 131 | + 'charge.failed', 'charge.payment_failed' => 'failed', |
| 132 | + 'charge.refunded' => 'refunded', |
| 133 | + 'charge.canceled', 'order.canceled' => 'canceled', |
| 134 | + default => null, |
| 135 | + }; |
| 136 | + } |
| 137 | +} |
0 commit comments