QRIS Merchant Presented Mode (MPM) Dinamis v1.1

Permudah Bisnis Anda dengan BRIAPI

Tonton videonya dan lihat bagaimana BRIAPI dapat membuat bisnis Anda menjadi lebih efisien dengan Transfer Interbank BRI.

Buat API Sekarang

 

Apa itu QRIS Merchant Presented Mode (MPM) Dinamis  ?

Quick Response Code Indonesian Standard atau disingkat QRIS (dibaca KRIS) adalah penyatuan berbagai macam QR dari berbagai Penyelenggara Jasa Sistem Pembayaran (PJSP) menggunakan QR Code. QRIS dikembangkan oleh industri sistem pembayaran bersama dengan Bank Indonesia agar proses transaksi dengan QR Code dapat lebih mudah, cepat, dan terjag​a keamanannya.

Dengan QRIS, seluruh aplikasi pembayaran dari Penyelenggara manapun baik bank dan nonbank yang digunakan masyarakat, dapat digunakan di seluruh toko, pedagang, warung, parkir, tiket wisata, donasi (merchant) berlogo QRIS, meskipun penyedia QRIS di merchant berbeda dengan penyedia aplikasi yang digunakan masyarakat.

QRIS Merchant Presented Mode (MPM) Dinamis sendiri adalah kode QR dengan metode yakni kode QR dikeluarkan melalui suatu device seperti mesin EDC atau smartphone. Merchant harus me-masukkan nominal pembayaran terlebih dahulu, kemudian pelanggan melakukan scan QRIS yang tampil atau tercetak.

BRI juga menyediakan API fitur notifikasi untuk pembayaran menggunakan QRIS MPM dinamis.

Contoh Penggunaan API QRIS Merchant Presented Mode (MPM) Dinamis

QRIS Merchant Presented Mode (MPM) Dinamis sangat cocok untuk merchant skala usaha menengah dan besar atau dengan volume transaksi tinggi. Dengan QRIS MPM Dinamis merchant perlu me-masukkan nominal pembayaran lalu mencetak kode QRIS dengan detail sesuai yang merchant masukkan sebelumnya selanjutnya pelanggan dapat melakukan scan QRIS untuk melakukan pembayaran.

Informasi API

Title QRIS Dinamis - MPM
Version v1.1
URL Sandbox https://sandbox.partner.api.bri.co.id/
URL Production https://partner.api.bri.co.id/

Kendali Versi

API Version Date Link to document Deskripsi
v1.0 11 Mei 2022 Disini Baseline version.
v1.1 31 Juli 2023 Halaman ini Penambahan Field issuerRrn pada Endpoint Inquiry QR

 

Deskripsi Produk

Gambaran Produk

Dokumen ini bertujuan untuk menjelaskan spesifikasi API dari pengembangan QRIS Dinamis - MPM dengan skema merchant mengeluarkan QRIS, nasabah menggunakan alat untuk memindai scan QRIS merchant. Kemudian dari BRI mengiriman notifikasi callback sesuai dengan spesifikasi yang telah ditentukan.

 

>Product Overview QRIS Merchant Presented Mode (MPM) Dinamis v1.1

Endpoint

A. Get Token

Endpoint Description

Endpoint ini digunakan untuk mendapatkan access token yang berfungsi sebagai otentikasi saat ingin mengakses API yang lain. Pilot test pengecekan bahwa get token tidak dihit setiap kali mengakses endpoint (integrator)

General Information

HTTP Method POST
Path /snap/v1.0/access-token/b2b
Type Format JSON
Authentication Digital Signature

Header Structure

Key Value Format Mandatory Length Deskripsi Contoh
X-SIGNATURE M Dengan algoritma asymmetric signature SHA256withRSA (Private_Key, stringToSign). stringToSign = client_ID + “|” + XTIMESTAMP Y      
X-CLIENT-KEY Alphanumeric M Client’s client_id (Nama PJP) (diberikan pada saat proses registrasi selesai)      
X-TIMESTAMP Datetime M Waktu lokal klien saat ini yyyy-MM-ddTHH:mm:ss.SSSTZD format      
Content-Type application/json M        

