Skip to content

Transfer to OTC

Transfer to OTC

Membuat, membatalkan, dan mengecek status transfer cash-pickup over-the-counter.

resp, err := transfercredit.TransferToOTCCreatePayment(ctx, transport, hb, transfercredit.TransferToOTCCreatePaymentRequest{
	PartnerReferenceNo: "2020102900000000000001",
	CustomerNumber: "2020102900000000000001",
	OTP: "...",
	Amount: snap.Money{Value: "500000.00", Currency: "IDR"},
})
if err != nil {
	// errors.Is(err, snap.ErrBadRequest), snap.ErrUnauthorized, etc.
}

TransferToOTCCreatePayment

Memanggil endpoint SNAP Transfer To OTC - Create Payment (Service Code 44, path …/{version}/emoney/otc-cashout, HTTP POST — tanpa override method). hb harus sudah membawa setiap field yang dibutuhkan snap.HeaderBuilder kecuali Body, yang diatur sendiri oleh TransferToOTCCreatePayment agar byte hasil marshal yang sama persis dipakai untuk signing dan wire body.

Tidak idempotent dan package ini tidak melakukan retry. Bila memanggil ulang setelah gagal/timeout, gunakan X-EXTERNAL-ID yang sama — deteksi duplikat di server mengacu pada header ini.

func TransferToOTCCreatePayment(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req TransferToOTCCreatePaymentRequest) (TransferToOTCCreatePaymentResponse, error)

Request — TransferToOTCCreatePaymentRequest

PartnerReferenceNo, CustomerNumber, OTP, dan Amount wajib.

FieldTypePresence
partnerReferenceNostringWajib
customerNumberstringWajib
otpstringWajib
amountsnap.MoneyWajib
feeTypestringOpsional

Response — TransferToOTCCreatePaymentResponse

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
referenceNostringOpsional
transactionDatestringOpsional

TransferToOTCCancelPayment

Memanggil endpoint SNAP Transfer To OTC - Cancel Payment (Service Code 46, HTTP POST). Dokumentasi standar sendiri tidak konsisten soal path pastinya (.../emoney/otc-cancel vs .../otc/cashout/cancel) — package ini tidak berasumsi, selalu memakai EndpointURL yang Anda berikan di hb. Body diatur sendiri agar byte hasil marshal yang sama persis dipakai untuk signing dan wire body.

Tidak idempotent dan package ini tidak melakukan retry. Bila memanggil ulang setelah gagal/timeout, gunakan X-EXTERNAL-ID yang sama — deteksi duplikat di server mengacu pada header ini.

func TransferToOTCCancelPayment(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req TransferToOTCCancelPaymentRequest) (TransferToOTCCancelPaymentResponse, error)

Request — TransferToOTCCancelPaymentRequest

OriginalPartnerReferenceNo, CustomerNumber, dan Reason wajib; OriginalReferenceNo Kondisional di sini (berubah jadi Wajib pada response — lihat doc TransferToOTCCancelPaymentResponse).

FieldTypePresence
originalReferenceNostringOpsional
originalPartnerReferenceNostringWajib
originalExternalIdstringOpsional
customerNumberstringWajib
reasonstringWajib

Response — TransferToOTCCancelPaymentResponse

OriginalReferenceNo wajib di sini (Kondisional pada request). CancelTime Kondisional — wajib hanya jika pembatalan berhasil — sehingga dimodelkan Opsional.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
originalReferenceNostringWajib
cancelTimestringOpsional
transactionDatestringOpsional

TransferToOTCTransferStatus

Memanggil endpoint SNAP Transfer To OTC - Transfer Status (Service Code 45, path …/{version}/emoney/otc-status, HTTP POST — tanpa override method). hb harus sudah membawa setiap field yang dibutuhkan snap.HeaderBuilder kecuali Body, yang diatur sendiri oleh TransferToOTCTransferStatus agar byte hasil marshal yang sama persis dipakai untuk signing dan wire body.

func TransferToOTCTransferStatus(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req TransferToOTCTransferStatusRequest) (TransferToOTCTransferStatusResponse, error)

Request — TransferToOTCTransferStatusRequest

Mengikuti bentuk yang sama dengan TransactionStatusInquiryBankRequest, ditambah CustomerNumber dan Amount yang Wajib (bukan Opsional). ServiceCode dan CustomerNumber wajib.

FieldTypePresence
originalPartnerReferenceNostringOpsional
originalReferenceNostringOpsional
originalExternalIdstringOpsional
serviceCodestringWajib
transactionDatestringOpsional
customerNumberstringWajib
amountsnap.MoneyWajib
additionalInfojson.RawMessageOpsional

Response — TransferToOTCTransferStatusResponse

Identik field dengan TransactionStatusInquiryBankResponse, dimodelkan sebagai tipe sendiri karena setiap service code SNAP mendapat tipe berbeda meski bentuknya sama.

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