Skip to content

Direct Debit

Direct Debit

Pembayaran direct-debit standar, notifikasi masuknya, serta status/batal/refund.

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

DirectDebitPayment

DirectDebitPayment memanggil endpoint SNAP Direct Debit Payment (Service Code 54, HTTP POST). Isi hb dengan semua field kecuali BodyDirectDebitPayment melakukan marshal request itu sendiri dan memakai byte yang sama persis untuk signing maupun body di wire.

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

func DirectDebitPayment(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req DirectDebitPaymentRequest) (DirectDebitPaymentResponse, error)

Request — DirectDebitPaymentRequest

DirectDebitPaymentRequest adalah request body untuk Direct Debit Payment. partnerReferenceNo satu-satunya field Wajib.

FieldTypePresence
partnerReferenceNostringWajib
bankCardTokenstringOpsional
chargeTokenstringOpsional
otpstringOpsional
otpTrxCodestringOpsional
merchantIdstringOpsional
terminalIdstringOpsional
journeyIdstringOpsional
subMerchantIdstringOpsional
amount*snap.MoneyOpsional
urlParams[]DirectDebitPaymentURLParamOpsional
externalStoreIdstringOpsional
validUpTostringOpsional
pointOfInitiationstringOpsional
feeTypestringOpsional
disabledPayMethodsstringOpsional
payOptionDetails[]DirectDebitPayOptionDetailOpsional
additionalInfojson.RawMessageOpsional
DirectDebitPaymentURLParam fields

DirectDebitPaymentURLParam adalah satu entri dalam array urlParams[] pada request — sebuah URL redirect dan cara memakainya. isDeeplink adalah flag "Y"/"N".

FieldTypePresence
urlstringWajib
typestringWajib
isDeeplinkstringWajib
DirectDebitPayOptionDetail fields

DirectDebitPayOptionDetail adalah satu entri dalam array payOptionDetails[] pada request, mendeskripsikan satu metode pembayaran yang tersedia.

FieldTypePresence
payMethodstringWajib
payOptionstringWajib
transAmount*snap.MoneyOpsional
feeAmount*snap.MoneyOpsional
cardTokenstringOpsional
merchantTokenstringOpsional
additionalInfojson.RawMessageOpsional

Response — DirectDebitPaymentResponse

DirectDebitPaymentResponse adalah response body untuk Direct Debit Payment. referenceNo bersifat Kondisional — hanya muncul saat berhasil.

