Skip to content

Top Up Pelanggan

Top Up Pelanggan

Top-up akun e-money/e-wallet: cek rekening, top-up, dan cek status.

resp, err := transfercredit.CustomerTopUp(ctx, transport, hb, transfercredit.CustomerTopUpRequest{
	PartnerReferenceNo: "2020102900000000000001",
})
if err != nil {
	// errors.Is(err, snap.ErrBadRequest), snap.ErrUnauthorized, etc.
}

AccountInquiryCustomerTopUp

Memanggil endpoint SNAP Account Inquiry - Customer Top Up (Service Code 37, path …/{version}/emoney/account-inquiry). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — fungsi ini yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

func AccountInquiryCustomerTopUp(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req AccountInquiryCustomerTopUpRequest) (AccountInquiryCustomerTopUpResponse, error)

Request — AccountInquiryCustomerTopUpRequest

Amount satu-satunya field Wajib. CustomerNumber Kondisional — wajib diisi kecuali access token B2B2C sudah mengidentifikasi pelanggannya.

FieldTypePresence
partnerReferenceNostringOpsional
customerNumberstringOpsional
amountsnap.MoneyWajib
transactionDatestringOpsional

Response — AccountInquiryCustomerTopUpResponse

customerNumber dikembalikan dalam bentuk masked (mis. "XXXXXXXXX1857"). customerMonthlyInLimit bertipe json.RawMessage karena standarnya menampilkan nilai ini sebagai angka berkutip — field string biasa tidak bisa mengasumsikan semua issuer mengirimnya dengan format yang sama.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
referenceNostringOpsional
partnerReferenceNostringOpsional
sessionIdstringOpsional
customerNumberstringOpsional
customerNamestringWajib
customerMonthlyInLimitjson.RawMessageOpsional
minAmount*snap.MoneyOpsional
maxAmount*snap.MoneyOpsional
amount*snap.MoneyOpsional
feeAmount*snap.MoneyOpsional
feeTypestringOpsional

CustomerTopUp

Memanggil endpoint SNAP Customer Top Up (Service Code 38, path …/{version}/emoney/topup). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — fungsi ini yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

Tidak idempoten dan tidak di-retry otomatis. Kalau me-retry request yang gagal/timeout, pakai X-EXTERNAL-ID yang sama — server mendeteksi duplikat lewat header ini, jadi ID baru berisiko bikin top-up ganda.

func CustomerTopUp(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req CustomerTopUpRequest) (CustomerTopUpResponse, error)

Request — CustomerTopUpRequest

partnerReferenceNo satu-satunya field Wajib. categoryId bertipe json.RawMessage dengan alasan sama seperti customerMonthlyInLimit di atas: standarnya menampilkan nilai ini sebagai angka berkutip, bukan string yang pasti.

FieldTypePresence
partnerReferenceNostringWajib
customerNumberstringOpsional
customerNamestringOpsional
amount*snap.MoneyOpsional
feeAmount*snap.MoneyOpsional
transactionDatestringOpsional
sessionIdstringOpsional
categoryIdjson.RawMessageOpsional
notesstringOpsional

Response — CustomerTopUpResponse

referenceNumber tidak ada di tabel field standarnya, tapi muncul di contoh resminya, jadi tetap dicantumkan di sini.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
referenceNostringOpsional
partnerReferenceNostringOpsional
sessionIdstringOpsional
customerNumberstringOpsional
amount*snap.MoneyOpsional
referenceNumberstringOpsional

CustomerTopUpInquiryStatus

Memanggil endpoint SNAP Customer Top Up Inquiry Status (Service Code 39, path …/{version}/emoney/topup-status). hb harus sudah diisi semua field yang dibutuhkan snap.HeaderBuilder kecuali Body — fungsi ini yang mengisinya sendiri agar byte yang sama persis dipakai untuk signing maupun request di wire.

func CustomerTopUpInquiryStatus(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req CustomerTopUpInquiryStatusRequest) (CustomerTopUpInquiryStatusResponse, error)

Request — CustomerTopUpInquiryStatusRequest

Bentuknya sama dengan TransactionStatusInquiryBankRequest, hanya beda nama tipe. serviceCode satu-satunya field Wajib.

FieldTypePresence
originalPartnerReferenceNostringOpsional
originalReferenceNostringOpsional
originalExternalIdstringOpsional
serviceCodestringWajib
transactionDatestringOpsional
amount*snap.MoneyOpsional
additionalInfojson.RawMessageOpsional

Response — CustomerTopUpInquiryStatusResponse

Bentuknya sama dengan TransactionStatusInquiryBankResponse, hanya beda nama tipe.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
originalPartnerReferenceNostringOpsional
originalReferenceNostringOpsional
originalExternalIdstringOpsional
serviceCodestringOpsional
transactionDatestringOpsional
amount*snap.MoneyOpsional
beneficiaryAccountNostringWajib
beneficiaryBankCodestringOpsional
previousResponseCodestringOpsional
referenceNumberstringWajib
sourceAccountNostringWajib
transactionIdstringOpsional
latestTransactionStatusstringWajib
transactionStatusDescstringOpsional
additionalInfojson.RawMessageOpsional