QRIS Merchant Presented Mode (MPM) Dinamis

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 Information

Title

QRIS Dynamic - MPM 

Version

v1.0

URL Sandbox

https://sandbox.partner.api.bri.co.id/

URL Production

https://partner.api.bri.co.id/

Kendali Versi

Doc Version

API Version

Date

Link to document

Deskripsi

v1.0

v1.0

11 Mei 2022

Halaman ini

Versi Dasar.

v1.1 v1.0 31 Juli 2023 Disini 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.

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

Format Type

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

 

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

Deskripsi

Contoh

grantType

String

Alphabet

M

 

“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_crede ntials

Response Structure

Field

Data Type

Format

Mandatory

Length

Deskripsi

Contoh

responseCode

String

Numeric

C

 

Response code

 

responseMessage

String

Alphabet

C

 

Respon deskripsi

 

accessToken

String

Alphanum eric

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

 

tokenType

String

Alphabet

M

 

 

 

expiresIn

String

Alphanumeric

M

 

Sesi berakhir dalam hitungan detik : 900 (15 menit)

 

Request & Response Payload Sample

Request:

 {
  "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

Response Code

Status

Response Description

Deskripsi

200

2005200

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

 

Seluruh response error yang tidak tercantum dalam list response BRIAPI memiliki status pending dan perlu dilakukan pengecekan

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 is consists of verb, path, token, timestamp, and body. In Symmetric-Signature format: HMAC_SHA512(clientSecret, stringToSign) with formula stringToSign = HTTPMethod+”:“+ EndpointUrl +":"+ AccessToken+":“ + Lowercase(HexEncode(SHA-256(minify(RequestBody))))+ ":“ +TimeStamp

Contoh:

POST:/snap/v1.0/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 Notify Payment QR MPM Dinamis digunakan untuk mengirimkan notify payment QR MPM Dinamis ke partner.

General Information

HTTP Method

POST

Path

/v1.0/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

 

Timestamp ISO8601 format

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-EXTRENAL-ID

 

Numeric

M

36

 

Request Structure

Field

Data Type

Mandatory

Length

Deskripsi

Contoh

partnerReferenceNo

String

M

64

Nomor identifikasi transaksi pada sistem penyedia layanan

123456123456

amount

Object

M

 

Rincian untuk jumlah objek tercantum dalam tabel

 

merchantId

String

M

64

ID unik yang dimiliki oleh setiap pelanggan

00007100010926

terminalId

String

M

16

Terminal ID

213141251124

Request Structure dalam Object "amount"

Field

Data Type

Mandatory

Length

Deskripsi

contoh

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

Deskripsi

Contoh

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"
        }

 

Seluruh response error yang tidak tercantum dalam list response BRIAPI memiliki status pending dan perlu dilakukan pengecekan

C. Inquiry Payment

Endpoint Description

Endpoint untuk melakukan inquiry payment QR MPM Dinamis

General Information

HTTP Method

POST

Path

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

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-EXTRENAL-ID

 

Numeric

M

36

 

Request Structure

Field

Data Type

Mandatory

Length

Deskripsi

Contoh

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

Deskripsi

Contoh

terminalId

String

M

16

ID Terminal

10049258

Response Structure

Field

Data Type

Mandatory

Length

Deskripsi

Contoh

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

000008526955

serviceCode

String

M

2

Kode Service

17

latestTransactionStatus

String

M

2

00 - Success

01 - Initiated

02 - Paying

03 - Pending

04 - Refunded

05 - Canceled

06 - Failed

07 - Not found

00

transactionStatusDesc

String

O

50

Deskripsi dari status transaksi

Successfully

amount

Object

M

 

Detail isian dari object additionalInfo 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

Deskripsi

Contoh

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

1500100

currency

String

M

3

3 digit kode ISO Currency

IDR

Response Structure dalam Object "additionalInfo"

Field

Data Type

Mandatory

Length

Deskripsi

Contoh

customerName

String

O

 

Nama konsumen

John Doe

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


    {
    "originalReferenceNo":"000008526955",
    "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": "John Doe",
    "customerNumber": "9360015723456789",
    "invoiceNumber": "10009121031000912103",
    "issuerName": "Finnet 2",
    "issuerRrn": "110002756528"
    "mpan": "9360000201102921379"
    }
   }

List of Error/Response Code

HTTP Status

Code

Status

Response Description

Deskripsi

200

00

Sukses

Successfull

Sukses

202

00

Pending

Transaction still on process

Transaksi sedang dalam proses

202

00

Pending

Request on progress

Payment sedang di proses / gagal

400

01

Gagal

Invalid Field Format {field name}

Invalid Format

403

00

Gagal

Transaction Expired

Refund sudah tidak bisa dilakukan

403

02

Gagal

Exceeds Transaction Amount Limit

Nominal melebihi 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

Akumulasi Nominal Melebihi Limit

404

01

Gagal

Transaction Not Found

Data Tidak Ditemukan

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

Transaksi Sudah Terbayar / Transaksi sudah terefund

500

01

Gagal

Internal Server Error

Retrieve Data Failed

500

01

Gagal

Internal Server Error

Database Error

Seluruh response error yang tidak tercantum dalam list response BRIAPI memiliki status pending dan perlu dilakukan pengecekan