ZAVOPAY H2H
API DOCS

Dokumentasi REST API & Interactive Sandbox

Spesifikasi lengkap integrasi REST API H2H, otentikasi signature MD5, dan testing real-time.

Masuk Portal Daftar Mitra
BASE URL PRODUCTION
https://h2h.zavopay.web.id/api/h2h/
FORMAT OTENTIKASI
HMAC-SHA256 (Canonical Body Sorted A-Z & Secret: api_key)
CONTENT TYPE
application/json (UTF-8)

1. Interactive Live API Sandbox Console

Live MD5 Calculated Signature:
md5(...)
HTTP 200 OK
// Klik "Kirim API Request Sekarang" untuk melihat hasil response JSON...

2. Spesifikasi Endpoint & Contoh Code Multi-Bahasa

Eksekusi Order Top-Up Transaksi H2H

Mengirimkan request pengisian pulsa, paket data, PLN token, atau saldo e-wallet secara instant ke sistem Zavopay H2H.

Parameter Request Body (JSON):

Field Parameter Tipe Data Wajib Deskripsi & Contoh
member_id STRING YA ID Member Reseller Anda (Contoh: ZV88901)
api_key STRING YA API Key Publik dari dashboard Reseller
buyer_sku_code STRING YA Kode SKU Produk dari Katalog (Contoh: S10, PLN20)
customer_no STRING YA Nomor Handphone / No Meter PLN / ID Game Tujuan
ref_id STRING YA ID Unik Transaksi dari server Anda (Anti Duplicate)
timestamp INTEGER YA Unix Timestamp dalam detik saat request dikirim (Toleransi selisih waktu max 5 menit)
signature STRING YA Hasil HMAC-SHA256 dari canonical string payload (Urutkan key A-Z: key1=val1&key2=val2...) dengan Secret api_key

Contoh Kode Request (HMAC-SHA256):

<?php
$apiKey = "zv_key_88901";
$payload = [
  "member_id" => "ZV88901",
  "api_key" => $apiKey,
  "buyer_sku_code" => "S10",
  "customer_no" => "081234567890",
  "ref_id" => "ORDER-" . time(),
  "timestamp" => time()
];

// 1. Urutkan key payload A-Z
ksort($payload);
$pairs = [];
foreach ($payload as $k => $v) {
  if ($k !== 'signature') $pairs[] = "$k=$v";
}
$stringToSign = implode('&', $pairs);

// 2. Hitung HMAC-SHA256
$payload['signature'] = hash_hmac('sha256', $stringToSign, $apiKey);

$ch = curl_init("https://h2h.zavopay.web.id/api/h2h/transaksi.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));

$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>

Contoh Response Sukses (JSON):

{
  "response_code": "00",
  "message": "Transaksi Berhasil",
  "data": {
    "trx_id": "TRX-20260817-84910",
    "ref_id": "ORDER-TEST-1001",
    "buyer_sku_code": "S10",
    "customer_no": "081234567890",
    "price": 10180,
    "status": "SUCCESS",
    "sn": "1829-4910-2948-1029",
    "balance_remaining": 1489820
  }
}

3. Standar Otentikasi & Keamanan (Security Rules)

  • Header Protocol: Semua request API wajib menggunakan header Content-Type: application/json.
  • Formula MD5 Signature: Dihitung dengan algoritma MD5 string tanpa spasi: md5(member_id + api_key + ref_id). Khusus endpoint profile menggunakan md5(member_id + api_key + 'PROFILE').
  • Format Member ID: Menggunakan format resmi ZV(KODE ACAK) (contoh: ZV88901) yang didapatkan dari Portal Mitra.
  • Proteksi Whitelist IP: Request API ditolak (RC 403) jika IP Address server pengirim tidak terdaftar di Whitelist IP Reseller.
  • Anti Duplicate (Deduplikasi): Pengiriman request dengan ref_id yang sama akan mengembalikan data status transaksi terdahulu tanpa memotong saldo ulang.

4. Tabel Kode Status Respons (Response Codes / RC)

RC HTTP Status Keterangan Status Tindakan Sistem Reseller
00 200 OK SUCCESS - Transaksi Berhasil Diproses & SN Diterbitkan Potong saldo pengguna reseller & simpan Serial Number (SN)
01 200 OK PENDING - Transaksi Dalam Pemrosesan Antrean Upstream Tunggu push Webhook Callback atau lakukan polling Cek Status
400 400 Bad Request Signature Invalid / Parameter Wajib Tidak Lengkap Perbaiki skema MD5 Signature atau periksa nama parameter JSON
401 401 Unauthorized API Key Tidak Valid atau Reseller Tidak Ditemukan Periksa kembali API Key / Secret Key di halaman profil reseller
403 403 Forbidden IP Address Server Pengirim Tidak Terdaftar di Whitelist Daftarkan IP Server Anda di Portal Reseller
404 404 Not Found Kode SKU Produk Tidak Ditemukan Periksa kembali SKU produk melalui endpoint Pricelist
97 400 Bad Request Stok Produk Sedang Kosong Gagal transaksi, infokan ke pengguna stok sedang habis
98 400 Bad Request Produk Sedang Gangguan / Maintenance Upstream Gagal transaksi, alihkan ke produk jalur alternatif
99 400 Bad Request Saldo Deposit Reseller Tidak Cukup Lakukan Top Up Saldo Deposit H2H di Zavopay Server

5. Spesifikasi Webhook Callback Push Notification

Ketika status order pending berubah menjadi SUCCESS atau FAILED, server Zavopay akan mengirimkan HTTP POST JSON secara realtime ke URL callback Anda.

{
  "event": "transaction_status_updated",
  "data": {
    "trx_id": "TRX-20260817-84910",
    "ref_id": "ORDER-TEST-1001",
    "buyer_sku_code": "S10",
    "customer_no": "081234567890",
    "status": "SUCCESS",
    "sn": "1829-4910-2948-1029",
    "message": "Transaksi Sukses",
    "timestamp": "2026-08-17T20:00:00+07:00"
  }
}