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.
| Field | Type | Presence |
|---|---|---|
partnerReferenceNo | string | Wajib |
customerNumber | string | Wajib |
otp | string | Wajib |
amount | snap.Money | Wajib |
feeType | string | Opsional |
Response — TransferToOTCCreatePaymentResponse
| Field | Type | Presence |
|---|---|---|
responseCode | string | Wajib |
responseMessage | string | Wajib |
referenceNo | string | Opsional |
transactionDate | string | Opsional |
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).
| Field | Type | Presence |
|---|---|---|
originalReferenceNo | string | Opsional |
originalPartnerReferenceNo | string | Wajib |
originalExternalId | string | Opsional |
customerNumber | string | Wajib |
reason | string | Wajib |
Response — TransferToOTCCancelPaymentResponse
OriginalReferenceNo wajib di sini (Kondisional pada request). CancelTime Kondisional — wajib hanya jika pembatalan berhasil — sehingga dimodelkan Opsional.
| Field | Type | Presence |
|---|---|---|
responseCode | string | Wajib |
responseMessage | string | Wajib |
originalReferenceNo | string | Wajib |
cancelTime | string | Opsional |
transactionDate | string | Opsional |
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.
| Field | Type | Presence |
|---|---|---|
originalPartnerReferenceNo | string | Opsional |
originalReferenceNo | string | Opsional |
originalExternalId | string | Opsional |
serviceCode | string | Wajib |
transactionDate | string | Opsional |
customerNumber | string | Wajib |
amount | snap.Money | Wajib |
additionalInfo | json.RawMessage | Opsional |
Response — TransferToOTCTransferStatusResponse
Identik field dengan TransactionStatusInquiryBankResponse, dimodelkan sebagai tipe sendiri karena setiap service code SNAP mendapat tipe berbeda meski bentuknya sama.
| Field | Type | Presence |
|---|---|---|
responseCode | string | Wajib |
responseMessage | string | Wajib |
originalPartnerReferenceNo | string | Opsional |
originalReferenceNo | string | Opsional |
originalExternalId | string | Opsional |
serviceCode | string | Opsional |
transactionDate | string | Opsional |
amount | *snap.Money | Opsional |
beneficiaryAccountNo | string | Wajib |
beneficiaryBankCode | string | Opsional |
previousResponseCode | string | Opsional |
referenceNumber | string | Wajib |
sourceAccountNo | string | Wajib |
transactionId | string | Opsional |
latestTransactionStatus | string | Wajib |
transactionStatusDesc | string | Opsional |
additionalInfo | json.RawMessage | Opsional |