Request Structure

Field Data Type Format Mandatory Length Description Example
grantType String Alphabet Y   “client_credentials”: klien dapat meminta token akses hanya menggunakan kredensial kliennya (atau cara otentikasi lain yang didukung) ketika klien meminta akses ke sumber daya yang dilindungi di bawah kendalinya (OAuth 2.0: RFC 6749 & 6750) client_credentials

Response Structure

Field Data Type Format Mandatory Length Deskripsi Contoh
responseCode String Numeric C   Kode respon (example code)
responseMessage String Alphabet C   Respon deskripsi (example message)
accessToken String Alphanumeric M   Jenis token akses menyediakan klien dengan informasi yang diperlukan untuk berhasil menggunakan token akses untuk melindungi resource request (bersama dengan atribut tipe-spesifik) Tipe jenis token:
- “Bearer”: termasuk token akses string saat request
- “Mac”: mengeluarkan pesan kunci kode otentikasi (MAC) bersama dengan token akses yang digunakan untuk menandatangani komponen tertentu dari permintaan HTTP
Referensi: OAuth2.0 RFC 6749 & 6750
(example access token)
tokenType String Alphabet M     (example token type)
expiresIn String Alphanumeric M   Sesi berakhir dalam hitungan detik : 900 (15 menit) (example expiration)

 

 {
  "grantType": "client_credentials"
 }

Normal Response:

 

 {
   "accessToken": "jwy7GgloLqfqbZ9OnxGxmYOuGu85",
   "tokenType": "BearerToken",
   "expiresIn": "899"
}

Error Response:

 {
  "responseCode": "4007301",
  "responseMessage": "Invalid Field Format"
}

List of Error/Response Code

HTTP Status Code Response Status Response Description Deskripsi
200 Success - -
400 4007300 Failed Bad Request -
400 4007301 Failed Invalid Field Format -
401 4017300 Failed Unauthorized Client -
401 4017300 Failed Unauthorized stringToSign -
401 4017300 Failed Unauthorized Signature -
401 4017301 Failed Invalid Token (B2B) -
500 500000 Failed General Error -

Signature

Signature memastikan data yang dikirimkan adalah asli dan tidak bisa disanggah. Signature dihasilkan oleh pemakai layanan dan diverifikasi oleh penerima layanan. Signature dibentuk dari payload yang sudah ditentukan, dengan mengimplementasikan algoritma HMAC_SHA512 dengan clientSecret sebagai kuncinya.

Payload

Payload tergabung dari verb, path, token, timestamp, and body. Dengan format Symetric-Signature: HMAC_SHA512 (clientSecret, stringToSign) dengan formula stringToSign = HTTPMethod+”:“+ EndpointUrl +":"+ AccessToken+":“ + Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":“ +TimeStamp

Contoh:

POST:/snap/v1.1/dummy:muhpwhwOkPRU9nNXYnyYHj8t54x3:8b4e9e83b5231cff4f84358ec8ca81951cfe9f999f635b1566452a501d5c23b2:2021-11- 29T09:22:18.172+07:00

Detail setiap elemen di dalam payload dijelaskan di bawah ini:

Path

Value pada path yaitu URL setelah hostname dan port tanpa Query Parameter

Contoh:

https://sandbox.partner.api.bri.co.id/simulator/qr/qr-cpm-payment-url becomes /simulator/qr/qr-cpm-payment-ur

Verb

Method HTTP dengan huruf kapital.

Contoh: GET, POST, PUT, PATCH, and DELETE.

Token

Token yang dipakai di header Authorization

Contoh:  Bearer R04XSUbnm1GXNmDiXx9ysWMpFWBr

Timestamp

TWaktu saat mengirimkan request API. Format waktu harus mengikuti ISO8601 format (yyyy-MM-ddTHH:mm:ss.SSSZ). Harus dalam zero UTC offset Example:

Contoh:

2021-11-02T13:14:15.678+07:00

Body

