Payment gateway mengirimkan webhook event (payment.success) untuk memperbarui status transaksi di database Anda. Karena kegagalan jaringan, payment gateway sering melakukan retry webhook yang sama berkali-kali. API Anda harus menjamin Idempotency (event ID yang sama tidak boleh diproses 2 kali) dan memverifikasi Signature Webhook.
Endpoint:
POST /webhook/payment
x-signature: VALID_SIGNATURE_KEY
{
"eventId": "EVT_998811",
"orderId": "ORD_1001",
"status": "SUCCESS",
"amount": 250000
}
const processedEventIds = new Set();
const orders = [
{ orderId: "ORD_1001", status: "PENDING_PAYMENT", amount: 250000 }
];
x-signature !== "VALID_SIGNATURE_KEY" → HTTP 401 "Unauthorized webhook signature".eventId, orderId, atau status kosong → HTTP 400 "Invalid webhook payload".processedEventIds.has(eventId) → HTTP 200 "Event already processed". (Penting: Tetap kembalikan HTTP 200 agar payment gateway tidak retry terus menerus!).orderId. Ubah order.status = status dan masukkan eventId ke processedEventIds. Kembalikan HTTP 200 "Order updated successfully".Strategi Webhook Dead Letter Queue (DLQ) & Exponential Backoff Di bagian komentar kode solusi Anda, jelaskan penanganan kegagalan webhook pihak ketiga menggunakan Message Queue (BullMQ/Kafka), Dead Letter Queue (DLQ), dan Retry backoff (1s, 5s, 30s, 5m).