Mode test
Uji integrasi Developer API OngkirHub tanpa kurir dan uang sungguhan: cara kerja kunci test, saldo uji, pemisahan data test dan live, dan webhook livemode.
Kunci test (ohk_test_...) memakai simulator OngkirHub. Kamu bisa menjalankan alur lengkap, dari cek tarif sampai pelacakan dan webhook, tanpa kurir yang datang dan tanpa memotong saldo sungguhan. Mulai integrasi dengan kunci test, lalu ganti ke kunci live saat siap.
Yang sama dan yang berbeda
| Kunci test | Kunci live | |
|---|---|---|
| Endpoint, format permintaan, dan respons | Sama | Sama |
| Tarif dan layanan | Dari simulator, untuk uji coba | Dari kurir, harga sungguhan |
| Pesanan ke kurir | Tidak ada. Resi dan pelacakan disimulasikan. | Pesanan sungguhan, kurir menjemput atau menerima paket |
| Saldo | Saldo uji Rp10.000.000 | Saldo OngkirHub kamu |
| Pembatalan | Langsung disetujui | Ditinjau tim OngkirHub bersama kurir |
| Batas pengiriman harian dan batas per pengiriman | Tidak berlaku | Berlaku |
| Batas permintaan | 120 per 60 detik per kunci, 30 untuk tulis | Sama |
Field livemode |
false |
true |
Harga dari simulator tidak mencerminkan tarif kurir yang sebenarnya. Untuk melihat harga sungguhan, pakai kunci live untuk cek tarif atau buka cek ongkir.
Saldo uji
Kunci test membaca dan memakai saldo uji, bukan saldo sungguhan.
- Saldo uji dimulai dari Rp10.000.000 dan berkurang oleh pengiriman uji 30 hari terakhir. Pengiriman uji yang lebih lama tidak dihitung lagi, jadi saldo uji pulih dengan sendirinya.
GET /v1/walletdanGET /v1/wallet/transactionsdengan kunci test menampilkan saldo uji dan mutasinya:holdsaat pengiriman dibuat,capturesaat kurir menerima pesanan,releasebila gagal, danrefundbila pembatalan disetujui. Jenis mutasinya sama dengan mode live.- Kalau saldo uji tidak cukup,
POST /v1/shipmentsdijawab402 wallet_insufficient_funds, sama seperti di mode live. - Saldo uji tidak bisa diisi dan tidak pernah menjadi uang sungguhan.
Data test dan live terpisah
- Kunci test hanya melihat pengiriman test, kunci live hanya melihat pengiriman live.
GET /v1/shipments/{id}untuk pengiriman dari mode lain dijawab404 not_found. - Penawaran dari
POST /v1/ratesdengan kunci test tidak bisa dipakai untuk membuat pengiriman dengan kunci live, dan sebaliknya. Idempotency-Keydisimpan per mode. UntukPOST /v1/shipments, satu kunci tidak bisa dipakai di kedua mode.- Setiap objek dan setiap event webhook punya field
livemode. Simpan nilainya bersama data di sistemmu agar data uji tidak tercampur dengan data produksi.
Alur pengiriman uji
Pengiriman uji melewati status yang sama dengan pengiriman sungguhan: submitting, lalu booked beberapa detik setelah respons, lalu awb_ready dengan nomor resi simulasi, lalu status perjalanan sampai delivered.
- Resi simulasi terbit sekitar 20 detik sampai beberapa menit setelah pesanan diterima.
- Riwayat pelacakan bergerak selama sekitar 1 jam sampai paket terkirim, dan diperbarui berkala.
- Setiap perubahan status mengirim event webhook dengan
livemode: false.
Resi simulasi bisa dilacak dengan GET /v1/tracking/{awb} memakai kunci test. Resi ini tidak dikenal kurir mana pun.
Mencoba skenario lain
Tanpa penanda, pengiriman uji berakhir dengan status delivered. Untuk menguji alur lain, tulis salah satu penanda ini di nama atau alamat penerima. Penanda hanya berlaku untuk kunci test.
| Penanda | Hasil |
|---|---|
[mock:courier_rejected] |
Kurir menolak pesanan. Status failed, error.code bernilai courier_rejected, dan saldo uji dikembalikan. |
[mock:problem], [mock:lost], [mock:failed_pickup], [mock:cancelled] |
Pelacakan berakhir dengan kendala, status problem. Penanda [mock:cancelled] berarti kurir membatalkan di data pelacakan, jadi statusnya problem, bukan cancelled. |
[mock:returned] |
Paket diretur ke pengirim, status returned. |
[mock:delivered] atau tanpa penanda |
Paket terkirim, status delivered. |
Pembatalan di mode test
Pembatalan dengan kunci test langsung disetujui, supaya alur pembatalan bisa diuji tanpa menunggu.
POST /v1/shipments/{id}/canceluntuk pengiriman berstatusbooked,awb_ready, atauproblemdijawab201denganstatusbernilairefunded,refundAmountsebesar total harga, danreviewNote“Disetujui otomatis di mode test”.- Pengiriman berpindah ke
cancel_requestedlalucancelled, dan eventshipment.status_updatedsertashipment.cancelleddikirim denganlivemode: false. - Saldo uji mendapat catatan
refund. - Pengiriman di status lain ditolak dengan
409 cancellation_not_allowed, sama seperti di mode live.
Di mode live, pembatalan tidak instan: responsnya berstatus requested, pengiriman menjadi cancel_requested, lalu tim OngkirHub meninjau bersama kurir sebelum saldo dikembalikan. Pastikan integrasimu menangani kedua alur ini.
Webhook di mode test
Satu endpoint webhook menerima event dari pengiriman test maupun live. Bedakan dengan field livemode di body event.
- Pengiriman yang dibuat dengan kunci test memicu event sungguhan dengan
livemode: false. - Tombol Kirim tes di menu Developer mengirim event
webhook.testdenganlivemode: false. - Event
topup.paidhanya berasal dari isi saldo sungguhan, jadi selalulivemode: true.
Panduan lengkapnya ada di Webhook.
Pindah ke live
Sebelum memakai kunci live, pastikan:
- Integrasimu menangani
402 wallet_insufficient_funds,409 quote_expired, pengiriman berstatusfailed, dan pembatalan yang masih menunggu tinjauan (cancel_requested). - Setiap
POST /v1/shipmentsmemakaiIdempotency-Keyyang berasal dari pesananmu. - Endpoint webhook memverifikasi
OngkirHub-Signaturedan membuang event duplikat berdasarkanid. - Saldo OngkirHub cukup untuk pengiriman yang akan dibuat.
- Kunci live disimpan di server produksi saja, terpisah dari kunci test.
Lalu buat kunci live di menu Developer dan ganti kunci di konfigurasi servermu. Endpoint dan kodenya tidak perlu diubah.