API Documentation
Base URL: https://pay.zannstore.com
Signature
Create & status signature:
sha256(merchant + secret_key + trx_id)
Create Transaction
POST
https://pay.zannstore.com/v1
Body (form-data / x-www-form-urlencoded):
merchant=...
trx_id=...
request=new
payment=QRIS|QRIS2|QRIS3|BRIVA|BNIVA|...|ALFAMART|INDOMARET|PAYLINK
amount=10000
note=...
expired_time=30m
type_fee=user|merchant
callback_url=-
signature=sha256(merchant+secret_key+trx_id)
Response QRIS
{
"status": true,
"message": "Berhasil membuat transaksi",
"data": {
"trx_svr": "TRX_SERVER",
"trx_id": "TRX_BUYER",
"method_code": "QRIS|QRIS2|QRIS3",
"method_name": "QRIS by ...",
"status": "Pending",
"amount": 10000,
"unique_code": 123,
"diterima": 10000,
"fee": 100,
"type_fee": "user",
"qr_url": "https://.../qris/xxx.png",
"qr_content": "....",
"checkout_url": "https://pay.zannstore.com/invoice?reffID=TRX_SERVER&payRef=SIGN",
"expired_at": "YYYY-MM-DD HH:mm:ss"
}
}
Response Retail
{
"status": true,
"message": "Berhasil membuat transaksi",
"data": {
"trx_svr": "TRX_SERVER",
"trx_id": "TRX_BUYER",
"method_code": "ALFAMART|INDOMARET",
"method_name": "RETAIL ...",
"status": "Pending",
"amount": 10000,
"diterima": 10000,
"fee": 2500,
"type_fee": "user",
"payment_code": "111544000000003",
"checkout_url": "https://pay.zannstore.com/invoice?reffID=TRX_SERVER&payRef=SIGN",
"expired_at": "YYYY-MM-DD HH:mm:ss"
}
}
Response VA
{
"status": true,
"message": "Berhasil membuat transaksi",
"data": {
"trx_svr": "TRX_SERVER",
"trx_id": "TRX_BUYER",
"method_code": "BNIVA|BRIVA|...",
"method_name": "BANK ... VA",
"status": "Pending",
"amount": 10000,
"diterima": 6500,
"fee": 3500,
"type_fee": "merchant",
"virtual_account": "1234567890",
"checkout_url": "https://pay.zannstore.com/invoice?reffID=TRX_SERVER&payRef=SIGN",
"expired_at": "YYYY-MM-DD HH:mm:ss"
}
}
Check Status
POST
https://pay.zannstore.com/v1
Body:
merchant=...
trx_id=...
request=status
signature=sha256(merchant+secret_key+trx_id)
Response example:
{
"status": true,
"msg": "Yeay, detail transaksi berhasil diambil",
"data": {
"trx_svr": "TRX_SERVER",
"trx_id": "TRX_BUYER",
"metode_name": "QRIS2",
"status": "Pending",
"amount": 10000,
"fee": 100,
"unique_code": 4,
"diterima": 10004,
"note": "Catatan",
"type_fee": "user",
"issuer_bank": "-",
"rrn": "-",
"paid_at": "-",
"created_at": "YYYY-MM-DD HH:mm:ss",
"expired_at": "YYYY-MM-DD HH:mm:ss"
}
}
Profile
POST
https://pay.zannstore.com/v1
Body:
merchant=...
pin=...
secret_key=...
request=profile
signature=sha256(merchant+secret_key+pin)
Response example:
{
"status": true,
"msg": "Yeay, data profile berhasil diambil",
"data": {
"nama_pemilik": "Anantha",
"merchant": "MERCHANT123",
"saldo_kliring": "Rp 50.000",
"saldo_tersedia": "Rp 100.000",
"whatsapp": "6285xxxxxxx",
"email": "[email protected]",
"created_at": "YYYY-MM-DD HH:mm:ss"
}
}
Withdraw Auto
POST
https://pay.zannstore.com/v1
Body:
merchant=...
pin=...
signature=sha256(merchant+pin)
request=withdraw_auto
amount=10000
type_bank=bank|emoney
tujuan=1234567890
bank_code=BRI|BNI|DANABYZN|...
Response example:
{
"status": true,
"msg": "Withdraw berhasil diproses.",
"trx_id": "ZNWD...",
"nominal": 10000,
"biaya": 3000,
"total": 13000,
"saldo_awal": 50000,
"saldo_akhir": 37000,
"tujuan": "1234567890",
"jenis": "BANK",
"bank_code": "BRI",
"account_name": "NAMA",
"bank_name": "BANK BRI"
}
Merchant Callback (sendMerchantCallback)
Sistem akan POST ke callback_url milik merchant setelah transaksi sukses.
Payload (JSON):
{
"data": {
"trx_svr": "TRX_SERVER",
"trx_id": "TRX_BUYER",
"status": "Success",
"amount": "10000",
"fee": "2500",
"type_fee": "user",
"issuer_bank": "BRI|BNI|ALFAMART|INDOMARET|QRIS",
"rrn": "REF/VA/RETAIL",
"diterima": "10000",
"paid_at": "YYYY-MM-DD HH:mm:ss",
"va_code": "BRIVA (opsional)",
"va_number": "1234567890 (opsional)",
"customer_name": "Nama (opsional)"
}
}
Response yang diharapkan
HTTP 200 OK