Skip to content

Commit b40119a

Browse files
author
root
committed
Dispatch gateway webhook event
1 parent b145669 commit b40119a

2 files changed

Lines changed: 42 additions & 1 deletion

File tree

src/Application/Services/PagarmeWebhookService.php

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Kaninstein\MultiAcquirerCheckout\Application\Services;
44

55
use Illuminate\Contracts\Events\Dispatcher;
6+
use Kaninstein\MultiAcquirerCheckout\Domain\Webhooks\Events\GatewayWebhookReceived;
67
use Kaninstein\MultiAcquirerCheckout\Infrastructure\Repositories\Contracts\PaymentRepositoryInterface;
78

89
final readonly class PagarmeWebhookService
@@ -31,6 +32,17 @@ public function handle(array $payload): array
3132
return ['status' => 'ignored'];
3233
}
3334

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+
3446
$payment = $this->payments->findByGatewayTransactionId($gatewayTransactionId);
3547
if ($payment === null) {
3648
return ['status' => 'ignored'];
@@ -110,5 +122,16 @@ private function extractGatewayTransactionId(string $eventType, array $data): ?s
110122

111123
return null;
112124
}
113-
}
114125

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+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Kaninstein\MultiAcquirerCheckout\Domain\Webhooks\Events;
4+
5+
final readonly class GatewayWebhookReceived
6+
{
7+
/**
8+
* @param array<string,mixed> $payload
9+
*/
10+
public function __construct(
11+
public string $gatewayName,
12+
public string $gatewayTransactionId,
13+
public string $status,
14+
public string $eventType,
15+
public array $payload,
16+
) {}
17+
}
18+

0 commit comments

Comments
 (0)