Webhook memungkinkan Anda menerima pembaruan real-time tentang transaksi Anda. Ketika status transaksi diperbarui, kami akan mengirimkan permintaan POST ke URL yang telah Anda konfigurasikan.
Anda dapat mengkonfigurasi URL webhook Anda di halaman "Pengaturan Webhook" pada dashboard merchant Anda. Anda juga akan diberikan kunci rahasia yang harus Anda gunakan untuk memverifikasi keaslian webhook.
Untuk mengirimkan URL webhook dan kunci rahasia Anda:
Untuk memastikan bahwa permintaan webhook berasal dari kami, kami akan menyertakan tanda tangan (signature) di header X-Ongkirmurah-Signature. Tanda tangan tersebut adalah hash HMAC-SHA256 dari timestamp dan payload permintaan, menggunakan kunci rahasia Anda.
Berikut adalah contoh cara memverifikasi tanda tangan di PHP:
$secret = 'kunci-rahasia-webhook-anda';
$payload = file_get_contents('php://input');
$timestamp = $_SERVER['HTTP_X_ONGKIRMURAH_TIMESTAMP'];
$signature = $_SERVER['HTTP_X_ONGKIRMURAH_SIGNATURE'];
$expectedSignature = hash_hmac('sha256', $timestamp . '.' . $payload, $secret);
if ($signature !== $expectedSignature) {
// Tanda tangan tidak valid
http_response_code(401);
exit();
}
Untuk mengidentifikasi jenis event webhook, kami menyertakan header X-Ongkirmurah-Event dengan nama event yang relevan. Berikut adalah daftar event yang mungkin Anda terima:
| Event Name | Deskripsi |
|---|---|
transaction.created |
Dipicu ketika transaksi baru berhasil dibuat. |
transaction.success |
Dipicu ketika transaksi sukses. |
transaction.updated |
Dipicu ketika transaksi diperbarui. |
transaction.calculation-adjusted |
Dipicu ketika perhitungan transaksi disesuaikan. |
transaction.cancelled |
Dipicu ketika transaksi dibatalkan. |
transaction.delivered |
Dipicu ketika transaksi ditandai sebagai terkirim. |
transaction.failed |
Dipicu ketika transaksi gagal. |
transaction.on-delivery |
Dipicu ketika transaksi sedang dalam pengiriman. |
transaction.picked-up-and-being-processed |
Dipicu ketika transaksi diambil dan sedang diproses. |
transaction.returned |
Dipicu ketika transaksi dikembalikan. |
transaction.will-be-returned |
Dipicu ketika transaksi ditandai akan dikembalikan. |
Payload akan berupa objek JSON dari attribut data dengan struktur yang sama seperti respons dari API Pelacakan.
{
"awb": "JNE1234567890",
"courier_name": "JNE Express",
"history": [
{
"datetime": "2025-06-28 10:00:00",
"message": "Paket diterima di kantor cabang pengirim",
"note": "-"
}
],
"item_height": 5,
"item_length": 20,
"item_name": "Baju Kaos",
"item_type": "Pakaian",
"item_value": 100000,
"item_weight": 500,
"item_width": 15,
"receiver_address": "Jl. Penerima No. 45, RT 003 RW 004",
"receiver_city": "Kota Tujuan",
"receiver_district": "Kecamatan Tujuan",
"receiver_name": "Siti Aminah",
"receiver_phone": "089876543210",
"receiver_province": "Provinsi Tujuan",
"receiver_subdistrict": "Kelurahan Tujuan",
"receiver_zip_code": "54321",
"ref_id": "JNE123456789",
"sender_address": "Jl. Contoh No. 123, RT 001 RW 002",
"sender_city": "Kota Contoh",
"sender_district": "Kecamatan Contoh",
"sender_name": "Budi Santoso",
"sender_phone": "081234567890",
"sender_province": "Provinsi Contoh",
"sender_subdistrict": "Kelurahan Contoh",
"sender_zip_code": "12345",
"service_code": "REG",
"service_name": "Reguler",
"fee": 10000,
"fee_tax": 1000,
"insurance": 5000,
"insurance_tax": 500,
"total_fee": 16500,
"supplier_calculation_adjustment": {
"weight": 1200,
"length": 25,
"width": 20,
"height": 10,
"fee": 12000,
"insurance": 6000,
"return_cost": 0
},
"shipment_status": 0,
"status": 1
}
| Nama | Tipe Data | Contoh | Deskripsi |
|---|---|---|---|
| awb | string |
JTE012345678901 | Nomor resi paket |
| ref_id | string |
1712368141232 | Nomor Ref ID transaksi Ongkirmurah |
| service_code | string |
jtexpress_ez | Kode layanan yang digunakan untuk transaksi |
| service_name | string |
EZ | Nama layanan pengiriman untuk dari kode service saat transaksi |
| courier_name | string |
J&T Express | Nama kurir ekspedisi dari kode layanan transaksi |
| status | integer |
1 | Status transaksi pada layanan Ongkirmurah |
| sender_name | string |
John Doe | Nama pengirim |
| sender_address | string |
Jl Alamat pengirim | Detail alamat pengirim |
| sender_phone | string |
08000000001 | No telpon pengirim |
| sender_subdistrict | string |
Kel. Tambora | Nama kelurahan pengirim |
| sender_district | string |
Tambora | Nama kecamatan pengirim |
| sender_city | string |
Kota Adm. Jakarta Barat | Nama kota pengirim |
| sender_province | string |
Dki Jakarta | Nama provinsi pengirim |
| sender_zip_code | string |
11220 | Kode pos pengirim |
| receiver_name | string |
Jane Doe | Nama penerima |
| receiver_address | string |
Jl Alamat penerima | Detail alamat penerima |
| receiver_phone | string |
08000000002 | No telpon penerima |
| receiver_subdistrict | string |
Kel. Tambora | Nama kelurahan penerima |
| receiver_district | string |
Tambora | Nama kecamatan penerima |
| receiver_city | string |
Kota Adm. Jakarta Barat | Nama kota penerima |
| receiver_province | string |
Dki Jakarta | Nama provinsi penerima |
| receiver_zip_code | string |
11220 | Kode pos penerima |
| item_name | string |
Nama barang | Nama barang yang dikirim |
| item_type | string |
1 | Tipe barang |
| item_length | integer |
10 | Dimensi panjang barang dalam sentimeter (cm) |
| item_width | integer |
15 | Dimensi lebar barang dalam sentimeter (cm) |
| item_height | integer |
20 | Dimensi tinggi barang dalam sentimeter (cm) |
| item_weight | integer |
1000 | Berat barang dalam gram (gr) |
| item_value | integer |
10000 | Harga barang dalam Rupiah |
| fee | integer |
10000 | Biaya pengiriman |
| fee_tax | integer |
1000 | Pajak biaya pengiriman |
| insurance | integer |
5000 | Biaya asuransi |
| insurance_tax | integer |
500 | Pajak biaya asuransi |
| total_fee | integer |
16500 | Total biaya pengiriman (fee + fee_tax + insurance + insurance_tax) |
| supplier_calculation_adjustment | object |
- | Objek yang berisi penyesuaian perhitungan dari supplier. Hanya ada jika ada penyesuaian. |
| supplier_calculation_adjustment.weight | integer |
1200 | Penyesuaian berat barang dalam gram (gr). Tidak selalu ada. |
| supplier_calculation_adjustment.length | integer |
25 | Penyesuaian dimensi panjang barang dalam sentimeter (cm). Tidak selalu ada. |
| supplier_calculation_adjustment.width | integer |
20 | Penyesuaian dimensi lebar barang dalam sentimeter (cm). Tidak selalu ada. |
| supplier_calculation_adjustment.height | integer |
10 | Penyesuaian dimensi tinggi barang dalam sentimeter (cm). Tidak selalu ada. |
| supplier_calculation_adjustment.fee | integer |
12000 | Penyesuaian biaya pengiriman. Tidak selalu ada. |
| supplier_calculation_adjustment.insurance | integer |
6000 | Penyesuaian biaya asuransi. Tidak selalu ada. |
| supplier_calculation_adjustment.return_cost | integer |
0 | Penyesuaian biaya pengembalian. Tidak selalu ada. |
| shipment_status | integer |
1 | Status kiriman paket |
| history | array |
- | Data timeline kiriman paket |
| history.*.datetime | string |
1970-01-01 00:00:00 | Waktu paket berganti status pengiriman |
| history.*.message | string |
JAKARTA - Manifes | Pesan terkait status paket |
| history.*.note | string |
- | Catatan khusus terkait status paket |
| history.*.pod.pod_photo | string |
https://client.coresyssap.com/photo/pod/TEST-16122022-201 | Tautan foto bukti pengiriman (opsional) |
| history.*.pod.pod_sign | string |
https://client.coresyssap.com/photo/pod_signature/TEST-16122022-201 | Tautan foto bukti tanda tangan penerima (opsional) |
Endpoint Anda harus mengembalikan kode status HTTP 2xx untuk mengakui penerimaan webhook. Jika kami tidak menerima kode status 2xx, kami akan menganggap pengiriman webhook gagal dan akan mencoba kembali beberapa kali dengan strategi backoff eksponensial.