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 CodeMinimum (IDR)/TransaksiMaksimum (IDR)/Transaksi
POS50,000.001,000,000.00
DANABALANCE,OVOBALANCE,LINKAJABALANCE,SHOPEEBALANCE,GOPAYBALANCE10,000.0020,000,000.00
Indomaret10,000.005,000,000.00
CreditCard,CreditCard_2DSecure,CreditCard_6Mos,CreditCard_12Mos10,000.00100,000,000.00
Indodana,Atome,Kredivo10,000.0050,000,000.00
Alfarmart10,000.002,000,000.00
BNIVA,BNCVA,BTNVA,OCBCVA,SinarmasVA,MandiriVA,INAVA,PermataVA,MaybankVA,DanamonVA,BRIVA,BCAVA,MuamalatVA,BSIVA10,000.00100,000,000.00
CIMBVA15,000.00100,000,000.00
QRIS1,000.0010,000,000.00
StaticDanaSub, DynamicDanaSub10,000.0050,000,000.00
StaticCcSub, DynamicCcSub10,000.0050,000,000.00

Cara Membuat Signature

  1. 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.

  1. 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.

  1. 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

  1. 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.pem

Harap 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

Cara Membuat Signature

JenisPenjelasan
Submission MethodGunakan metode POST. Content-Type diisi "application/json;charset=utf-8"
Data FormatBaik Request maupun response dalam format JSON
Character EncodingGunakan pengkodean karakter UTF-8
Amount FormatGunakan Rupiah dengan dua angka belakang koma
Hash MethodSHA256withRSA
Signing RequestVerifikasi signature adalah wajib baik untuk kirim maupun terima request. Cek untuk selengkapnya.
Verification StepsKetika mendapat respon, cek terlebih daulu nilai dari errCode, kemudian baru field-field lainnya, dan yang terakhir cek status transaksi