Body saat mengirimkan request API. Lowercase(HexEncode(SHA-256(minify(RequestBody))))

Contoh: {"hello":"world"}

Result SHA256 : a47a5f14b3e78b5e3d3f81b1a1468499be964660f818c10adcac792c42709749

Jika tidak terdapat body request, contoh menggunakan metode GET, biarkan saja kosong

 contoh: &body=

Rerefrensi : https://developers.bri.co.id/en/snap-bi/apidocs-oauth-snap-bi

B. Generate QR

Endpoint Description

API Generate QR digunakan untuk melakukan generate QR MPM Dinamis

General Information

HTTP Method

POST

Path

/v1.1/qr-dynamic-mpm/qr-mpm-generate-qr

Type Format

JSON

Authentication

OAuth 2.0

Header Structure

Key Value Format Mandatory Length Deskripsi
Authorization Authorization Alphanumeric M - Bearer {Token}
X-TIMESTAMP BRI - timestamp Datetime M - Format Timestamp ISO8601
X-SIGNATURE BRI - Signature Alphanumeric M - HMAC_SHA512
Content-Type application/json Alpha M - application/json
X-PARTNER-ID   Alphanumeric M 36  
CHANNEL-ID   Alpha M 5  
X-EXTERNAL-ID   Numeric M 36  

Request Structure

Field Data Type Mandatory Length Description Example
partnerReferenceNo String M 6 Identifikasi transaksi pada sistem layanan konsumen 1234567890133
amount Object M - Rincian untuk jumlah objek tercantum dalam tabel  
merchantId String M 64 ID unik yang dimiliki oleh setiap merchant 00007100010926
terminalId String M 16 Terminal ID 213141251124

Request Structure dalam Object "amount"

Field Data Type Mandatory Length Description Example
value Decimal M 18 Jumlah bersih dari transaksi. Jika itu IDR maka nilainya termasuk 2 angka desimal. misalnya Rp 10.000,- akan ditempatkan dengan 10000.00 123456.00
currency String M 3 3 digit kode ISO Currency IDR

Response Structure

Field Data Type Mandatory Length Description Example
responseCode String M 7 Kode response HTTP status code + service code + case code 2004700
responseMessage String M 150 Deskripsi response Successfull
partnerReferenceNo String M 6 Nomor identifikasi transaksi pada sistem layanan konsumen 1234567890133
qrContent String M 512 QR String MPM 0002xxxxxxxxxx  
referenceNo String M 12 Nomor identifikasi transaksi pada sistem penyedia layanan. 409676201434

Request & Response Payload Sample

Request:

{
  "partnerReferenceNo": "1234567890133",
   "amount": {
     "value": "123456.00",
     "currency": "IDR"
   },
   "merchantId": "00007100010926",
   "terminalId": "213141251124"
}

Normal Response:

{
  "responseCode": "2004700",
  "responseMessage": "Successful",
  "partnerReferenceNo": "1234567890133",
  "qrContent": "0002XXXXXXXXX",
  "referenceNo": "409676201434"
}

C. Inquiry Payment

Endpoint Description

Endpoint untuk melakukan inquiry payment QR MPM Dinamis

General Information

HTTP Method

POST

Path

/v1.1/qr-dynamic-mpm/qr-mpm-query

Type Format

JSON

Authentication

OAuth 2.0

Header Structure

Key Value Format Mandatory Length Deskripsi
Authorization Authorization Bearer {Token} Alphanumeric M    
X-TIMESTAMP BRI - timestamp Datetime M   Format Timestamp ISO8601
X-SIGNATURE BRI - Signature Alphanumeric M   HMAC_SHA512
Content-Type application/json Alpha M   application/json
X-PARTNER-ID   Alphanumeric M 36  
CHANNEL-ID   Alpha M 5  
X-EXTERNAL-ID   Numeric M 36  

Request Structure

Field Data Type Mandatory Length Description Example
originalReferenceNo String M 64 Nomor identifikasi transaksi pada sistem penyedia layanan 000008526955
serviceCode String M 2 Indikator jenis transaksi (kode service dari transaksi request asli) 17
additionalInfo Object M   Detail isian dari object additionalInfo terdapat pada tabel dibawah ini  

