1. Overview
BNC sends the payment request to the merchant backend when VA is successfully paid, merchants need to reply to the BNC as result format.
2. API Specification
HTTP Method | POST |
Endpoint | N/A |
SNAP Service Code | 25 |
3. Request
3.1. Request Header
Name | Type | M/O | Length | Description |
---|---|---|---|---|
X-TIMESTAMP | String | M | 25 | The request timestamp. Formatted with "yyyy-MM-ddTHH:mm:ssZ". E.g. 2022-09-06T13:00:00+07:00 |
X-SIGNATURE | String | M | 2048 | The Merchant or Client generated signature. Using Asymmetric-Signature mechanism to get the token, encrypted with SHA256withRSA.
e.g. stringToSign = <HTTP Method> + ":" + <Service Endpoint> + ":" + toLowercase(hexEncode(SHA256(minify(<Request Body>)))) + ":" + <X-TIMESTAMP> X-SIGNATURE = SHA256withRSA(PrivateKey, stringToSign) |
X-ORIGIN | String | M | 256 | Client’s host origin. |
X-PARTNER-ID | String | M | 32 | The Merchant or Client Id. Provided by BNC. |
X-EXTERNAL-ID | String | M | 36 | The Merchant External ID of request.
e.g. 77778042022091500001 |
CHANNEL-ID | String | M | 5 | PJP Channel ID. 95221 |
3.1.1 Sample Request Header
Content-type: application/json Authorization: Bearer gp9HjjEj813Y9JGoqwOeOPWbnt4CUpvIJbU1mMU4a11MNDZ7Sg5u9a" X-TIMESTAMP: 2020-12-21T14:56:11+07:00 X-SIGNATURE: 85be817c55b2c135157c7e89f52499bf0c25ad6eeebe04a986e8c862561b19a5 X-ORIGIN: www.hostname.com X-PARTNER-ID: 82150823919040624621823174737537 X-EXTERNAL-ID: 41807553358950093184162180797837 CHANNEL-ID: 95221
3.2 Request Body
Name | Type | M/O | Length | Description |
---|---|---|---|---|
partnerServiceId | String | M | 8 | Derivative of X- PARTNER-ID , similar to company code,8 digit left padding space. partnerServiceId + customerNo or virtualAccountNo |
customerNo | String | M | 20 | Unique number (up to 20 digits) . partnerServiceId + customerNo or virtualAccountNo |
virtualAccountNo | String | M | 28 | partnerServiceId (8 digit left padding 0) + customerNo (up to 20 digits). partnerServiceId + customerNo or virtualAccountNo |
virtualAccountName | String | O | 255 | Customer name |
virtualAccountEmail | String | O | 255 | Customer email |
virtualAccountPhone | String | O | 30 | Customer’s phone number Format:62xxxxxxxxxxxxx |
trxId | String | C | 64 | Unique identifier generated by Partner Mandatory if Payment comes from the Create |
paymentRequestId | String | M | 128 | Unique identifier generated by PJP. If Payment comes from the Inquiry process, this value must be the same with inquiry Request Id. |
channelCode | Number | O | 4 | Channel Code based on ISO18245 |
hashedSourceAccountNo | String | M | 32 | Source account number in hash |
sourceBankCode | String | O | 3 | Source account bank code based on |
paidAmount | Object | M | N/A | |
-> value | String(ISO4217) | M | 16.2 | Paid Amount with 2 decimal |
-> currency | String | M | 3 | Currency |
cumulativePaymentAmount | Object | O | N/A | |
-> value | String(ISO4217) | M | 16.2 | Transaction Amount |
-> currency | String | M | 3 | Currency |
paidBills | String | O | 6 | Hexadecimal format of binary offlag of paid bills |
totalAmount | Object | O | N/A | |
-> value | String(ISO4217) | M | 16.2 | Transaction Amount. Total amount from Inquiry with 2 decimal |
-> currency | String | M | 3 | Currency |
trxDateTime | Date | O | 25 | PJP internal system datetime with timezone, which follows the ISO-8601 standard |
referenceNo | String | O | 64 | Payment auth code generated by PJP |
journalNum | String | O | 6 | Sequence journal number in PJP Core System |
paymentType | String | O | 1 | Type of payment |
flagAdvise | String | O | 1 | Status is this a retry notification |
subCompany | String | O | 5 | SubCompany code generated by Partner |
billDetails | Array of Objects | O | N/A | Array with maximum 24 Objects |
-> billCode | String | O | 2 | From Inquiry Response |
-> billNo | String | O | 18 | From Inquiry Response |
-> billName | String | O | 20 | From Inquiry Response |
-> billShortName | String | O | 10 | From Inquiry Response |
-> billDescription | Object | O | N/A | From Inquiry Response |
->-> english | String | O | 18 | From Inquiry Response |
->-> indonesia | String | O | 18 | From Inquiry Response |
-> billSubCompany | String | O | 5 | From Inquiry Response |
-> billAmount | Array of Objects | O | N/A | |
->-> value | String | M | 16.2 | Transaction Amount. From Inquiry Response (ISO4217) |
->-> currency | String | M | 3 | Currency (ISO4217) |
-> additionalInfo | Object | O | N/A | From Inquiry Response |
-> billReferenceNo | Number | O | 15 | Bill auth code generated by PJP |
freeTexts | Array of Objects | O | N/A | Array withmaximum25Objects |
-> english | String | O | 32 | Will be shown in Channel |
-> indonesia | String | O | 32 | Will be shown in Channel |
additionalInfo | Object | O | N/A |
3.2.1 Sample Request Body
{ "partnerServiceId":" 088899", "customerNo":"12345678901234567890", "virtualAccountNo":" 08889912345678901234567890", "virtualAccountName":"Jokul Doe", "virtualAccountEmail":"jokul@email.com", "virtualAccountPhone":"6281828384858", "trxId":"abcdefgh1234", "paymentRequestId":"abcdef-123456-abcdef", "channelCode":6011, "hashedSourceAccountNo":"abcdefghijklmnopqrstuvwxyz123456", "sourceBankCode":"008", "paidAmount":{ "value":"12345678.00", "currency":"IDR" }, "cumulativePaymentAmount":{ "value":"12345678.00", "currency":"IDR" }, "paidBills":"95000", "totalAmount":{ "value":"12345678.00", "currency":"IDR" }, "trxDateTime":"20201231T235959Z", "referenceNo":"123456789012345", "journalNum":"123456", "paymentType":1, "flagAdvise":"Y", "subCompany":"12345", "billDetails":[ { "billCode":"01", "billNo":"123456789012345678", "billName":"Bill A for Jan", "billShortName":"Bill A", "billDescription":{ "english":"Maintenance", "indonesia":"Pemeliharaan" }, "billSubCompany":"00001", "billAmount":{ "value":"12345678.00", "currency":"IDR" }, "additionalInfo":{ }, "billReferenceNo":"123456789012345" } ], "freeTexts":[ { "english":"Free text", "indonesia":"Tulisan bebas" } ], "additionalInfo":{ } }
4. Response
4.1 Response Body
Name | Type | M/O | Length | Description |
---|---|---|---|---|
responseCode | String | M | 7 | The BI Snap standard of response code. |
responseMessage | String | M | 150 | The message corresponding to the response code. |
-> virtualAccountData | Object | M | N/A | |
-> paymentFlagReason | Object | O | N/A | Reason for Payment Status multi language |
->-> indonesia | String | O | 200 | Reason for Payment Status in English |
->-> english | String | O | 200 | Reason for inquiry Status in Bahasa |
-> partnerServiceId | String | M | 8 | Derivative of X- PARTNER-ID , similar to company code,8 digit left padding space. partnerServiceId + customerNo or virtualAccountNo |
-> customerNo | String | M | 20 | Unique number (up to 20 digits). partnerServiceId + customerNo or virtualAccountNo |
-> virtualAccountNo | String | M | 28 | partnerServiceId (8 digit left padding 0) + customerNo (up to 20 digits). partnerServi ceId + customerNo or virtualAccountNo |
-> virtualAccountName | String | M | 255 | Customer name |
-> virtualAccountEmail | String | O | 255 | Customer email |
-> virtualAccountPhone | String | O | 30 | Customer’s phone number Format:62xxxxxxxxxxxxx |
-> trxId | String | O | 64 | From Payment Request |
-> paidAmount | Array of object | O | N/A | |
->-> value | String | M | 16.2 | Transaction Amount. From Payment Request (ISO4217) |
->-> currency | String | M | 3 | Currency (ISO4217) |
-> paidBills | String | O | 6 | From Payment Request |
-> totalAmount | Array of objects | O | ||
->-> value | String(ISO4217) | M | 16.2 | Transaction Amount. From Payment Request |
->-> currency | String | M | 3 | Currency |
-> trxDateTime | Date | O | 25 | From Payment Request |
-> referenceNo | String | O | 15 | From Payment Request |
-> journalNum | String | O | 6 | From Payment Request |
-> paymentType | String | O | 1 | From Payment Request |
-> flagAdvise | String | O | 1 | From Payment Request |
-> paymentFlagStatus | String | O | 2 | Status for Payment Flag from Partner |
-> billDetails | Array of objects | O | N/A | Array with maximum24 Objects |
->-> billerReferenceId | O | 64 | From Inquiry Response | |
->-> billCode | String | O | 2 | From Inquiry Response |
->-> billNo | String | O | 18 | From Inquiry Response |
->-> billName | String | O | 20 | From Inquiry Response |
->-> billShortName | String | O | 10 | From Inquiry Response |
->-> billDescription | Object | O | N/A | From Inquiry Response |
->->-> english | String | O | 18 | From Inquiry Response |
->->-> indonesia | String | O | 18 | From Inquiry Response |
->-> billSubCompany | String | O | 5 | From Inquiry Response |
->-> billAmount | Array of objects | O | N/A | |
->->-> value | String(ISO4217) | M | 16.2 | Transaction Amount. From Inquiry Response |
->->-> currency | String | M | 3 | Currency |
->-> additionalInfo | Object | O | N/A | From Inquiry Response |
->-> status | String | O | 2 | Payment status for specific Bill |
->-> reason | Object | O | N/A | Reason for Payment Status for specific Bill multi language |
->->-> english | String | O | 64 | Reason for Payment status for specific Bill in English |
->->-> indonesia | String | O | 64 | Reason for Payment Status for specific Bill in Bahasa |
-> freeTexts | Array of objects | O | N/A | Array with maximum 25 Objects |
->-> english | String | O | 32 | Will be shown in Channel |
->-> indonesia | String | O | 32 | Will be shown in Channel |
-> additionalInfo | Object | O | N/A |
4.1.1 Sample Response Body
Success:
{ "responseCode":"2002500", "responseMessage":"Success", "virtualAccountData":{ "paymentFlagReason":{ "english":"Success", "indonesia":"Sukses" }, "partnerServiceId":" 088899", "customerNo":"12345678901234567890", "virtualAccountNo":" 08889912345678901234567890", "virtualAccountName":"Jokul Doe", "virtualAccountEmail":"jokul@email.com", "virtualAccountPhone":"6281828384858", "trxId":"abcdefgh1234", "paymentRequestId":"abcdef-123456-abcdef", "paidAmount":{ "value":"12345678.00", "currency":"IDR" }, "paidBills":"95000", "totalAmount":{ "value":"12345678.00", "currency":"IDR" }, "trxDateTime":"20201231T235959Z", "referenceNo":"123456789012345", "journalNum":"123456", "paymentType":1, "flagAdvise":"Y", "paymentFlagStatus":"02", "billDetails":[ { "billerReferenceId":"123456789012345678", "billCode":"01", "billNo":"123456789012345678", "billName":"Bill A for Jan", "billShortName":"Bill A", "billDescription":{ "english":"Maintenance", "indonesia":"Pemeliharaan" }, "billSubCompany":"00001", "billAmount":{ "value":"12345678.00", "currency":"IDR" }, "additionalInfo":{ }, "status":"00", "reason":{ "english":"Success", "indonesia":"Sukses" } } ], "freeTexts":[ { "english":"Free text", "indonesia":"Tulisan bebas" } ] }, "additionalInfo":{ } }
Fail:
Response Code | HTTP Code | Service Code | Case Code | Response Message | Description | |
---|---|---|---|---|---|---|
1 | 2002500 | 200 | any | 00 | Successful | Successful |
2 | 4002500 | 400 | any | 00 | Bad Request | General request failed error, including message parsing failed. |
3 | 4002501 | 400 | any | 01 | Invalid Field Format {field name} | Invalid format |
4 | 4012500 | 401 | any | 00 | Unauthorized. [reason] | General unauthorized error (No Interface Def, API is Invalid, Oauth Failed, Verify Client Secret Fail, Client Forbidden Access API, Unknown Client, Key not Found) |
5 | 4012501 | 401 | any | 01 | Invalid Token (B2B) | Token found in request is invalid (Access Token Not Exist, Access Token Expiry) |
6 | 4012503 | 401 | any | 03 | Token Not Found (B2B) | Token not found in the system. This occurs on any API that requires token as input parameter |
7 | 4042508 | 404 | any | 08 | InvalidMerchant | Merchant does not exist or status abnormal |
8 | 4042511 | 404 | any | 11 | Invalid Card/Accoun t/Customer [info]/Virtual Account | Card information may be invalid, or the card account may be blacklisted, or Virtual Account number maybe invalid. |
9 | 4042512 | 404 | any | 12 | Invalid Bill/Virtual Account [Reason] | The bill is blocked/suspended/not found.Virtual account is suspend/not found. |
10 | 4042513 | 404 | any | 13 | InvalidAmount | The amount doesn't match with what supposed to |
11 | 4092501 | 409 | any | 01 | Duplicate partnerReferenceNo | Transaction has previously been processed indicates the same partnerReferenceNo already success |
12 | 5002502 | 500 | Any | 02 | External Server Error | Backend system failure, etc |
6. Reference
Field Code | Field Name | Description | |
---|---|---|---|
1 | M | Mandatory | Mandatory |
2 | ME | Mandatory Equal | Mandatory Equal – value in the request and the response must be the same. |
3 | C | Conditional | Conditional |
4 | CE | Conditional Equal | Conditional Equal – value in the request and the response must be the same. |
5 | O | Optional | Optional |