Payment Link
Create Payment Link
API Create Payment Link adalah layanan API yang dapat digunakan oleh Merchant untuk menerima pembayaran melalui channel Payment Link. Merchant nantinya akan menerima link checkout dari Doitpay untuk diakses pelanggan.
- Method:
POST - Type:
application/json - Path:
/payment-link/v1.0/debit/payment-host-to-host - Service Code:
54
Header Payment Link
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| Content-Type | string | ✓ | string yang menunjukkan jenis media. | application/json |
| X-TIMESTAMP | string | ✓ | ISO-8601 | 2022-09-16T13:00:00+07:00 |
| X-SIGNATURE | string | ✓ | Lihat bagian symmetric signature | |
| X-PARTNER-ID | string | ✓ | Merchant Ref dari dashboard Doitpay | 01JP4QP4R908GVK9X5KN7YCJEG |
| X-EXTERNAL-ID | string(64) | ✓ | Request ID yang unik. | |
| CHANNEL-ID | string | ✓ | Nilai seharusnya DOITPAY | |
| Authorization | string | ✓ | Otentikasi dengan bearer token lihat disini pada bagian access token | Bearer ZGMyNDA3NWQtNmM4Ny00NGNiLTQ2NTAtMDhkYWMxNTAzNzY0 |
Request Body Payment Link
| Parameter | Type | Mandatory | Keterangan | Contoh |
|---|---|---|---|---|
| partnerReferenceNo | string | ✓ | Nomor referensi unik dari partner | ORDER123456789 |
| amount | object | ✓ | Detail jumlah transaksi | Lihat amount |
| urlParams | array of object | ✗ | Konfigurasi URL | Lihat urlParams |
| externalStoreId | string | ✗ | ID toko eksternal | STORE123 |
| validUpTo | string | ✓ | Waktu kedaluwarsa transaksi | 2024-12-09T23:59:59+07:00 |
| additionalInfo | object | ✓ | Informasi tambahan transaksi | Lihat additionalInfo |
amount request
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| value | string | ✓ | Jumlah total pembayaran ISO4217 dengan 2 desimal. Lihat bagian kalkulasi amount untuk detail perhitungan amount | 100000.00 |
| currency | string | ✓ | Kode mata uang, hanya menerima IDR. | IDR |
urlParams request
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| url | string | ✓ | URL pengalihan | https://merchant.com/notify |
| type | string | ✓ | Tipe URL; PAY_NOTIFY dan PAY_RETURN | PAY_NOTIFY |
| isDeeplink | string | ✓ | Penanda deeplink, saat ini hanya bisa N | N |
additionalInfo request
| Parameter | Type | Mandatory | Keterangan | Contoh |
|---|---|---|---|---|
| purchaseOrder | string | ✗ | Nomor purchase order | PO-111111111 |
| companyDetails | string | ✗ | Detail perusahaan | Merak Corporation |
| billTo | string | ✗ | Email yang akan mendapatkan informasi tagihan | james.dean@mail.com |
| currency | string | ✗ | Mata uang transaksi | IDR |
| items | array of object | ✓ | Daftar item (min 1, max 10) | Lihat items |
| notes | string | ✗ | Catatan tambahan | Test payment link 11111111 |
| taxPercentage | string | ✗ | Persentase pajak dalam bentuk decimal (contoh: 0.1 = 10%, 1 = 100%) yang diterapkan pada jumlah subtotal item | 0.1 |
| discount | string | ✗ | Nilai diskon, dikurangi setelah subtotal item | 0 |
| additionalFee | string | ✗ | Biaya tambahan | 0 |
| isFeeChargedToUser | boolean | ✗ | Menentukan apakah biaya dibebankan ke user | false |
| customerName | string | ✗ | Nama pelanggan | Audrey Hepburn |
| customerMobileNo | string | ✗ | Nomor HP pelanggan | 081234567890 |
| customerAddress | string | ✗ | Alamat pelanggan | Jl. Test No. 123, Jakarta |
| customerEmail | string | ✗ | Email pelanggan | testpaymentlink@mail.com |
item request
| Parameter | Type | Mandatory | Keterangan | Contoh |
|---|---|---|---|---|
| itemName | string | ✓ | Nama item (1–40 karakter) | Product A |
| itemSku | string | ✗ | Kode SKU item | SKU-001 |
| itemNotes | string | ✗ | Catatan item | Test product |
| quantity | string | ✓ | Jumlah item | 1 |
| price | string | ✓ | Harga per item | 10000 |
kalkulasi amount
subtotal = Σ (item.price × item.quantity)
tax = subtotal × taxPercentage
amount = (subtotal + additionalFee - discount) + tax
| Komponen | Deskripsi |
|---|---|
| subtotal | Total harga seluruh item (price × quantity) |
| tax | Pajak yang dihitung dari subtotal |
| additionalFee | Biaya tambahan yang ditambahkan ke transaksi |
| discount | Potongan harga yang mengurangi total |
| amount | Total akhir yang harus dibayarkan |
Contoh perhitungan
"additionalInfo": {
"additionalFee": "1500",
"taxPercentage": "0.02",
"discount": "1000",
"items": [
{
"itemName": "Product A",
"price": "10000",
"quantity": "1"
},
{
"itemName": "Product B",
"price": "20000",
"quantity": "1"
}
]
}
Langkah 1 – Hitung Subtotal
| Item | Perhitungan | Hasil |
|---|---|---|
| Product A | 1 × 10,000 | 10,000 |
| Product B | 1 × 20,000 | 20,000 |
| Total | 30,000 |
Langkah 2 – Hitung Pajak
tax = subtotal × taxPercentage
tax = 30,000 × 0.02 = 600
Langkah 3 – Hitung Total Amount
amount = (subtotal + additionalFee - discount) + tax
amount = (30,000 + 1,500 - 1,000) + 600
amount = 31,100
Request akhir amount
"amount": {
"currency": "IDR",
"value": "31100.00"
}
Example Payment Link - Full Request
{
"externalStoreId": "",
"partnerReferenceNo": "01KN6MW3JJZJV8J6C41BGJJTW0",
"additionalInfo": {
"additionalFee": "1500",
"taxPercentage": "0.02",
"billTo": "james.dean@mail.com",
"companyDetails": "Merak Corporation",
"currency": "IDR",
"customerAddress": "Jl. Test No. 123, Jakarta",
"customerEmail": "mail@mail.com",
"customerMobileNo": "081234567890",
"customerName": "Audrey Hepburn",
"discount": "1000",
"isFeeChargedToUser": false,
"items": [
{
"itemName": "Product A",
"itemNotes": "Test product",
"itemSku": "SKU-001",
"price": "10000",
"quantity": "1"
},
{
"itemName": "Product B",
"itemNotes": "Test product",
"itemSku": "SKU-001",
"price": "20000",
"quantity": "1"
}
],
"notes": "Test payment link {{$timestamp}}",
"purchaseOrder": "PO-111111111",
},
"amount": {
"currency": "IDR",
"value": "31100.00"
},
"urlParams": [
{
"type": "PAY_RETURN",
"url": "https://webhooks.tunnelite.com/webhooks/orange-whale-616416",
"isDeeplink": "Y"
},
{
"url": "https://webhook.site/a1714951-c2c0-417b-926b-d7204ecaed85",
"type": "NOTIFICATION",
"isDeeplink": "Y"
}
]
}
Example Payment Link - Mandatory Request
{
"additionalInfo": {
"items": [
{
"itemName": "Product",
"itemNotes": "Test product",
"itemSku": "SKU-001",
"price": "10000",
"quantity": "1"
},
{
"itemName": "Product B",
"itemNotes": "Another test product",
"itemSku": "SKU-002",
"price": "10000",
"quantity": "2"
}
]
},
"amount": {
"currency": "IDR",
"value": "30000.00"
},
"partnerReferenceNo": "01KKJYV2R1GYSHQ9C5ZYPY2S2W",
"urlParams": [
{
"isDeeplink": "N",
"type": "PAY_RETURN",
"url": "https://example.com/success"
}
]
}
Response Payment Link
| Parameter | Type | Mandatory | Keterangan | Contoh |
|---|---|---|---|---|
| responseCode | string | ✓ | Kode response dari sistem | 2005400 |
| responseMessage | string | ✓ | Pesan response | Success |
| referenceNo | string | ✓ | Nomor referensi dari sistem/payment gateway | 01KN6MW3JJZJV8J6C41BGJJTW0 |
| partnerReferenceNo | string | ✓ | Nomor referensi dari partner | 01KN6MW3JJZJV8J6C41BGJJTW0 |
| webRedirectUrl | string | ✓ | URL untuk redirect ke halaman pembayaran | https://payment-link.com/abc |
| additionalInfo | object | ✓ | Informasi tambahan | [Lihat additionalInfo](#additionalInfo response) |
amount response
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| value | string | ✓ | ISO4217 dengan 2 desimal | 100000.00 |
| currency | string | ✓ | Kode mata uang, hanya menerima IDR. | IDR |
additionalInfo response
| Parameter | Type | Mandatory | Keterangan | Contoh |
|---|---|---|---|---|
| paymentCode | string | ✓ | Kode pembayaran | 1234567890 |
Check Payment Status Payment Link
API Check Payment Status Payment Link adalah layanan API yang dapat digunakan oleh Merchant untuk mengetahui status pembayaran dari Payment Link menggunakan ID transaksi.
- Method:
POST - Type:
application/json - Path:
/api/v1.0/debit/status - Service Code:
55
Header Check Payment
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| Content-Type | string | ✓ | string yang menunjukkan jenis media. | application/json |
| X-TIMESTAMP | string | ✓ | ISO-8601 | 2022-09-16T13:00:00+07:00 |
| X-SIGNATURE | string | ✓ | Lihat bagian symmetric signature | |
| X-PARTNER-ID | string | ✓ | Merchant Ref dari dashboard Doitpay | 01JP4QP4R908GVK9X5KN7YCJEG |
| X-EXTERNAL-ID | string(64) | ✓ | Request ID yang unik. | |
| CHANNEL-ID | string | ✓ | Nilai seharusnya DOITPAY | |
| Authorization | string | ✓ | Otentikasi dengan bearer token lihat disini pada bagian access token | Bearer ZGMyNDA3NWQtNmM4Ny00NGNiLTQ2NTAtMDhkYWMxNTAzNzY0 |
Request Body Check Payment
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| originalPartnerReferenceNo | string | ✓ | Referensi transaksi asli | 01KN6Q41ZPXNRQ72VFG6R3F9PK |
Example Check Payment
{
"originalPartnerReferenceNo": "01KFJCH1XWF1DKJMB259ZC7JMQ"
}
Response Body Check Payment
| Parameter | Type | Mandatory | Keterangan | Contoh |
|---|---|---|---|---|
| responseCode | string | ✓ | Kode response dari sistem | 2005500 |
| responseMessage | string | ✓ | Pesan response | Success |
| originalReferenceNo | string | ✓ | Nomor referensi original dari sistem | 01KN6MW3JJZJV8J6C41BGJJTW0 |
| originalPartnerReferenceNo | string | ✓ | Nomor referensi original dari partner | 01KN6MW3JJZJV8J6C41BGJJTW0 |
| serviceCode | string | ✓ | Kode service transaksi | 54 |
| latestTransactionStatus | string | Status transaksi terkini | 00 | |
| • 00: Success | ||||
| • 01: Initiated | ||||
| • 02: Paying | ||||
| • 03: Pending | ||||
| • 04: Refunded | ||||
| • 05: Canceled | ||||
| • 06: Failed | ||||
| • 07: Not found | ||||
| paidTime | string | ✓ | Waktu pembayaran | 2024-12-09T23:00:00+07:00 |
| transAmount | object | ✓ | Nilai transaksi yang dibayarkan | Lihat transAmount response |
transAmount response
| Parameter | Tipe | Keterangan | Contoh |
|---|---|---|---|
| value | string | ISO4217 dengan 2 desimal | 1000.00 |
| currency | string | Kode mata uang, hanya menerima IDR. | IDR |
Payment Link Payment Notification (callback)
- Method:
POST - Type:
application/json - Path:
https://yourdomain.com/v1.0/payment-link/debit/notify - Service Code:
56
Symmetric Signature Payment Notification
Saat menerima notifikasi pembayaran, API anda perlu melakukan validasi signature untuk menjamin proses keamanan data. Berikut penjelasannya:
Formula :
stringToSign = HttpMethod + “:” + Endpoint + “:” + MerchantRef + “:” +
LowerCase(HexEncode(SHA-256(Minify(RequestBody)))) + “:” + Timestamp
hash = HMAC_SHA512(stringToSign, secretKey)
Buatlah sebuah variabel stringToSign.
-
HttpMethodadalah string nama metode yang sedang digunakan. Bisa sajaPOST,PUT, atauDELETE. -
Endpointadalah relative URL atau full path URL yang mana tanpa host atau domainnya. -
MerchantRefadalah nilai token yang Anda dapatkan dari Merchant Reference. -
RequestBodyadalah payload yang ingin Anda kirim. -
Timestampmenggunakan ISO-8601. -
secretKeyadalah Merchant Reference.
Hash stringToSign menggunakan HMAC_SHA512 cryptographic dan secret key (nama lain saat ini adalah API key). Kemudian, encode dengan Base 64.
Masukkan nilainya ke X-SIGNATURE.
Header Payment Notification
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| X-TIMESTAMP | string | ✓ | ISO-8601 | 2022-09-16T13:00:00+07:00 |
| X-SIGNATURE | string | ✓ | Lihat Symmetric Signature Payment Notification | |
| X-PARTNER-ID | string | ✓ | Merchant Ref dari dashboard Doitpay | 01JP4QP4R908GVK9X5KN7YCJEG |
| X-EXTERNAL-ID | string(64) | ✓ | Request ID yang unik. | |
| CHANNEL-ID | string | ✓ |
Request Body Payment Notification
| Parameter | Tipe | Mandatori | Keterangan | Contoh |
|---|---|---|---|---|
| originalPartnerReferenceNo | string | ✓ | Referensi transaksi asli | ORDER123456789 |
| originalReferenceNo | string | ✓ | Nomor referensi e-wallet | EW123456789 |
| latestTransactionStatus | string | ✓ | Status akhir transaksi | 00 |
| • 00: Success | ||||
| • 01: Initiated | ||||
| • 02: Paying | ||||
| • 03: Pending | ||||
| • 04: Refunded | ||||
| • 05: Canceled | ||||
| • 06: Failed | ||||
| • 07: Not found | ||||
| amount | object | ✓ | Detail jumlah transaksi | Lihat amount |
| additionalInfo | object | ✓ | Informasi tambahan notifikasi | Lihat additionalInfo |
amount Request Body Payment Notification
| Parameter | Tipe | Keterangan | Contoh |
|---|---|---|---|
| value | string | ISO4217 dengan 2 desimal. Menunjukkan nominal pembayaran. | 1000.00 |
| currency | string | Kode mata uang, hanya menerima IDR. | IDR |
additionalInfo Request Body Payment Notification
| Parameter | Tipe | Keterangan | Contoh |
|---|---|---|---|
| channelCode | string | Kode kanal e-wallet | DANA |
Response Body
| Parameter | Tipe | Keterangan | Contoh |
|---|---|---|---|
| responseCode | string | Kode response, lihat bagian daftar Response Code di bawah | 2005600 |
| responseMessage | string | Penjelasan terhadap response code yang diterima | Successful |
Response Code Payment Notification
| Kode | Keterangan |
|---|---|
| 200XX00 | Berhasil membuat request. Dimana XX adalah service code untuk setiap API Payment Link. |
| 409XX00 | Conflict external ID saat membuat payment link. Dimana XX adalah service code untuk setiap API Payment Link. |
| 400XX01 | Invalid field format. Dimana XX adalah service code untuk setiap API Payment Link. |
| 400XX02 | Missing mandatory field. Dimana XX adalah service code untuk setiap API Payment Link. |
| 401XX00 | Unauthorized Signature. Dimana XX adalah service code untuk setiap API Payment Link. |
| 401XX01 | Invalid Access Token. Dimana XX adalah service code untuk setiap API Payment Link. |
| 500XX00 | Terjadi kesalahan sistem di doitpay, mohon dibantu menghubungi doitpay untuk mendapatkan detail. Dimana XX adalah service code untuk setiap API Payment Link |