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

Buat Transaksi

Membeli satu produk (pulsa, paket data, token listrik, top up, dan lainnya).

POSThttps://api.zevaldigital.com/v1/transaction/create

Membeli satu produk. Saldo Anda langsung dipotong, lalu transaksi diproses. Hasil akhirnya (berhasil atau gagal) datang beberapa saat kemudian lewat Callback, atau bisa Anda cek lewat Cek Status Transaksi.

Yang perlu dikirim

ParameterTipeWajibKeterangan
secret_idstringYaSecret ID Anda.
signaturestringYaHasil md5(secret_id:secret_key:ref_id) (menyertakan ref_id). Lihat halaman Autentikasi.
product_codestringYaKode produk dari Daftar Produk, mis. OKD1.
destinationstringYaTujuan pembelian: nomor HP, ID pelanggan, atau ID game. Contoh 081234567890. Untuk produk dua isian (mis. game), kirim gabungannya dalam satu isian, mis. 121212|asia (lihat catatan di bawah).
ref_idstringYaNomor transaksi dari sistem Anda, harus unik untuk setiap pembelian. Boleh huruf, angka, titik, strip, dan garis bawah, maksimal 64 karakter. Contoh INV-1001.
Apa gunanya ref_id?ref_id adalah nomor pegangan Anda. Bila request Anda terputus (timeout) dan Anda tidak tahu apakah pembelian masuk, kirim ulang request yang sama persis dengan ref_id yang sama. Kami tidak akan memotong saldo dua kali; Anda akan menerima transaksi yang sudah dibuat sebelumnya. Untuk pembelian baru, selalu pakai ref_id baru.
Produk dengan dua isian (mis. game)Beberapa produk, misalnya top up game, butuh dua isian seperti User ID dan Zone ID. Tetap kirim satu isian destination yang sudah digabung, formatnya mengikuti brand produk itu. Contoh dengan User ID 121212 dan Zone asia:

121212|asia (dipisah |)
121212asia (digabung tanpa pemisah)
121212(asia) (isian kedua dalam kurung)
121212-asia (dipisah -)

Bila bentuknya tidak sesuai, jawabannya INVALID_DESTINATION beserta petunjuk format yang benar di message, dan saldo tidak terpotong.

Contoh kode

Memakai fungsi zeval() dari halaman Autentikasi. Perhatikan argumen ketiga: ref_id dipakai untuk menghitung signature.

PHP
<?php
$refId = 'INV-1001';

$result = zeval('/v1/transaction/create', [
    'product_code' => 'OKD1',
    'destination'  => '081234567890',
    'ref_id'       => $refId,
], $refId);   // ref_id juga dipakai untuk signature

if ($result['status'] === 'success') {
    echo 'Transaksi ' . $result['data']['trx_id'] . ' berstatus ' . $result['data']['status'];
} else {
    echo 'Gagal: ' . $result['error_code'] . ' - ' . $result['message'];
}
Node.js
const refId = 'INV-1001';

const result = await zeval('/v1/transaction/create', {
  product_code: 'OKD1',
  destination: '081234567890',
  ref_id: refId,
}, refId); // ref_id juga dipakai untuk signature

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
ref_id = "INV-1001"

result = zeval("/v1/transaction/create", {
    "product_code": "OKD1",
    "destination": "081234567890",
    "ref_id": ref_id,
}, ref_id)  # ref_id juga dipakai untuk signature

if result["status"] == "success":
    print("Transaksi", result["data"]["trx_id"], "berstatus", result["data"]["status"])
else:
    print("Gagal:", result["error_code"], "-", result["message"])

Contoh respons

Berhasil dibuat (masih diproses)
HTTP 200
{
  "code": 200,
  "status": "success",
  "message": "Transaksi dibuat.",
  "data": {
    "trx_id": "TRX261005P5KZ4H",
    "ref_id": "INV-1001",
    "product_code": "OKD1",
    "product_name": "DANA 1.000",
    "destination": "081234567890",
    "price": 1400,
    "status": "pending",
    "sn": null,
    "message": "Transaksi sedang diproses.",
    "balance": 123600
  }
}
Ref_id yang sama dikirim ulang (aman, saldo tidak terpotong lagi)
HTTP 200
{
  "code": 200,
  "status": "success",
  "message": "Transaksi sudah ada untuk ref_id ini.",
  "data": {
    "trx_id": "TRX261005P5KZ4H",
    "ref_id": "INV-1001",
    "product_code": "OKD1",
    "product_name": "DANA 1.000",
    "destination": "081234567890",
    "price": 1400,
    "status": "success",
    "sn": "1234567890",
    "message": "Transaksi berhasil.",
    "balance": 123600
  }
}

Isi data adalah keadaan terbaru transaksi pertama. Jadi bila saat pertama dibuat statusnya pending dan kini sudah selesai, yang kembali sudah success beserta sn. Tidak ada transaksi baru dan saldo tidak terpotong lagi.

Gagal: saldo tidak cukup
HTTP 402
{
  "code": 402,
  "status": "error",
  "error_code": "INSUFFICIENT_BALANCE",
  "message": "Saldo tidak cukup. Saldo saat ini Rp 0."
}
Gagal: tujuan tidak valid
HTTP 422
{
  "code": 422,
  "status": "error",
  "error_code": "INVALID_DESTINATION",
  "message": "Nomor HP tidak valid (contoh 081234567890)."
}
Gagal: ref_id dipakai untuk transaksi lain
HTTP 409
{
  "code": 409,
  "status": "error",
  "error_code": "DUPLICATE_REF_ID",
  "message": "ref_id sudah dipakai untuk transaksi lain (produk atau tujuan berbeda)."
}

Isi data

ParameterTipeKeterangan
trx_idstringNomor transaksi dari kami. Simpan untuk pelacakan dan bila perlu menghubungi CS.
ref_idstringNomor transaksi dari sistem Anda (yang Anda kirim).
product_codestringKode produk.
product_namestringNama produk.
destinationstringTujuan pembelian.
priceintegerHarga yang dipotong dari saldo (rupiah).
statusstringpending = diproses, success = berhasil, failed = gagal (saldo dikembalikan otomatis).
snstring | nullSerial number / nomor token. Terisi bila transaksi berhasil dan produknya menghasilkan SN.
messagestringKeterangan singkat status.
balanceintegerSisa saldo Anda (rupiah) saat jawaban ini dikirim. Bila transaksi langsung gagal dan saldo dikembalikan, angkanya sudah termasuk pengembalian itu. Hanya ada pada jawaban buat transaksi (tidak ada di cek status dan callback).
← SebelumnyaDaftar Produk Berikutnya →Cek Tagihan