Aturan
Satuan Mata Uang
Satuan mata uang dalam Rupiah Indonesia, dengan 2 desimal. Contoh seperti 10.25. Nilai amount tidak boleh lebih kecil dari fee.
Batas Per Transaksi
| Payment Code | Minimum (IDR)/Transaksi | Maksimum (IDR)/Transaksi |
|---|---|---|
| POS | 50,000.00 | 1,000,000.00 |
| DANABALANCE,OVOBALANCE,LINKAJABALANCE,SHOPEEBALANCE,GOPAYBALANCE | 10,000.00 | 20,000,000.00 |
| Indomaret | 10,000.00 | 5,000,000.00 |
| CreditCard,CreditCard_2DSecure,CreditCard_6Mos,CreditCard_12Mos | 10,000.00 | 100,000,000.00 |
| Indodana,Atome,Kredivo | 10,000.00 | 50,000,000.00 |
| Alfarmart | 10,000.00 | 2,000,000.00 |
| BNIVA,BNCVA,BTNVA,OCBCVA,SinarmasVA,MandiriVA,INAVA,PermataVA,MaybankVA,DanamonVA,BRIVA,BCAVA,MuamalatVA,BSIVA | 10,000.00 | 100,000,000.00 |
| CIMBVA | 15,000.00 | 100,000,000.00 |
| QRIS | 1,000.00 | 10,000,000.00 |
| StaticDanaSub, DynamicDanaSub | 10,000.00 | 50,000,000.00 |
| StaticCcSub, DynamicCcSub | 10,000.00 | 50,000,000.00 |
Cara Membuat Signature
- Masing-masing dari Paylabs dan Merchant membuat sepasang kunci RSA 2048 (format PKCS8). Kemudian masing-masing saling menukar public key (bukan private key).
a. Merchant perlu mengirim public key ini ke email operation Paylabs (cs@paylabs.co.id)
b. Pada saat akun merchant teraktivasi, maka akan ada email yang terkirim ke merchant berisi public key dari Paylabs.
- Kemudian lakukan minify terhadap request body dengan ketentuan sebagai berikut:
Hapus semua simbol dan karakter yang berhubungan dengan spasi/jarak seperti \n,\r,\t , dari konten di dalam format JSON.
Jika nilai dari field adalah null maka tidak akan diikutsertakan dalam pembuatan signature.
- Persiapkan string-stringnya:
stringContent: HTTPMethod:EndpointUrl:Lowercase(SHA256Hex(minify(body))):TimeStamp
HTTPMethod: POST
EndpointUrl: /payment/v2.3/va/create
TimeStamp: Request header's X-TIMESTAMP
- Metode untuk signing:
X-SIGNATURE: Base64(SHA256withRSA(stringContent, privateKey))
Klik melompat ke:"Cara Membuat Signature"
Contoh Proses Data Signing
Contoh Pembuatan pasangan kunci RSA
## <strong>Untuk generate RSA 2048 bit silakan cek https://www.openssl.org/docs/man3.1/man1/genrsa.html</strong>
openssl genrsa -out rsakey.pem 2048 ## generate 2048 bit RSA private key
## <strong>konversi ke format PKCS8 (Format support Java) https://www.openssl.org/docs/man3.1/man1/openssl-pkcs8.html</strong>
## <strong>Generate private key (dipakai oleh Merchant sendiri, jangan kirim ke siapapun)</strong>
openssl pkcs8 -topk8 -nocrypt -inform PEM -in rsakey.pem -outform PEM -out private-key.pem
## <strong>generate public key untuk dikasih ke Paylabs</strong>
openssl rsa -inform PEM -in rsakey.pem -pubout -outform PEM -out public-key.pemHarap perhatikan. Jika Public Key di paling atas dan paling bawah ada teks sebagai berikut:
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----Misalnya kita ada request sebagai berikut:
## <strong>POST Request</strong>
POST ${ROOT_URL}/payment/v2.3/va/create
# HTTP Header
Content-Type: application/json;charset=utf-8
# HTTP Body
{
"merchantId":"0010001",
"merchantTradeNo":"100100011650868989065",
"requestId":"200100011650868989065",
"paymentType":"CreditCard",
"amount":"10000.00",
"productName":"Test",
"paymentParams":{
"redirectUrl": "http://google.com"
}
}Langkah 1: Lakukan minify pada body request, dan simpan ke variable stringContent
> minifyString = {"merchantId":"0010001","merchantTradeNo":"100100011650868989065","requestId":"200100011650868989065","paymentType":"CreditCard","amount":"10000.00","productName":"Test","paymentParams":{"redirectUrl":"https://google.com"}}Langkah 2: Gabungkan string-string ini menjadi stringContent:
stringContent = POST:/payment/v2.3/va/create:Lowercase(SHA256Hex(minifyString)):2022-09-16T16:58:47.964+07:00
Langkah 3: Gabungkan stringContent dengan signKey. Kemudian lakukan hash pada string untuk mendapatkan X-SIGNATURE
X-SIGNATURE = Base64(SHA256withRSA(stringContent, privateKey))
Jika sudah mendapatkan string signature, maka letakkan ke Header HTTP:
## <strong>POST Request</strong>
POST ${ROOT_URL}/payment/v2.3/va/create
# HTTP Header
Content-Type: application/json;charset=utf-8
X-TIMESTAMP: 2022-09-16T16:58:47.964+07:00
X-SIGNATURE: xxxxxxxxx
X-PARTNER-ID: 010001
X-REQUEST-ID: xxxxxxxxxxxxxxxxxxxxxxxx
# HTTP Body
{
"merchantId":"0010001",
"merchantTradeNo":"100100011650868989065",
"requestId":"200100011650868989065",
"paymentType":"CreditCard",
"amount":"10000.00",
"productName":"Test",
"paymentParams":{
"redirectUrl": "http://google.com"
}
}API Protocols & Standards
| Jenis | Penjelasan |
|---|---|
| Submission Method | Gunakan metode POST. Content-Type diisi "application/json;charset=utf-8" |
| Data Format | Baik Request maupun response dalam format JSON |
| Character Encoding | Gunakan pengkodean karakter UTF-8 |
| Amount Format | Gunakan Rupiah dengan dua angka belakang koma |
| Hash Method | SHA256withRSA |
| Signing Request | Verifikasi signature adalah wajib baik untuk kirim maupun terima request. Cek untuk selengkapnya. |
| Verification Steps | Ketika mendapat respon, cek terlebih daulu nilai dari errCode, kemudian baru field-field lainnya, dan yang terakhir cek status transaksi |