Buat Transaksi
Membeli satu produk (pulsa, paket data, token listrik, top up, dan lainnya).
POST
https://api.zevaldigital.com/v1/transaction/createMembeli 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
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
secret_id | string | Ya | Secret ID Anda. |
signature | string | Ya | Hasil md5(secret_id:secret_key:ref_id) (menyertakan ref_id). Lihat halaman Autentikasi. |
product_code | string | Ya | Kode produk dari Daftar Produk, mis. OKD1. |
destination | string | Ya | Tujuan 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_id | string | Ya | Nomor 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
Bila bentuknya tidak sesuai, jawabannya
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
| Parameter | Tipe | Keterangan |
|---|---|---|
trx_id | string | Nomor transaksi dari kami. Simpan untuk pelacakan dan bila perlu menghubungi CS. |
ref_id | string | Nomor transaksi dari sistem Anda (yang Anda kirim). |
product_code | string | Kode produk. |
product_name | string | Nama produk. |
destination | string | Tujuan pembelian. |
price | integer | Harga yang dipotong dari saldo (rupiah). |
status | string | pending = diproses, success = berhasil, failed = gagal (saldo dikembalikan otomatis). |
sn | string | null | Serial number / nomor token. Terisi bila transaksi berhasil dan produknya menghasilkan SN. |
message | string | Keterangan singkat status. |
balance | integer | Sisa 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). |