Skip to content

CPM

CPM

QR Customer-Presented-Mode (pelanggan menampilkan QR, merchant yang scan): generate, bayar, query, batal, refund; hasil pembayaran juga datang sebagai notifikasi masuk.

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

CPMGenerateQR

CPMGenerateQR memanggil endpoint SNAP Generate QR CPM (Service Code 59, HTTP POST). Isi hb dengan semua field kecuali BodyCPMGenerateQR 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 CPMGenerateQR(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req CPMGenerateQRRequest) (CPMGenerateQRResponse, error)

Request — CPMGenerateQRRequest

CPMGenerateQRRequest adalah request body untuk Generate QR CPM. partnerTrxDate satu-satunya field Wajib.

FieldTypePresence
partnerReferenceNostringOpsional
userAccessTokenstringOpsional
merchantIdstringOpsional
subMerchantIdstringOpsional
partnerTrxDatestringWajib
additionalInfojson.RawMessageOpsional

Response — CPMGenerateQRResponse

CPMGenerateQRResponse adalah response body untuk Generate QR CPM. expiryTime adalah satu-satunya field Wajib lainnya; qrContent/qrUrl sama-sama Opsional biasa (tidak ada aturan salah-satu-di-antaranya).

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
referenceNostringOpsional
partnerReferenceNostringOpsional
qrContentstringOpsional
qrUrlstringOpsional
expiryTimestringWajib
additionalInfojson.RawMessageOpsional

CPMPayment

CPMPayment memanggil endpoint SNAP CPM Payment (Service Code 60, HTTP POST). Isi hb dengan semua field kecuali BodyCPMPayment 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 CPMPayment(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req CPMPaymentRequest) (CPMPaymentResponse, error)

Request — CPMPaymentRequest

CPMPaymentRequest adalah request body untuk CPM Payment. partnerReferenceNo, qrContent, dan merchantId bersifat Wajib.

items tidak punya skema tetap di standar, jadi tipenya json.RawMessage — sama seperti additionalInfo dan field lain yang memang tidak ditentukan bentuknya.

FieldTypePresence
partnerReferenceNostringWajib
qrContentstringWajib
amount*snap.MoneyOpsional
feeAmount*snap.MoneyOpsional
merchantIdstringWajib
subMerchantIdstringOpsional
titlestringOpsional
expiryTimestringOpsional
itemsjson.RawMessageOpsional
externalStoreIdstringOpsional
merchantNamestringOpsional
merchantLocationstringOpsional
acquirerNamestringOpsional
terminalIdstringOpsional
scannerInfo*CPMPaymentScannerInfoOpsional
additionalInfojson.RawMessageOpsional
CPMPaymentScannerInfo fields

CPMPaymentScannerInfo adalah objek opsional scannerInfo yang mendeskripsikan perangkat yang men-scan QR. Keempat field-nya Opsional.

FieldTypePresence
deviceIdstringOpsional
deviceVersionstringOpsional
deviceModelstringOpsional
deviceIpstringOpsional

Response — CPMPaymentResponse

CPMPaymentResponse adalah response body untuk CPM Payment. referenceNo bersifat Kondisional — hanya muncul saat berhasil. Tidak ada field lain yang Wajib.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
referenceNostringOpsional
partnerReferenceNostringOpsional
transactionDatestringOpsional
additionalInfojson.RawMessageOpsional

CPM 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 CPMPaymentNotificationRequest setelah memverifikasinya dengan snap.ServerVerifier (lihat Verifying inbound requests), lalu balas dengan bentuk di bawah.

Diterima — CPMPaymentNotificationRequest

CPMPaymentNotificationRequest adalah request body untuk Payment Notification (Service Code 79) — 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.

merchantId dan latestTransactionStatus bersifat Wajib; field lainnya Opsional.

