QRIS
QRIS is Quick Response Code Indonesian Standard is a National QR code standard to facilitate QR code payments in Indonesia which was launched by Bank Indonesia and the Indonesian Payment System Association (ASPI) on August 17, 2019.
Features
Available country codes | ID |
---|---|
Processing currencies | IDR |
Settlement currencies | USD |
Minimum transaction amount | Following e-wallets regulation |
Maximum transaction amount | Following e-wallets regulation |
Refunds | ❌ |
Partial Refunds | ❌ |
Multiple partial refund | ❌ |
Chargeback | ❌ |
Integration Method
Payment method enumeration values:qris
There are two integration methods for QRIS
- Direct API
- Checkout
Direct API
How to integration
For direct API integration, you can create a PaymentIntent and get url in only one step. The following is the demo of creating payment intent:
A PaymentIntent is an object that represents your intent to collect payment from your customer and tracks the lifecycle of the payment process. Create a PaymentIntent on your server and specify the amount to collect and a supported currency. If you have an existing Payment Intents integration, add qris
to the list of payment method types.
Request
{
"amount":100,
"currency":"IDR",
"confirm":true,
"payment_method_data" : {
"type":"qris"
},
"return_url":"https://your.website"
}
Response
{
"id": "pi_1765928142586773504",
"object": "payment_intent",
"created": 1709865053000,
"livemode": false,
"currency": "IDR",
"amount": 100,
"status": "requires_action",
"client_secret": "pi_1765928142586773504_secret_O9SgiBtsm7kw7KaYmGtXvdBr",
"next_action": {
"type": "qris_handle_redirect",
"qris_handle_redirect": {
"url": "https://XXXXXXXXXX"
}
},
"payment_method_types": [
"qris"
],
"confirmation_method": "automatic",
"return_url": "https://your.website",
"payment_method": "pm_1765928142498693120",
"capture_method": "automatic"
}
Checkout
Payment flow
- Customer selects QRIS from the list of payment methods available and clicks on the Pay botton
- Customers scan the QR code using an application that accepts QRIS.
Create a Session
Request
{
"cancel_url": "www.wooshpay.com",
"mode": "payment",
"success_url": "https://wooshpay.com/",
"payment_method_types": [
"qris"
],
"line_items": [
{
"price_data": {
"currency": "IDR",
"product": null,
"unit_amount": 2000,
"product_data": {
"name": "apple"
},
"billing_scheme": "testscheme",
"lookup_key": "test_lookup_key"
},
"quantity": 1
}
]
}
Response
{
"id": "cs_1765929090289762304",
"object": "checkout.session",
"created": 1709865279000,
"livemode": false,
"currency": "IDR",
"customer": "",
"mode": "payment",
"status": "open",
"url": "https://checkouttest.wooshpay.com/pay/cs_test_1765929090289762304?key=cGtfdGVzdF9OVEUyTnpRek16SXpPREV5TlRJNE1UWTRPVFl4T2pFeVZXZGFSamhoU0dwcU9GWmhSRFp2YUZSeWMxUlpiekUyT0Rnd01qWTVNalU1TlRr",
"cancel_url": "www.wooshpay.com",
"line_items": {
"object": "list",
"data": [
{
"id": "li_1765929090390425600",
"object": "item",
"currency": "IDR",
"description": "apple",
"price": {
"id": "price_1765929090411397120",
"object": "price",
"created": 1709865279000,
"livemode": false,
"active": false,
"currency": "IDR",
"product": {
"id": "prod_1765929090457534464",
"object": "product",
"created": 1709865279000,
"livemode": false,
"active": false,
"name": "apple",
"updated": 1709865279000
},
"type": "one_time",
"unit_amount": 2000,
"billing_scheme": "per_unit",
"lookup_key": "test_lookup_key"
},
"quantity": 1,
"amount_subtotal": 2000,
"amount_total": 2000
}
]
},
"payment_intent": "pi_1765929095620722688",
"payment_method_types": [
"qris"
],
"payment_status": "unpaid",
"success_url": "https://wooshpay.com/",
"amount_subtotal": 2000,
"amount_total": 2000,
"billing_address_collection": "auto",
"expires_at": 1709951679160,
"payment_link": "",
"client_secret": "pi_1765929095620722688_secret_n58CnonKQM6SgpQU3YGrzCzf",
"customer_creation": "if_required"
}
Next step
You can add more features to your integration as needed
Create a Webhook
Listen to events on your WooshPay account so your integration can automatically trigger reactions. Create a webhook that mainly focuses on enabled_events and url.
Create a Refund
Create a refund to repay funds to your customer. You can also perform partial refunds, but not every payment method supports them. A partial refund is when you refund only part of the original transaction amount.