Bayar Tagihan
Membayar tagihan yang sudah dicek, dengan ref_id yang sama.
POST
https://api.zevaldigital.com/v1/bill/payMembayar tagihan yang sudah dicek lewat Cek Tagihan. Saldo Anda dipotong sebesar total dari hasil cek, lalu pembayaran diproses. Hasil akhirnya (berhasil atau gagal) datang lewat Callback, atau bisa dicek lewat Cek Status Transaksi dengan ref_id yang sama.
Yang perlu dikirim
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
secret_id | string | Ya | Secret ID Anda. |
signature | string | Ya | Hasil md5(secret_id:secret_key:ref_id). Lihat halaman Autentikasi. |
ref_id | string | Ya | Harus sama persis dengan ref_id saat cek tagihan. |
amount | integer | Tidak | total yang Anda lihat dari hasil cek. Sangat disarankan: bila totalnya berbeda dari hasil cek, pembayaran ditolak dengan AMOUNT_MISMATCH dan saldo tidak terpotong. |
Aman dikirim ulangBila request pembayaran terputus dan Anda tidak tahu apakah masuk, kirim ulang request yang sama persis. Tagihan yang sudah dibayar tidak akan dibayar dua kali dan saldo tidak terpotong lagi; yang kembali adalah transaksi pembayaran yang sudah ada.
Pembayaran harus ke hasil cek yang masih berlakuBila hasil cek sudah lewat
expires_at, jawabannya INQUIRY_EXPIRED dan saldo tidak terpotong. Cek ulang tagihan dengan ref_id baru. Pembayaran juga ditolak (INQUIRY_PENDING) bila cek masih pending.Contoh kode
PHP
<?php
// $check = hasil /v1/bill/inquiry dengan $refId yang sama
$result = zeval('/v1/bill/pay', [
'ref_id' => $refId,
'amount' => $check['data']['total'],
], $refId);
if ($result['status'] === 'success') {
echo 'Transaksi ' . $result['data']['trx_id'] . ' berstatus ' . $result['data']['status'];
} else {
echo 'Gagal: ' . $result['error_code'] . ' - ' . $result['message'];
}Node.js
// check = hasil /v1/bill/inquiry dengan refId yang sama
const result = await zeval('/v1/bill/pay', {
ref_id: refId,
amount: check.data.total,
}, refId);
if (result.status === 'success') {
console.log('Transaksi', result.data.trx_id, 'berstatus', result.data.status);
} else {
console.log('Gagal:', result.error_code, '-', result.message);
}Python
# check = hasil /v1/bill/inquiry dengan ref_id yang sama
result = zeval("/v1/bill/pay", {
"ref_id": ref_id,
"amount": check["data"]["total"],
}, ref_id)
if result["status"] == "success":
print("Transaksi", result["data"]["trx_id"], "berstatus", result["data"]["status"])
else:
print("Gagal:", result["error_code"], "-", result["message"])Contoh respons
Pembayaran diterima (masih diproses)
HTTP 200
{
"code": 200,
"status": "success",
"message": "Pembayaran tagihan diproses.",
"data": {
"trx_id": "TRX261007K7Q2M9",
"ref_id": "BILL-1001",
"product_code": "PLNPASCA",
"product_name": "PLN Pascabayar",
"destination": "120140007726",
"price": 244439,
"status": "pending",
"sn": null,
"message": "Transaksi sedang diproses.",
"balance": 355561
}
}Bentuk data sama dengan Buat Transaksi: price = total yang dipotong, sn = nomor referensi/token dari provider saat berhasil. Bila pembayaran gagal, saldo dikembalikan otomatis.
Gagal: total tidak sesuai hasil cek
HTTP 409
{
"code": 409,
"status": "error",
"error_code": "AMOUNT_MISMATCH",
"message": "Total tagihan tidak sesuai dengan hasil cek (Rp 244439)."
}Gagal: hasil cek kedaluwarsa
HTTP 410
{
"code": 410,
"status": "error",
"error_code": "INQUIRY_EXPIRED",
"message": "Hasil cek tagihan sudah kedaluwarsa. Cek ulang tagihan."
}Gagal: belum pernah dicek
HTTP 404
{
"code": 404,
"status": "error",
"error_code": "BILL_NOT_FOUND",
"message": "Hasil cek tagihan untuk ref_id ini tidak ditemukan. Cek tagihan dulu."
}