FieldTypePresence
originalPartnerReferenceNostringOpsional
originalReferenceNostringOpsional
merchantIdstringWajib
subMerchantIdstringOpsional
externalStoreIdstringOpsional
amount*snap.MoneyOpsional
latestTransactionStatusstringWajib
transactionStatusDescstringOpsional
customerNumberstringOpsional
accountTypestringOpsional
destinationNumberstringOpsional
destinationAccountNamestringOpsional
sessionIdstringOpsional
bankCodestringOpsional
additionalInfojson.RawMessageOpsional

Handler Anda membalas dengan — CPMPaymentNotificationResponse

CPMPaymentNotificationResponse hanya berisi envelope — cuma responseCode dan responseMessage, tidak ada field lain.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib

CPMQueryPayment

CPMQueryPayment memanggil endpoint SNAP Query Payment (Service Code 61, HTTP POST) untuk mengecek status pembayaran CPM sebelumnya. Isi hb dengan semua field kecuali BodyCPMQueryPayment melakukan marshal request itu sendiri. Ini pencarian read-only, aman untuk diulang kapan saja.

func CPMQueryPayment(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req CPMQueryPaymentRequest) (CPMQueryPaymentResponse, error)

Request — CPMQueryPaymentRequest

CPMQueryPaymentRequest adalah request body untuk Query Payment. Tidak ada field Wajib — cari berdasarkan reference, merchant, atau store ID mana pun yang Anda punya.

FieldTypePresence
originalReferenceNostringOpsional
originalPartnerReferenceNostringOpsional
originalExternalIdstringOpsional
merchantIdstringOpsional
subMerchantIdstringOpsional
externalStoreIdstringOpsional
additionalInfojson.RawMessageOpsional

Response — CPMQueryPaymentResponse

CPMQueryPaymentResponse adalah response body untuk Query Payment. latestTransactionStatus dan paidTime bersifat Wajib; originalReferenceNo Kondisional — hanya muncul saat berhasil.

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
originalReferenceNostringOpsional
originalPartnerReferenceNostringOpsional
originalExternalIdstringOpsional
titlestringOpsional
latestTransactionStatusstringWajib
transactionStatusDescstringOpsional
paidTimestringWajib
additionalInfojson.RawMessageOpsional

CPMCancelPayment

CPMCancelPayment memanggil endpoint SNAP Cancel Payment (Service Code 62, HTTP POST). Isi hb dengan semua field kecuali BodyCPMCancelPayment 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 CPMCancelPayment(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req CPMCancelPaymentRequest) (CPMCancelPaymentResponse, error)

Request — CPMCancelPaymentRequest

CPMCancelPaymentRequest adalah request body untuk Cancel Payment. originalPartnerReferenceNo satu-satunya field Wajib.

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

Response — CPMCancelPaymentResponse

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

FieldTypePresence
responseCodestringWajib
responseMessagestringWajib
originalPartnerReferenceNostringOpsional
originalReferenceNostringOpsional
originalExternalIdstringOpsional
cancelTimestringOpsional
transactionDatestringOpsional
additionalInfojson.RawMessageOpsional

CPMRefundPayment

CPMRefundPayment memanggil endpoint SNAP Refund Payment (Service Code 80, HTTP POST). Isi hb dengan semua field kecuali BodyCPMRefundPayment 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 CPMRefundPayment(ctx context.Context, t *snap.Transport, hb snap.HeaderBuilder, req CPMRefundPaymentRequest) (CPMRefundPaymentResponse, error)

Request — CPMRefundPaymentRequest

CPMRefundPaymentRequest adalah request body untuk Refund Payment. originalPartnerReferenceNo dan partnerRefundNo bersifat Wajib.

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

Response — CPMRefundPaymentResponse

CPMRefundPaymentResponse adalah response body untuk Refund Payment. refundNo dan refundTime bersifat Wajib; partnerRefundNo di sini Opsional (berbeda dari response Direct Debit Payment Refund, di mana field itu Wajib).

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