appRedirectUrl dan webRedirectUrl datang langsung dari server tanpa validasi apa pun. Sebelum membuka salah satunya di WebView atau browser, periksa sendiri skema URL-nya (https:// atau skema resmi aplikasi Anda) — respons yang dimanipulasi atau dipalsukan bisa saja menyelipkan URL yang dikendalikan penyerang.
FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
referenceNostringOpsional
partnerReferenceNostringOpsional
approvalCodestringOpsional
appRedirectUrlstringOpsional
webRedirectUrlstringOpsional
additionalInfojson.RawMessageOpsional

Direct Debit Payment Notification

Hanya masuk (inbound) — package ini tidak memanggil endpoint untuk hal ini. Partner/switcher yang mengirim POST ke URL callback Anda; unmarshal body ke DirectDebitPaymentNotificationRequest setelah memverifikasinya dengan snap.ServerVerifier (lihat Verifying inbound requests), lalu balas dengan bentuk di bawah.

Diterima — DirectDebitPaymentNotificationRequest

DirectDebitPaymentNotificationRequest adalah request body untuk Direct Debit Payment Notification (Service Code 56) — callback settlement yang diterima PJP, bukan panggilan yang dilakukan package ini. Buat HTTP handler Anda sendiri untuk path ini, autentikasi panggilan masuknya dengan ServerVerifier.VerifyTransactionRequest, lalu json.Unmarshal body ke tipe ini.

originalReferenceNo dan latestTransactionStatus bersifat Wajib; field lainnya Opsional.

FieldTypePresence
originalPartnerReferenceNostringOpsional
originalReferenceNostringWajib
originalExternalIdstringOpsional
merchantIdstringOpsional
subMerchantIdstringOpsional
amount*snap.MoneyOpsional
latestTransactionStatusstringWajib
transactionStatusDescstringOpsional
createdTimestringOpsional
finishedTimestringOpsional
externalStoreIdstringOpsional
additionalInfojson.RawMessageOpsional

Handler Anda membalas dengan — DirectDebitPaymentNotificationResponse

DirectDebitPaymentNotificationResponse punya satu field di luar envelope, approvalCode, dan sifatnya Opsional.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
approvalCodestringOpsional

DirectDebitPaymentStatus

DirectDebitPaymentStatus memanggil endpoint SNAP Direct Debit Payment Status (Service Code 55, HTTP POST) untuk mengecek status pembayaran sebelumnya. Isi hb dengan semua field kecuali BodyDirectDebitPaymentStatus melakukan marshal request itu sendiri. Ini pencarian read-only, aman untuk diulang kapan saja.

func DirectDebitPaymentStatus(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req DirectDebitPaymentStatusRequest) (DirectDebitPaymentStatusResponse, error)

Request — DirectDebitPaymentStatusRequest

DirectDebitPaymentStatusRequest adalah request body untuk Direct Debit Payment Status. serviceCode satu-satunya field Wajib — pasangkan dengan reference apa pun yang Anda punya.

FieldTypePresence
originalPartnerReferenceNostringOpsional
originalReferenceNostringOpsional
originalExternalIdstringOpsional
serviceCodestringWajib
transactionDatestringOpsional
amount*snap.MoneyOpsional
merchantIdstringOpsional
subMerchantIdstringOpsional
externalStoreIdstringOpsional

Response — DirectDebitPaymentStatusResponse

DirectDebitPaymentStatusResponse adalah response body untuk Direct Debit Payment Status. latestTransactionStatus satu-satunya field Wajib di luar envelope.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
originalPartnerReferenceNostringOpsional
originalReferenceNostringOpsional
originalExternalIdstringOpsional
serviceCodestringOpsional
transactionDatestringOpsional
amount*snap.MoneyOpsional
approvalCodestringOpsional
latestTransactionStatusstringWajib
transactionStatusDescstringOpsional
originalResponseCodestringOpsional
originalResponseMessagestringOpsional
sessionIdstringOpsional
requestIdstringOpsional
refundHistory[]DirectDebitRefundHistoryItemOpsional
transAmount*snap.MoneyOpsional
feeAmount*snap.MoneyOpsional
paidTimestringOpsional
DirectDebitRefundHistoryItem fields

DirectDebitRefundHistoryItem adalah satu entri dalam array refundHistory[] pada response — sebuah refund yang pernah terjadi pada pembayaran ini. refundStatus bernilai salah satu dari 00, 03, atau 06.

FieldTypePresence
refundNostringOpsional
partnerRefundNostringWajib
refundAmount*snap.MoneyOpsional
refundStatusstringWajib
refundDatestringOpsional
reasonstringOpsional

DirectDebitPaymentCancel

DirectDebitPaymentCancel memanggil endpoint SNAP Direct Debit Payment Cancel (Service Code 57, HTTP POST). Isi hb dengan semua field kecuali BodyDirectDebitPaymentCancel melakukan marshal request itu sendiri.

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

func DirectDebitPaymentCancel(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req DirectDebitPaymentCancelRequest) (DirectDebitPaymentCancelResponse, error)

Request — DirectDebitPaymentCancelRequest

DirectDebitPaymentCancelRequest adalah request body untuk Direct Debit Payment Cancel. originalPartnerReferenceNo satu-satunya field Wajib.

FieldTypePresence
originalPartnerReferenceNostringWajib
originalReferenceNostringOpsional
approvalCodestringOpsional
originalExternalIdstringOpsional
merchantIdstringOpsional
subMerchantIdstringOpsional
reasonstringOpsional
externalStoreIdstringOpsional
amount*snap.MoneyOpsional
additionalInfojson.RawMessageOpsional

Response — DirectDebitPaymentCancelResponse

DirectDebitPaymentCancelResponse adalah response body untuk Direct Debit Payment Cancel. originalReferenceNo dan cancelTime bersifat Kondisional — hanya muncul saat berhasil.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
originalPartnerReferenceNostringOpsional
originalReferenceNostringOpsional
originalExternalIdstringOpsional
cancelTimestringOpsional
transactionDatestringOpsional
additionalInfojson.RawMessageOpsional

DirectDebitPaymentRefund

DirectDebitPaymentRefund memanggil endpoint SNAP Direct Debit Payment Refund (Service Code 58, HTTP POST). Isi hb dengan semua field kecuali BodyDirectDebitPaymentRefund melakukan marshal request itu sendiri.

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

func DirectDebitPaymentRefund(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req DirectDebitPaymentRefundRequest) (DirectDebitPaymentRefundResponse, error)

Request — DirectDebitPaymentRefundRequest

DirectDebitPaymentRefundRequest adalah request body untuk Direct Debit Payment Refund. originalPartnerReferenceNo dan partnerRefundNo bersifat Wajib.

FieldTypePresence
merchantIdstringOpsional
subMerchantIdstringOpsional
originalPartnerReferenceNostringWajib
originalReferenceNostringOpsional
originalExternalIdstringOpsional
partnerRefundNostringWajib
refundAmount*snap.MoneyOpsional
externalStoreIdstringOpsional
reasonstringOpsional
additionalInfojson.RawMessageOpsional

Response — DirectDebitPaymentRefundResponse

DirectDebitPaymentRefundResponse adalah response body untuk Direct Debit Payment Refund. originalReferenceNo bersifat Kondisional — hanya muncul saat berhasil. refundNo, partnerRefundNo, dan refundTime bersifat Wajib.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
originalPartnerReferenceNostringOpsional
originalReferenceNostringOpsional
originalExternalIdstringOpsional
partnerTrxIdstringOpsional
refundNostringWajib
partnerRefundNostringWajib
refundAmount*snap.MoneyOpsional
refundTimestringWajib
additionalInfojson.RawMessageOpsional