Callback
Callback
Terakhir diperbarui: 19 Agustus 2026.
Callback dikirim ke URL mitra saat status transaksi berubah. Callback membantu mitra memperbarui transaksi tanpa polling terus-menerus.
Aturan komisi untuk transaksi API-to-API mengikuti kesepakatan bisnis API mitra yang sudah dikonfigurasi oleh tim Miharogames. Detail nominal komisi tidak dikirim lewat callback transaksi customer.
Callback URL Registration
Miharogames hanya mengirim callback ke URL yang sudah diajukan dan diaktifkan. Informasikan URL callback per environment saat onboarding.
| Environment | Contoh URL mitra |
|---|---|
| Development | https://sandbox-partner.example.com/miharogames/callback |
| Production | https://partner.example.com/miharogames/callback |
Ketentuan endpoint callback mitra:
- memakai HTTPS untuk production;
- menerima request
POSTdengan body JSON; - mengembalikan response
2xxjika payload sudah diterima; - memproses payload secara idempotent memakai
event_idataupartner_trx_id; - tidak mengubah nama field payload dari kontrak Miharogames.
Delivery Behavior
Callback dikirim dengan prinsip at-least-once. Artinya, mitra bisa menerima event yang sama lebih dari satu kali jika endpoint mitra timeout atau tidak mengembalikan response sukses.
Mitra wajib membuat receiver idempotent memakai event_id atau partner_trx_id.
Webhook Payload
{
"event": "transaction.updated",
"event_id": "callback_9381_20260814144652",
"occurred_at": "2026-08-14 14:46:52",
"partner_trx_id": "OMNI-TRX-001",
"transaction_number": "PAY/KFI/8/2026/54",
"payment_status": "PAID",
"transaction_status": "SUCCESS",
"serial_number": "0214073400005825489229"
}
Payload Field
| Field | Keterangan |
|---|---|
event | Nama event. Untuk update transaksi bernilai transaction.updated. |
event_id | ID unik callback. Simpan untuk idempotency. |
occurred_at | Waktu event dibuat, format YYYY-MM-DD HH:mm:ss. |
partner_trx_id | ID transaksi dari sistem mitra. |
transaction_number | Nomor transaksi Miharogames. |
payment_status | Status pembayaran. |
transaction_status | Status transaksi. |
serial_number | SN transaksi jika sudah tersedia. Bernilai null jika belum ada. |
Response Mitra
Endpoint mitra sebaiknya mengembalikan response 2xx secepat mungkin. Proses berat seperti update banyak tabel atau notifikasi user sebaiknya diproses async di sisi mitra.
{
"status": true,
"message": "Callback diterima."
}
Retry Policy
Jika endpoint mitra timeout, mengalami kesalahan server (HTTP 5xx), atau tidak mengembalikan response sukses (HTTP 2xx), Miharogames akan melakukan percobaan pengiriman ulang (retry) otomatis menggunakan mekanisme Exponential Backoff hingga maksimal 5 kali percobaan.
| Percobaan Ke- | Jeda Pengiriman Ulang | Status |
|---|---|---|
| 1 (Awal) | Langsung saat transaksi diperbarui | PENDING (jika gagal) |
| 2 | +1 menit setelah percobaan ke-1 gagal | PENDING |
| 3 | +5 menit setelah percobaan ke-2 gagal | PENDING |
| 4 | +15 menit setelah percobaan ke-3 gagal | PENDING |
| 5 | +30 menit setelah percobaan ke-4 gagal | PENDING |
| 6 (Terakhir) | +60 menit setelah percobaan ke-5 gagal | FAILED (berhenti) |
Jika setelah 5 kali retry (total 6 percobaan) endpoint mitra tetap gagal atau timeout, status pengiriman callback akan berubah permanen menjadi FAILED dan sistem tidak akan mencoba mengirim ulang. Mitra disarankan mengecek status transaksi manual melalui endpoint Payment Status.
Note: Skema kegagalan webhook Miharogames mengadopsi konsep Exponential Backoff dari standar industri penyedia API besar seperti Stripe, Adyen, dan Shopify. Skema ini bertujuan memberi waktu bagi server mitra untuk pulih (downtime/restart) dan mencegah efek thundering herd akibat koneksi yang bertubi-tubi.
Best Practice Receiver
- Validasi payload wajib ada sebelum update transaksi.
- Simpan
event_iduntuk mencegah proses ganda. - Cocokkan
partner_trx_iddengan transaksi di sistem mitra. - Balas
2xxsetelah payload diterima dan disimpan. - Gunakan payment status endpoint sebagai fallback jika callback belum diterima.