Zeval Digital
Dokumentasi API
Mulai
Pengenalan Autentikasi Kode Respons
Endpoint
Cek Saldo Kategori & Brand Daftar Produk Buat Transaksi Cek Tagihan Bayar Tagihan Cek Status Transaksi Callback
Dokumentasi›API V1
v1 Kredensial API Masuk

Bayar Tagihan

Membayar tagihan yang sudah dicek, dengan ref_id yang sama.

POSThttps://api.zevaldigital.com/v1/bill/pay

Membayar 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

ParameterTipeWajibKeterangan
secret_idstringYaSecret ID Anda.
signaturestringYaHasil md5(secret_id:secret_key:ref_id). Lihat halaman Autentikasi.
ref_idstringYaHarus sama persis dengan ref_id saat cek tagihan.
amountintegerTidaktotal 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."
}
← SebelumnyaCek Tagihan Berikutnya →Cek Status Transaksi