Request Structure dalam Object "additionalInfo"

Field Data Type Mandatory Length Description Example
terminalId String M 16 ID Terminal 100492

Response Structure

Field Data Type Mandatory Length Description Example
responseCode String M 7 Kode Response HTTP status code + service code + case code 2005100
responseMessage String M 150 Deskripsi Response Successful
originalReferenceNo String C 64 Nomor Identifikasi transaksi pada sistem penyedia layanan 290005165369
serviceCode String M 2 Kode Service 17
latestTransactionStatus String M 2 Status Transaksi 00 - Success
transactionStatusDesc String O 50 Deskripsi dari status transaksi Successfully
amount Object M   Detail isian dari object amount terdapat pada tabel dibawah ini  
terminalId String O 16 Indentifikasi terminal 10049258
additionalInfo Object O   Detail isian dari object additionalInfo terdapat pada tabel dibawah ini  

Response Structure dalam Object "amount"

Field Data Type Mandatory Length Description Example
value Decimal M 18 Jumlah bersih dari transaksi. Jika itu IDR maka nilainya termasuk 2 angka desimal. 2000.00
currency String M 3 3 digit kode ISO Currency IDR

Response Structure dalam Object "additionalInfo"

Field Data Type Mandatory Length Description Example
customerName String O   Nama konsumen I GEDE TONI DHARMAWAN
customerNumber String O   Nomor konsumen 9360015723456789
invoiceNumber String O   Nomor invoice 10009121031000912103
issuerName String O   Nama issuer Finnet 2
issuerRrn String O   transaksi id dari issuer QR 110002756582
mpan String O   Merchant PAN dari original Payment QR 9360000201102921379

Request & Response Payload Sample Request:

{
  "originalReferenceNo":"290005165369",
  "serviceCode":"17",
  "additionalInfo":{
    "terminalId": "10049258"
  }
}

Normal Response:

{
    "responseCode": "2005100",
    "responseMessage": "Successful",
    "originalReferenceNo": "290005165369",
    "serviceCode": "17",
    "latestTransactionStatus": "00",
    "transactionStatusDesc": "Successfully",
    "amount": {
        "value": "2000.00",
        "currency": "IDR"
    },
    "terminalId": "10049258",
    "additionalInfo": {
        "customerName": "I GEDE TONI DHARMAWAN",
        "customerNumber": "9360015723456789",
        "invoiceNumber": "10009121031000912103",
        "issuerName": "Finnet 2",
        "issuerRrn": "110002756582",
        "mpan": "9360000201102921379"
    }
}

List of Error/Response Code

HTTP Status Code Code Status Response Description Deskripsi
200 00 Sukses Successfull Success
202 00 Pending Transaction still on process Transaction in progress
202 00 Pending Request on progress Payment is in process / failed
400 01 Gagal Invalid Field Format Request Invalid Request Format
403 00 Gagal Transaction Expired Refund is no longer possible
403 02 Gagal Exceeds Transaction Amount Limit Amount exceeding the limit
403 15 Gagal Transaction Not Permitted. Invalid Data. Abort Process Invalid Data. Abort Process
403 15 Gagal Transaction Not Permitted. QR Expired QR Expired
403 23 Gagal Account Limit Exceed Accumulated Amount Exceeds Limit
404 01 Gagal Transaction Not Found
  • CPAN data not found
  • Invalid Number
  • Transaction has been refunded
  • Data not found
404 08 Gagal Invalid Merchant Invalid Merchant
404 11 Gagal Invalid Card/Account/Customer [info]/Virtual Account Invalid CPAN
404 12 Gagal Invalid Bill Invalid transaction / invalid number
404 13 Gagal Invalid Amount Invalid Amount
404 14 Gagal Paid Bill Transaction Paid
500 01 Gagal Internal Server Error Retrieve Data Failed Retrieve Data Failed
500 01 Gagal Internal Server Error Database Error Database Error