Perilaku pengiriman
Diambil dari dokumentasi resmi vendor, terakhir diperiksa 2026-08-06. Jika vendor tidak menyebut angka, tabel ini juga tidak mencantumkannya.
| Batas waktu respons | tidak dipublikasikan vendor Pengiriman dimasukkan ke antrean Action Scheduler dan dijalankan oleh WP-Cron, sehingga webhook baru berangkat saat halaman berikutnya dimuat, bukan saat event terjadi |
|---|---|
| Percobaan ulang | tidak dipublikasikan vendor |
| Berhenti mencoba | Webhook dinonaktifkan setelah lebih dari lima kegagalan pengiriman berturut-turut |
| Sumber | https://woocommerce.com/document/webhooks/ |
Tanda tangan
Diverifikasi dengan verifier yang berfungsi dan dibuktikan oleh test suite, bukan dibaca dari dokumentasi. Terakhir diverifikasi 2026-08-20.
| Algoritma | HMAC-SHA256 |
|---|---|
| Payload bertanda tangan | raw body |
| Encoding | base64 |
| Header | x-wc-webhook-signature |
| Toleransi | tidak diberlakukan |
Verifikasi
Raw body dari permintaan, byte demi byte, sebelum parsing JSON apa pun. Setiap skema di halaman ini rusak begitu framework melakukan serialisasi ulang pada payload.
const crypto = require("node:crypto");
// base64(HMAC-SHA256(secret, raw body))
const expected = crypto
.createHmac("sha256", webhookSecret)
.update(rawBody)
.digest("base64");
const received = Buffer.from(req.headers["x-wc-webhook-signature"] ?? "");
const wanted = Buffer.from(expected);
// timingSafeEqual throws on a length mismatch, so check that first.
const valid =
received.length === wanted.length && crypto.timingSafeEqual(received, wanted);Yang sering menjebak
Webhook tidak terkirim saat pesanan terjadi. Pengiriman dimasukkan ke antrean Action Scheduler, yang berjalan di atas WP-Cron, yang baru berjalan saat seseorang memuat halaman berikutnya; di toko yang sepi, itu berarti jeda bawaan beberapa menit sebelum byte pertama berangkat.
Lebih dari lima kegagalan pengiriman berturut-turut langsung menonaktifkan webhook, dan pemilik toko jarang tahu sampai ada sesuatu di downstream yang jelas-jelas usang.
Baca juga
AnyHook berada di depan endpoint yang menerima webhook dari WooCommerce: AnyHook menjawab dalam sekitar satu detik, mencoba ulang sesuai jadwalnya sendiri saat server Anda mati, dan menyimpan setiap event agar dapat diputar ulang (replay). Ganti satu URL, kode Anda tetap.