Verifikasi & Idempotensi Tanda Tangan Webhook

Verifikasi webhook Agen 6MM dengan badan permintaan mentah dan proses retry, timeout, serta event berulang tanpa tindakan bisnis yang duplikat.
View as Markdown

Webhook memberi tahu backend mitra tentang perubahan status bisnis asinkron. Karena pengiriman dapat dicoba ulang, setiap penerima harus memverifikasi tanda tangan sebelum mem-parse data tepercaya dan harus memproses peristiwa secara idempotensial.

Header Webhook

HeaderDeskripsi
X-Agent-TimestampTimestamp Unix dalam hitungan detik.
X-Agent-NoncePerlindungan tayangan ulang nonce.
tanda tangan agen xHMAC- tanda tanganSHA256 .
timestamp + nonce + rawBody

Gunakan body permintaan mentah yang diterima secara tepat selama HTTP saat merekonstruksi nilai yang ditandatangani. Mengurai dan menyeriakan ulang JSON terlebih dahulu dapat mengubah urutan ruang kosong atau field dan menghasilkan tanda tangan yang berbeda.

Alur verifikasi

  1. Baca timestamp, nonce, dan header tanda tangan.
  2. Tangkap badan permintaan mentah yang tidak dimodifikasi.
  3. Bangun timestamp + nonce + rawBody.
  4. Hitung HMAC-SHA256 dengan mitra API rahasia.
  5. Bandingkan tanda tangan yang dihitung dan diterima menggunakan perbandingan waktu konstan.
  6. Terapkan timestamp-freshness dan nonce-reuse yang disetujui.
  7. Analisis dan proses event hanya setelah verifikasi berhasil.

Ketika verifikator Agent SDK resmi tersedia, gunakan itu daripada mempertahankan kode penandatanganan independen.

Idempotensi urutan

KasusPenanganan
Permintaan transfer awalBuat satu agentOrderNoyang unik secara global.
HTTP timeoutQuery agentOrderNo asli sebelum membuat yang baru.
Respons PROCESSINGTunggu status webhook atau urutan kueri.
Webhook berulangDeduplikasi berdasarkan kunci idempotensi dan status akhir.

Simpan cukup informasi untuk mengenali pengiriman berulang dan pulihkan dengan aman:

LapanganTujuan
Kunci acara atau bisnisMengidentifikasi notifikasi atau operasi secara unik.
Nomor pesanan mitraMenghubungkan event ke permintaan asli.
Hash payloadMembantu mengidentifikasi muatan berulang yang bertentangan.
Status pemrosesan saat iniDistinguishes yang diterima, diproses, berhasil, dan gagal dalam pekerjaan.
Status bisnis akhirMencegah aksi terminal diterapkan dua kali.
Timestamp yang diprosesMendukung kebijakan investigasi dan retensi.

Commit catatan perubahan bisnis dan idempotensi dalam transaksi yang sama jika memungkinkan. Peristiwa berulang harus mengembalikan hasil yang sudah diketahui, bukan menerapkan saldo, pesanan, atau perubahan pengguna lagi.

Aturan timeout dan percobaan ulang

Timeout HTTP tidak membuktikan bahwa permintaan asli gagal. Query operasi menggunakan agentOrderNoasli, atau tunggu webhook-nya, sebelum memutuskan apakah tindakan lain diperlukan. Membuat nomor order bisnis baru setelah setiap timeout dapat menyebabkan pergerakan dana duplikat.

Daftar periksa produksi

  • Verifikasi tanda tangan sebelum JSON parsing atau pemrosesan bisnis.
  • Menjaga badan mentah secara independen dari muatan yang telah diparse.
  • Tolak permintaan yang sudah usang atau diputar ulang sesuai dengan kebijakan integrasi yang telah disetujui.
  • Membuat pemrosesan acara aman untuk pengiriman berulang maupun di luar urutan.
  • Catat event ID, nomor pesanan mitra, hasil pemrosesan, dan waktu permintaan.
  • Menyusun rahasia dan nilai tanda tangan dari log dan lampiran dukungan.