{
"info": {
"_postman_id": "b2e702b4-cda7-48fa-b664-5088f4c9424e",
"name": "DOKU API Collection",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
"_exporter_id": "7064594"
},
"item": [
{
"name": "DOKU Direct",
"item": [
{
"name": "Credit Card",
"item": [
{
"name": "CC - Generate Payment Page",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/credit-card/v1/payment-page' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"protocolProfileBehavior": {
"disabledSystemHeaders": {}
},
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{ \n \"order\": {\n \t\"invoice_number\":\"INV-{{$timestamp}}\",\n \t\"line_items\": [\n\t\t\t{\n \t\t\"name\": \"DOKU T-Shirt Merah\",\n \t\t\"price\": 30000,\n \t\t\"quantity\": 2\n \t\t},\n\t\t\t{\n \t\t\"name\": \"DOKU T-Shirt Biru\",\n \t\t\"price\": 30000,\n \t\t\"quantity\": 1\n \t\t}\n \t\t],\n \t\"amount\": 90000,\n \t\"callback_url\": \"https://doku.com\",\n \t\"auto_redirect\": false,\n \t\"session_id\": \"0000231223\"\n },\n \"customer\": {\n \t\"id\":\"W7rbKhPYh76VSHYwHRaGDIbBhgTebgAoWtX\",\n \t\"name\":\"Anton Budiman\",\n \t\"email\":\"anton@doku.com\",\n \t\"phone\":\"+6281287458232\",\n\t\t\"address\":\"Jakarta, Menara Mulia Lt 8\",\n\t\t\"country\":\"ID\"\n\t},\n \"override_configuration\": {\n \"themes\": {\n \"language\": \"ID\",\n \"background_color\": \"\",\n \"font_color\": \"\",\n \"button_background_color\": \"\",\n \"button_font_color\": \"\"\n }\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/credit-card/v1/payment-page",
"host": [
"{{url}}"
],
"path": [
"credit-card",
"v1",
"payment-page"
]
},
"description": "| Header Parameter | Type | Description |\n| --- | --- | --- |\n| Client-Id | `string` | The Client ID you retrieved from Jokul Back Office
`MANDATORY` |\n| Request-Id | `string` | Random string that must unique per request for idempotency
`MANDATORY` `ALPHA NUMERIC` `40 chars` |\n| Request-Timestamp | `string` | Request time in ISO8601 format with UTC + 0
`MANDATORY` |\n| Signature | `string` | Security parameter to ensure the request's authenticity. Learn more how to generate Signature [here](https://jokul.doku.com/docs/docs/technical-references/generate-signature)
`MANDATORY`|"
},
"response": []
},
{
"name": "CC - Online Refund",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/cancellation/credit-card/refund' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"protocolProfileBehavior": {
"disabledSystemHeaders": {}
},
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{ \n \"order\": {\n \t\"invoice_number\":\"INV-{{$timestamp}}\",\n \t\"line_items\": [\n\t\t\t{\n \t\t\"name\": \"DOKU T-Shirt Merah\",\n \t\t\"price\": 30000,\n \t\t\"quantity\": 2\n \t\t},\n\t\t\t{\n \t\t\"name\": \"DOKU T-Shirt Biru\",\n \t\t\"price\": 30000,\n \t\t\"quantity\": 1\n \t\t}\n \t\t],\n \t\"amount\": 90000,\n \t\"callback_url\": \"https://doku.com\",\n \t\"auto_redirect\": false,\n \t\"session_id\": \"0000231223\"\n },\n \"customer\": {\n \t\"id\":\"W7rbKhPYh76VSHYwHRaGDIbBhgTebgAoWtX\",\n \t\"name\":\"Anton Budiman\",\n \t\"email\":\"anton@doku.com\",\n \t\"phone\":\"+6281287458232\",\n\t\t\"address\":\"Jakarta, Menara Mulia Lt 8\",\n\t\t\"country\":\"ID\"\n\t},\n \"override_configuration\": {\n \"themes\": {\n \"language\": \"ID\",\n \"background_color\": \"\",\n \"font_color\": \"\",\n \"button_background_color\": \"\",\n \"button_font_color\": \"\"\n }\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/credit-card/v1/cancellation/credit-card/refund",
"host": [
"{{url}}"
],
"path": [
"credit-card",
"v1",
"cancellation",
"credit-card",
"refund"
]
},
"description": "| Header Parameter | Type | Description |\n| --- | --- | --- |\n| Client-Id | `string` | The Client ID you retrieved from Jokul Back Office
`MANDATORY` |\n| Request-Id | `string` | Random string that must unique per request for idempotency
`MANDATORY` `ALPHA NUMERIC` `40 chars` |\n| Request-Timestamp | `string` | Request time in ISO8601 format with UTC + 0
`MANDATORY` |\n| Signature | `string` | Security parameter to ensure the request's authenticity. Learn more how to generate Signature [here](https://jokul.doku.com/docs/docs/technical-references/generate-signature)
`MANDATORY`|"
},
"response": []
}
]
},
{
"name": "Virtual Account",
"item": [
{
"name": "NON SNAP",
"item": [
{
"name": "Mandiri VA",
"item": [
{
"name": "Mandiri VA - Generate Payment Code",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/mandiri-virtual-account/v2/merchant-payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-{{$timestamp}}\",\n \"amount\": 200000\n },\n \"virtual_account_info\": {\n \"virtual_account_number\": \"8902208137011011\",\n \"expired_time\": 60,\n \"reusable_status\": true,\n \"info1\": \"Online Shoping 1\",\n \"info2\": \"Online Shoping 2\",\n \"info3\": \"Online Shoping 3\"\n },\n \"customer\": {\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/mandiri-virtual-account/v2/merchant-payment-code",
"host": [
"{{url}}"
],
"path": [
"mandiri-virtual-account",
"v2",
"merchant-payment-code"
]
}
},
"response": []
},
{
"name": "Mandiri VA - Update Payment Code",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/mandiri-virtual-account/v2/payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.request.body));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "PATCH",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-20201224-00002\",\n \"amount\": 40000\n },\n \"virtual_account_info\": {\n \"expired_time\": 60,\n \"virtual_account_number\" : \"8889940000000152\",\n \"info1\": \"Online Shoping 1\",\n \"info2\": \"Online Shoping 2\",\n \"info3\": \"Online Shoping 3\"\n },\n \"customer\": {\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/mandiri-virtual-account/v2/payment-code",
"host": [
"{{url}}"
],
"path": [
"mandiri-virtual-account",
"v2",
"payment-code"
]
}
},
"response": []
}
]
},
{
"name": "BCA VA",
"item": [
{
"name": "BCA VA - Generate Payment Code",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/bca-virtual-account/v2/payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"protocolProfileBehavior": {
"disabledSystemHeaders": {}
},
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-{{$timestamp}}\",\n \"amount\": 20000\n },\n \"virtual_account_info\": {\n \"expired_time\": 60,\n \"reusable_status\": true,\n \"info1\": \"Online Shoping 1\",\n \"info2\": \"Online Shoping 2\",\n \"info3\": \"Online Shoping 3\"\n },\n \"customer\": {\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bca-virtual-account/v2/payment-code",
"host": [
"{{url}}"
],
"path": [
"bca-virtual-account",
"v2",
"payment-code"
]
}
},
"response": []
},
{
"name": "BCA VA - Update Payment Code",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/bca-virtual-account/v2/payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.request.body));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "PATCH",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-20201223-00001\",\n \"amount\": 40000\n },\n \"virtual_account_info\": {\n \"expired_time\": 60,\n \"virtual_account_number\" : \"8123400000005601\",\n \"info1\": \"Online Shoping 1\",\n \"info2\": \"Online Shoping 2\",\n \"info3\": \"Online Shoping 3\"\n },\n \"customer\": {\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bca-virtual-account/v2/payment-code",
"host": [
"{{url}}"
],
"path": [
"bca-virtual-account",
"v2",
"payment-code"
]
}
},
"response": []
}
]
},
{
"name": "Bank Syariah Indonesia VA",
"item": [
{
"name": "BSI VA - Generate Payment Code",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/bsm-virtual-account/v2/payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-{{$timestamp}}\",\n \"amount\": 20000\n },\n \"virtual_account_info\": {\n \"expired_time\": 60,\n \"reusable_status\": false,\n \"info1\": \"Online Shoping Store\",\n \"info2\": \"Contact support@oss.id\",\n \"info3\": \"Thank for shopping in oss.id\"\n },\n \"customer\": {\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bsm-virtual-account/v2/payment-code",
"host": [
"{{url}}"
],
"path": [
"bsm-virtual-account",
"v2",
"payment-code"
]
}
},
"response": []
},
{
"name": "BSI VA - Update Payment Code",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/bsm-virtual-account/v2/payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.request.body));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "PATCH",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-20201223-00001\",\n \"amount\": 40000\n },\n \"virtual_account_info\": {\n \"expired_time\": 60,\n \"virtual_account_number\" : \"6059000000000160\",\n \"info1\": \"Online Shoping 1\",\n \"info2\": \"Online Shoping 2\",\n \"info3\": \"Online Shoping 3\"\n },\n \"customer\": {\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bsm-virtual-account/v2/payment-code",
"host": [
"{{url}}"
],
"path": [
"bsm-virtual-account",
"v2",
"payment-code"
]
}
},
"response": []
}
],
"event": [
{
"listen": "prerequest",
"script": {
"type": "text/javascript",
"exec": [
""
]
}
},
{
"listen": "test",
"script": {
"type": "text/javascript",
"exec": [
""
]
}
}
]
},
{
"name": "DOKU VA",
"item": [
{
"name": "DOKU VA - Generate Payment Code",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/doku-virtual-account/v2/payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-{{$timestamp}}\",\n \"amount\": 20000\n },\n \"virtual_account_info\": {\n \"expired_time\": 60,\n \"reusable_status\": false,\n \"info1\": \"Online Shoping Store\",\n \"info2\": \"Contact support@oss.id\",\n \"info3\": \"Thank for shopping in oss.id\"\n },\n \"customer\": {\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/doku-virtual-account/v2/payment-code",
"host": [
"{{url}}"
],
"path": [
"doku-virtual-account",
"v2",
"payment-code"
]
}
},
"response": []
},
{
"name": "DOKU VA - Update Payment Code",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/doku-virtual-account/v2/payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.request.body));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "PATCH",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-20201223-00001\",\n \"amount\": 40000\n },\n \"virtual_account_info\": {\n \"expired_time\": 60,\n \"virtual_account_number\" : \"8000100000000247\",\n \"info1\": \"Online Shoping 1\",\n \"info2\": \"Online Shoping 2\",\n \"info3\": \"Online Shoping 3\"\n },\n \"customer\": {\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/doku-virtual-account/v2/payment-code",
"host": [
"{{url}}"
],
"path": [
"doku-virtual-account",
"v2",
"payment-code"
]
}
},
"response": []
}
]
},
{
"name": "Permata VA",
"item": [
{
"name": "Permata VA - Generate Payment Code",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/permata-virtual-account/v2/payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"protocolProfileBehavior": {
"disabledSystemHeaders": {}
},
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-{{$timestamp}}\",\n \"amount\": 20000\n },\n \"virtual_account_info\": {\n \"expired_time\": 60,\n \"reusable_status\": true,\n \"ref_info\" : [\n {\n \"ref_name\": \"kota\",\n \"ref_value\": \"bekasi\"\n },\n {\n \"ref_name\": \"provinsi\",\n \"ref_value\": \"jawa barat\"\n }\n ]\n },\n \"customer\": {\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/permata-virtual-account/v2/payment-code",
"host": [
"{{url}}"
],
"path": [
"permata-virtual-account",
"v2",
"payment-code"
]
}
},
"response": []
},
{
"name": "Permata VA - Update Payment Code",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/permata-virtual-account/v2/payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.request.body));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "PATCH",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-1634201275\",\n \"amount\": 40000\n },\n \"virtual_account_info\": {\n \"expired_time\": 120,\n \"virtual_account_number\" : \"8124600000000011\",\n \"ref_info\" : [\n {\n \"ref_name\": \"kota\",\n \"ref_value\": \"bekasi\"\n },\n {\n \"ref_name\": \"provinsi\",\n \"ref_value\": \"jawa barat\"\n }\n ]\n },\n \"customer\": {\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/permata-virtual-account/v2/payment-code",
"host": [
"{{url}}"
],
"path": [
"permata-virtual-account",
"v2",
"payment-code"
]
}
},
"response": []
}
]
},
{
"name": "CIMB VA",
"item": [
{
"name": "CIMB VA - Generate Payment Code",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/cimb-virtual-account/v2/payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"protocolProfileBehavior": {
"disabledSystemHeaders": {}
},
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-{{$timestamp}}\",\n \"amount\": 20000\n },\n \"virtual_account_info\": {\n \"expired_time\": 60,\n \"reusable_status\": true,\n \"ref_info\" : [\n {\n \"ref_name\": \"kota\",\n \"ref_value\": \"bekasi\"\n },\n {\n \"ref_name\": \"provinsi\",\n \"ref_value\": \"jawa barat\"\n }\n ]\n },\n \"customer\": {\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/cimb-virtual-account/v2/payment-code",
"host": [
"{{url}}"
],
"path": [
"cimb-virtual-account",
"v2",
"payment-code"
]
}
},
"response": []
},
{
"name": "CIMB VA - Update Payment Code",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/cimb-virtual-account/v2/payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.request.body));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "PATCH",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-1634201275\",\n \"amount\": 40000\n },\n \"virtual_account_info\": {\n \"expired_time\": 120,\n \"virtual_account_number\" : \"8124600000000011\",\n \"ref_info\" : [\n {\n \"ref_name\": \"kota\",\n \"ref_value\": \"bekasi\"\n },\n {\n \"ref_name\": \"provinsi\",\n \"ref_value\": \"jawa barat\"\n }\n ]\n },\n \"customer\": {\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/cimb-virtual-account/v2/payment-code",
"host": [
"{{url}}"
],
"path": [
"cimb-virtual-account",
"v2",
"payment-code"
]
}
},
"response": []
}
]
},
{
"name": "BNI VA",
"item": [
{
"name": "BNI VA - Generate Payment Code",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/bni-virtual-account/v2/payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"protocolProfileBehavior": {
"disabledSystemHeaders": {}
},
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-{{$timestamp}}\",\n \"amount\": 20000\n },\n \"virtual_account_info\": {\n \"expired_time\": 60,\n \"biling_type\" : \"FIXED\",\n \"info\" : \"Product detail here\",\n \"merchant_unique_reference\":\"UNIQUE_00002\"\n },\n \"customer\": {\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bni-virtual-account/v2/payment-code",
"host": [
"{{url}}"
],
"path": [
"bni-virtual-account",
"v2",
"payment-code"
]
}
},
"response": []
}
]
}
]
},
{
"name": "SNAP",
"item": [
{
"name": "BNC SNAP VA",
"item": [
{
"name": "Step 1 - Init KJUR",
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.globals.set(\"jsrsasign-js\", responseBody);",
""
],
"type": "text/javascript"
}
},
{
"listen": "prerequest",
"script": {
"exec": [],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js",
"protocol": "http",
"host": [
"kjur",
"github",
"io"
],
"path": [
"jsrsasign",
"jsrsasign-latest-all-min.js"
]
}
},
"response": []
},
{
"name": "Step 2 - Get Token",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const privateKey = pm.collectionVariables.get(\"private_key\");",
"signRequest(privateKey, clientId);",
"",
"",
"function signRequest(privateKey, clientId) {",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ') ",
" ",
" const data = `${clientId}|${dateIso}`",
" console.log('stringtosign: ' + data);",
" ",
" var signatureLib = new KJUR.crypto.Signature({\"alg\": \"SHA256withRSA\"});",
" signatureLib.init(privateKey);",
" signatureLib.updateString(data);",
" var signatureHash = hex2b64(signatureLib.sign());",
"",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
" pm.collectionVariables.set(\"x_timestamp\", dateIso);",
" pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
"let success = true;",
"",
"try {",
" tests[\"Response has accessToken.\"] = responseBody.has(\"accessToken\");",
" const responseData = JSON.parse(responseBody);",
"",
" const accessToken = responseData.accessToken;",
" tests[\"Response has not null accessToken.\"] = typeof accessToken !== 'undefined';",
" pm.globals.set(\"snap_access_token_merchant\", accessToken);",
"}",
"catch(error) {",
" success = false;",
" console.log(\"Error: \" + JSON.stringify(error));",
"}",
"",
"tests[\"Test successfully done.\"] = success;",
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-CLIENT-KEY",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Step 3 - Create VA (DGPC)",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const date = new Date().toISOString();",
"const timestamp = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"const uniqueId = moment(date).format(\"yyyyMMDDHHmmssSSS\");",
"const externalId = \"RID_\" + uniqueId;",
"const invoiceNumber = \"INV_\" + uniqueId; ",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const secretKey = pm.collectionVariables.get(\"secret_key\");",
"",
"pm.collectionVariables.set(\"x_external_id\", externalId);",
"pm.collectionVariables.set(\"x_timestamp\", timestamp);",
"pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"pm.collectionVariables.set(\"invoice_number\", invoiceNumber);",
"pm.collectionVariables.set(\"expired_date\", moment().add(1, 'hour').format());",
"",
"",
"const bin = pm.collectionVariables.get(\"bnc_dgpc_bin\");",
"const acquirerBinLength = 6; // please adjust the length based on acquirer BIN Rules",
"generatePartnerServiceId(bin, acquirerBinLength);",
"",
"function generatePartnerServiceId(bin, acquirerBinLength) {",
" let partnerServiceId = bin.trim();",
" if (bin.length < 8) {",
" partnerServiceId = partnerServiceId.substring(0, acquirerBinLength).padStart(8, ' ');",
" } else {",
" partnerServiceId = partnerServiceId.substring(0, 8);",
" }",
" pm.collectionVariables.set(\"partner_service_id\", partnerServiceId);",
"}",
"",
"",
"signRequest(pm.request);",
"",
"function createSignature(rawData, secretKey){",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);",
" console.log(\"secretKey: \" + secretKey);",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8,secretUtf8);",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);",
" return requestSignatureBase64String;",
"}",
"",
"function signRequest(request) {",
"",
" const method = pm.request.method;",
" const path = pm.request.url.getPath();",
" let body = pm.request.body.raw;",
" body = body",
" .replace(\"{{partner_service_id}}\", pm.collectionVariables.get(\"partner_service_id\"))",
" .replace(\"{{invoice_number}}\", pm.collectionVariables.get(\"invoice_number\"))",
" .replace(\"{{expired_date}}\", pm.collectionVariables.get(\"expired_date\"));",
" const accessToken = pm.globals.get(\"snap_access_token_merchant\");",
" ",
" var jsonObject = JSON.parse(body);",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)",
" console.log('minifyJsonObject: ' + minifyJsonObject);",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();",
"",
" const data = `${method}:${path}:${accessToken}:${bodySha256}:${timestamp}`",
" console.log('stringtosign: ' + data);",
"",
" var signatureHash = createSignature(data, secretKey); ",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-PARTNER-ID",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-EXTERNAL-ID",
"value": "{{x_external_id}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
},
{
"key": "Authorization",
"value": "Bearer {{snap_access_token_merchant}}",
"type": "text"
},
{
"key": "CHANNEL-ID",
"value": "VA008",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerServiceId\": \"{{partner_service_id}}\",\r\n \"trxId\": \"{{invoice_number}}\",\r\n \"virtualAccountTrxType\": \"1\",\r\n \"totalAmount\": {\r\n \"value\": \"12500.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"expiredDate\": \"{{expired_date}}\",\r\n \"virtualAccountName\": \"Testing VA\",\r\n \"virtualAccountEmail\": \"testing@doku.com\",\r\n \"virtualAccountPhone\": \"6281200001111\",\r\n \"billDetails\": [\r\n {\r\n \"billCode\": \"01\",\r\n \"billNo\": \"123456789012345678\",\r\n \"billName\": \"Bill A for Jan\",\r\n \"billShortName\": \"Bill A\",\r\n \"billDescription\": {\r\n \"english\": \"Maintenance\",\r\n \"indonesia\": \"Pemeliharaan\"\r\n },\r\n \"billSubCompany\": \"00001\",\r\n \"billAmount\": {\r\n \"value\": \"20000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {}\r\n }\r\n ],\r\n \"freeTexts\": [\r\n {\r\n \"english\": \"Free text\",\r\n \"indonesia\": \"Tulisan bebas\"\r\n }\r\n ],\r\n \"additionalInfo\": {\r\n \"virtualAccountConfig\": {\r\n \"reusableStatus\": true\r\n },\r\n \"channel\" : \"VIRTUAL_ACCOUNT_BNC\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/virtual-accounts/bi-snap-va/v1/transfer-va/create-va",
"host": [
"{{url}}"
],
"path": [
"virtual-accounts",
"bi-snap-va",
"v1",
"transfer-va",
"create-va"
]
},
"description": "List of **virtualAccountTrxType**:\n\n- 1 = C = Closed Payment\n \n- 2 = O = Open Payment\n \n- 3 = I = Partial\n \n- 4 = M = Minimum - Only can be paid once with minimum amount\n \n- 5 = L = Maximum\n \n- 6 = N = Open Minimum - Can be paid multiple with minimum amount\n \n- 7 = X = Open Maximum - Can be paid multiple with cumulative maximum amount\n \n- 8 = V = Bill Variable\n \n- 9 = W = Multi Bill Variable"
},
"response": []
}
]
},
{
"name": "BNI SNAP VA",
"item": [
{
"name": "Step 1 - Init KJUR",
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.globals.set(\"jsrsasign-js\", responseBody);",
""
],
"type": "text/javascript"
}
},
{
"listen": "prerequest",
"script": {
"exec": [],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js",
"protocol": "http",
"host": [
"kjur",
"github",
"io"
],
"path": [
"jsrsasign",
"jsrsasign-latest-all-min.js"
]
}
},
"response": []
},
{
"name": "Step 2 - Get Token",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const privateKey = pm.collectionVariables.get(\"private_key\");",
"signRequest(privateKey, clientId);",
"",
"",
"function signRequest(privateKey, clientId) {",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ') ",
" ",
" const data = `${clientId}|${dateIso}`",
" console.log('stringtosign: ' + data);",
" ",
" var signatureLib = new KJUR.crypto.Signature({\"alg\": \"SHA256withRSA\"});",
" signatureLib.init(privateKey);",
" signatureLib.updateString(data);",
" var signatureHash = hex2b64(signatureLib.sign());",
"",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
" pm.collectionVariables.set(\"x_timestamp\", dateIso);",
" pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
"let success = true;",
"",
"try {",
" tests[\"Response has accessToken.\"] = responseBody.has(\"accessToken\");",
" const responseData = JSON.parse(responseBody);",
"",
" const accessToken = responseData.accessToken;",
" tests[\"Response has not null accessToken.\"] = typeof accessToken !== 'undefined';",
" pm.globals.set(\"snap_access_token_merchant\", accessToken);",
"}",
"catch(error) {",
" success = false;",
" console.log(\"Error: \" + JSON.stringify(error));",
"}",
"",
"tests[\"Test successfully done.\"] = success;",
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-CLIENT-KEY",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Step 3 - Create VA (DGPC)",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const date = new Date().toISOString();",
"const timestamp = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"const uniqueId = moment(date).format(\"yyyyMMDDHHmmssSSS\");",
"const externalId = \"RID_\" + uniqueId;",
"const invoiceNumber = \"INV_\" + uniqueId; ",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const secretKey = pm.collectionVariables.get(\"secret_key\");",
"",
"pm.collectionVariables.set(\"x_external_id\", externalId);",
"pm.collectionVariables.set(\"x_timestamp\", timestamp);",
"pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"pm.collectionVariables.set(\"invoice_number\", invoiceNumber);",
"pm.collectionVariables.set(\"expired_date\", moment().add(1, 'hour').format());",
"",
"",
"const bin = pm.collectionVariables.get(\"bni_dgpc_bin\");",
"const acquirerBinLength = 6; // please adjust the length based on acquirer BIN Rules",
"generatePartnerServiceId(bin, acquirerBinLength);",
"",
"function generatePartnerServiceId(bin, acquirerBinLength) {",
" let partnerServiceId = bin.trim();",
" if (bin.length < 8) {",
" partnerServiceId = partnerServiceId.substring(0, acquirerBinLength).padStart(8, ' ');",
" } else {",
" partnerServiceId = partnerServiceId.substring(0, 8);",
" }",
" pm.collectionVariables.set(\"partner_service_id\", partnerServiceId);",
"}",
"",
"",
"signRequest(pm.request);",
"",
"function createSignature(rawData, secretKey){",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);",
" console.log(\"secretKey: \" + secretKey);",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8,secretUtf8);",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);",
" return requestSignatureBase64String;",
"}",
"",
"function signRequest(request) {",
"",
" const method = pm.request.method;",
" const path = pm.request.url.getPath();",
" let body = pm.request.body.raw;",
" body = body",
" .replace(\"{{partner_service_id}}\", pm.collectionVariables.get(\"partner_service_id\"))",
" .replace(\"{{invoice_number}}\", pm.collectionVariables.get(\"invoice_number\"))",
" .replace(\"{{expired_date}}\", pm.collectionVariables.get(\"expired_date\"));",
" const accessToken = pm.globals.get(\"snap_access_token_merchant\");",
" ",
" var jsonObject = JSON.parse(body);",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)",
" console.log('minifyJsonObject: ' + minifyJsonObject);",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();",
"",
" const data = `${method}:${path}:${accessToken}:${bodySha256}:${timestamp}`",
" console.log('stringtosign: ' + data);",
"",
" var signatureHash = createSignature(data, secretKey); ",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-PARTNER-ID",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-EXTERNAL-ID",
"value": "{{x_external_id}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
},
{
"key": "Authorization",
"value": "Bearer {{snap_access_token_merchant}}",
"type": "text"
},
{
"key": "CHANNEL-ID",
"value": "VA004",
"description": "http://confluence.doku.com/display/GAT/SNAP+CHANNEL-ID+List",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerServiceId\": \"{{partner_service_id}}\",\r\n \"trxId\": \"{{invoice_number}}\",\r\n \"virtualAccountTrxType\": \"1\",\r\n \"totalAmount\": {\r\n \"value\": \"12500.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"expiredDate\": \"{{expired_date}}\",\r\n \"virtualAccountName\": \"Testing VA\",\r\n \"virtualAccountEmail\": \"testing@doku.com\",\r\n \"virtualAccountPhone\": \"6281200001111\",\r\n \"billDetails\": [\r\n {\r\n \"billCode\": \"01\",\r\n \"billNo\": \"123456789012345678\",\r\n \"billName\": \"Bill A for Jan\",\r\n \"billShortName\": \"Bill A\",\r\n \"billDescription\": {\r\n \"english\": \"Maintenance\",\r\n \"indonesia\": \"Pemeliharaan\"\r\n },\r\n \"billSubCompany\": \"00001\",\r\n \"billAmount\": {\r\n \"value\": \"20000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {}\r\n }\r\n ],\r\n \"freeTexts\": [\r\n {\r\n \"english\": \"Free text\",\r\n \"indonesia\": \"Tulisan bebas\"\r\n }\r\n ],\r\n \"additionalInfo\": {\r\n \"virtualAccountConfig\": {\r\n \"reusableStatus\": true\r\n },\r\n \"channel\": \"VIRTUAL_ACCOUNT_BNI\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/virtual-accounts/bi-snap-va/v1/transfer-va/create-va",
"host": [
"{{url}}"
],
"path": [
"virtual-accounts",
"bi-snap-va",
"v1",
"transfer-va",
"create-va"
]
},
"description": "List of **virtualAccountTrxType**:\n\n- 1 = C = Closed Payment\n \n- 2 = O = Open Payment\n \n- 3 = I = Partial\n \n- 4 = M = Minimum - Only can be paid once with minimum amount\n \n- 5 = L = Maximum\n \n- 6 = N = Open Minimum - Can be paid multiple with minimum amount\n \n- 7 = X = Open Maximum - Can be paid multiple with cumulative maximum amount\n \n- 8 = V = Bill Variable\n \n- 9 = W = Multi Bill Variable"
},
"response": []
}
]
},
{
"name": "BRI SNAP VA",
"item": [
{
"name": "Step 1 - Init KJUR",
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.globals.set(\"jsrsasign-js\", responseBody);",
""
],
"type": "text/javascript"
}
},
{
"listen": "prerequest",
"script": {
"exec": [],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js",
"protocol": "http",
"host": [
"kjur",
"github",
"io"
],
"path": [
"jsrsasign",
"jsrsasign-latest-all-min.js"
]
}
},
"response": []
},
{
"name": "Step 2 - Get Token",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const privateKey = pm.collectionVariables.get(\"private_key\");",
"signRequest(privateKey, clientId);",
"",
"",
"function signRequest(privateKey, clientId) {",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ') ",
" ",
" const data = `${clientId}|${dateIso}`",
" console.log('stringtosign: ' + data);",
" ",
" var signatureLib = new KJUR.crypto.Signature({\"alg\": \"SHA256withRSA\"});",
" signatureLib.init(privateKey);",
" signatureLib.updateString(data);",
" var signatureHash = hex2b64(signatureLib.sign());",
"",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
" pm.collectionVariables.set(\"x_timestamp\", dateIso);",
" pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
"let success = true;",
"",
"try {",
" tests[\"Response has accessToken.\"] = responseBody.has(\"accessToken\");",
" const responseData = JSON.parse(responseBody);",
"",
" const accessToken = responseData.accessToken;",
" tests[\"Response has not null accessToken.\"] = typeof accessToken !== 'undefined';",
" pm.globals.set(\"snap_access_token_merchant\", accessToken);",
"}",
"catch(error) {",
" success = false;",
" console.log(\"Error: \" + JSON.stringify(error));",
"}",
"",
"tests[\"Test successfully done.\"] = success;",
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-CLIENT-KEY",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Step 3 - Create VA (DGPC)",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const date = new Date().toISOString();",
"const timestamp = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"const uniqueId = moment(date).format(\"yyyyMMDDHHmmssSSS\");",
"const externalId = \"RID_\" + uniqueId;",
"const invoiceNumber = \"INV_\" + uniqueId; ",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const secretKey = pm.collectionVariables.get(\"secret_key\");",
"",
"pm.collectionVariables.set(\"x_external_id\", externalId);",
"pm.collectionVariables.set(\"x_timestamp\", timestamp);",
"pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"pm.collectionVariables.set(\"invoice_number\", invoiceNumber);",
"pm.collectionVariables.set(\"expired_date\", moment().add(1, 'hour').format());",
"",
"",
"const bin = pm.collectionVariables.get(\"bri_dgpc_bin\");",
"const acquirerBinLength = 6; // please adjust the length based on acquirer BIN Rules",
"generatePartnerServiceId(bin, acquirerBinLength);",
"",
"function generatePartnerServiceId(bin, acquirerBinLength) {",
" let partnerServiceId = bin.trim();",
" if (bin.length < 8) {",
" partnerServiceId = partnerServiceId.substring(0, acquirerBinLength).padStart(8, ' ');",
" } else {",
" partnerServiceId = partnerServiceId.substring(0, 8);",
" }",
" pm.collectionVariables.set(\"partner_service_id\", partnerServiceId);",
"}",
"",
"",
"signRequest(pm.request);",
"",
"function createSignature(rawData, secretKey){",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);",
" console.log(\"secretKey: \" + secretKey);",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8,secretUtf8);",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);",
" return requestSignatureBase64String;",
"}",
"",
"function signRequest(request) {",
"",
" const method = pm.request.method;",
" const path = pm.request.url.getPath();",
" let body = pm.request.body.raw;",
" body = body",
" .replace(\"{{partner_service_id}}\", pm.collectionVariables.get(\"partner_service_id\"))",
" .replace(\"{{invoice_number}}\", pm.collectionVariables.get(\"invoice_number\"))",
" .replace(\"{{expired_date}}\", pm.collectionVariables.get(\"expired_date\"));",
" const accessToken = pm.globals.get(\"snap_access_token_merchant\");",
" ",
" var jsonObject = JSON.parse(body);",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)",
" console.log('minifyJsonObject: ' + minifyJsonObject);",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();",
"",
" const data = `${method}:${path}:${accessToken}:${bodySha256}:${timestamp}`",
" console.log('stringtosign: ' + data);",
"",
" var signatureHash = createSignature(data, secretKey); ",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-PARTNER-ID",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-EXTERNAL-ID",
"value": "{{x_external_id}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
},
{
"key": "Authorization",
"value": "Bearer {{snap_access_token_merchant}}",
"type": "text"
},
{
"key": "CHANNEL-ID",
"value": "VA003",
"description": "http://confluence.doku.com/display/GAT/SNAP+CHANNEL-ID+List",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerServiceId\": \"{{partner_service_id}}\",\r\n \"trxId\": \"{{invoice_number}}\",\r\n \"virtualAccountTrxType\": \"1\",\r\n \"totalAmount\": {\r\n \"value\": \"12500.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"expiredDate\": \"{{expired_date}}\",\r\n \"virtualAccountName\": \"Testing VA\",\r\n \"virtualAccountEmail\": \"testing@doku.com\",\r\n \"virtualAccountPhone\": \"6281200001111\",\r\n \"billDetails\": [\r\n {\r\n \"billCode\": \"01\",\r\n \"billNo\": \"123456789012345678\",\r\n \"billName\": \"Bill A for Jan\",\r\n \"billShortName\": \"Bill A\",\r\n \"billDescription\": {\r\n \"english\": \"Maintenance\",\r\n \"indonesia\": \"Pemeliharaan\"\r\n },\r\n \"billSubCompany\": \"00001\",\r\n \"billAmount\": {\r\n \"value\": \"20000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {}\r\n }\r\n ],\r\n \"freeTexts\": [\r\n {\r\n \"english\": \"Free text\",\r\n \"indonesia\": \"Tulisan bebas\"\r\n }\r\n ],\r\n \"additionalInfo\": {\r\n \"virtualAccountConfig\": {\r\n \"reusableStatus\": true\r\n },\r\n \"deviceId\": \"12345679237\",\r\n \"channel\": \"mobilephone\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bi-snap-va/bri/v1/transfer-va/create-va",
"host": [
"{{url}}"
],
"path": [
"bi-snap-va",
"bri",
"v1",
"transfer-va",
"create-va"
]
},
"description": "List of **virtualAccountTrxType**:\n\n- 1 = C = Closed Payment\n \n- 2 = O = Open Payment\n \n- 3 = I = Partial\n \n- 4 = M = Minimum - Only can be paid once with minimum amount\n \n- 5 = L = Maximum\n \n- 6 = N = Open Minimum - Can be paid multiple with minimum amount\n \n- 7 = X = Open Maximum - Can be paid multiple with cumulative maximum amount\n \n- 8 = V = Bill Variable\n \n- 9 = W = Multi Bill Variable"
},
"response": []
}
]
},
{
"name": "BSI SNAP VA",
"item": [
{
"name": "Step 1 - Init KJUR",
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.globals.set(\"jsrsasign-js\", responseBody);",
""
],
"type": "text/javascript"
}
},
{
"listen": "prerequest",
"script": {
"exec": [],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js",
"protocol": "http",
"host": [
"kjur",
"github",
"io"
],
"path": [
"jsrsasign",
"jsrsasign-latest-all-min.js"
]
}
},
"response": []
},
{
"name": "Step 2 - Get Token",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const privateKey = pm.collectionVariables.get(\"private_key\");",
"signRequest(privateKey, clientId);",
"",
"",
"function signRequest(privateKey, clientId) {",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ') ",
" ",
" const data = `${clientId}|${dateIso}`",
" console.log('stringtosign: ' + data);",
" ",
" var signatureLib = new KJUR.crypto.Signature({\"alg\": \"SHA256withRSA\"});",
" signatureLib.init(privateKey);",
" signatureLib.updateString(data);",
" var signatureHash = hex2b64(signatureLib.sign());",
"",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
" pm.collectionVariables.set(\"x_timestamp\", dateIso);",
" pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
"let success = true;",
"",
"try {",
" tests[\"Response has accessToken.\"] = responseBody.has(\"accessToken\");",
" const responseData = JSON.parse(responseBody);",
"",
" const accessToken = responseData.accessToken;",
" tests[\"Response has not null accessToken.\"] = typeof accessToken !== 'undefined';",
" pm.globals.set(\"snap_access_token_merchant\", accessToken);",
"}",
"catch(error) {",
" success = false;",
" console.log(\"Error: \" + JSON.stringify(error));",
"}",
"",
"tests[\"Test successfully done.\"] = success;",
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-CLIENT-KEY",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Step 3 - Create VA (DGPC)",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const date = new Date().toISOString();",
"const timestamp = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"const uniqueId = moment(date).format(\"yyyyMMDDHHmmssSSS\");",
"const externalId = \"RID_\" + uniqueId;",
"const invoiceNumber = \"INV_\" + uniqueId; ",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const secretKey = pm.collectionVariables.get(\"secret_key\");",
"",
"pm.collectionVariables.set(\"x_external_id\", externalId);",
"pm.collectionVariables.set(\"x_timestamp\", timestamp);",
"pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"pm.collectionVariables.set(\"invoice_number\", invoiceNumber);",
"pm.collectionVariables.set(\"expired_date\", moment().add(1, 'hour').format());",
"",
"",
"const bin = pm.collectionVariables.get(\"bsi_dgpc_bin\");",
"const acquirerBinLength = 6; // please adjust the length based on acquirer BIN Rules",
"generatePartnerServiceId(bin, acquirerBinLength);",
"",
"function generatePartnerServiceId(bin, acquirerBinLength) {",
" let partnerServiceId = bin.trim();",
" if (bin.length < 8) {",
" partnerServiceId = partnerServiceId.substring(0, acquirerBinLength).padStart(8, ' ');",
" } else {",
" partnerServiceId = partnerServiceId.substring(0, 8);",
" }",
" pm.collectionVariables.set(\"partner_service_id\", partnerServiceId);",
"}",
"",
"",
"signRequest(pm.request);",
"",
"function createSignature(rawData, secretKey){",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);",
" console.log(\"secretKey: \" + secretKey);",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8,secretUtf8);",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);",
" return requestSignatureBase64String;",
"}",
"",
"function signRequest(request) {",
"",
" const method = pm.request.method;",
" const path = pm.request.url.getPath();",
" let body = pm.request.body.raw;",
" body = body",
" .replace(\"{{partner_service_id}}\", pm.collectionVariables.get(\"partner_service_id\"))",
" .replace(\"{{invoice_number}}\", pm.collectionVariables.get(\"invoice_number\"))",
" .replace(\"{{expired_date}}\", pm.collectionVariables.get(\"expired_date\"));",
" const accessToken = pm.globals.get(\"snap_access_token_merchant\");",
" ",
" var jsonObject = JSON.parse(body);",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)",
" console.log('minifyJsonObject: ' + minifyJsonObject);",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();",
"",
" const data = `${method}:${path}:${accessToken}:${bodySha256}:${timestamp}`",
" console.log('stringtosign: ' + data);",
"",
" var signatureHash = createSignature(data, secretKey); ",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-PARTNER-ID",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-EXTERNAL-ID",
"value": "{{x_external_id}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
},
{
"key": "Authorization",
"value": "Bearer {{snap_access_token_merchant}}",
"type": "text"
},
{
"key": "CHANNEL-ID",
"value": "VA010",
"description": "http://confluence.doku.com/display/GAT/SNAP+CHANNEL-ID+List",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerServiceId\": \"{{partner_service_id}}\",\r\n \"trxId\": \"{{invoice_number}}\",\r\n \"virtualAccountTrxType\": \"1\",\r\n \"totalAmount\": {\r\n \"value\": \"12500.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"expiredDate\": \"{{expired_date}}\",\r\n \"virtualAccountName\": \"Testing VA\",\r\n \"virtualAccountEmail\": \"testing@doku.com\",\r\n \"virtualAccountPhone\": \"6281200001111\",\r\n \"billDetails\": [\r\n {\r\n \"billCode\": \"01\",\r\n \"billNo\": \"123456789012345678\",\r\n \"billName\": \"Bill A for Jan\",\r\n \"billShortName\": \"Bill A\",\r\n \"billDescription\": {\r\n \"english\": \"Maintenance\",\r\n \"indonesia\": \"Pemeliharaan\"\r\n },\r\n \"billSubCompany\": \"00001\",\r\n \"billAmount\": {\r\n \"value\": \"20000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {}\r\n }\r\n ],\r\n \"freeTexts\": [\r\n {\r\n \"english\": \"Free text\",\r\n \"indonesia\": \"Tulisan bebas\"\r\n }\r\n ],\r\n \"additionalInfo\": {\r\n \"virtualAccountConfig\": {\r\n \"reusableStatus\": true\r\n },\r\n \"deviceId\": \"12345679237\",\r\n \"channel\": \"mobilephone\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bi-snap-va/bsi/v1/transfer-va/create-va",
"host": [
"{{url}}"
],
"path": [
"bi-snap-va",
"bsi",
"v1",
"transfer-va",
"create-va"
]
},
"description": "List of **virtualAccountTrxType**:\n\n- 1 = C = Closed Payment\n \n- 2 = O = Open Payment\n \n- 3 = I = Partial\n \n- 4 = M = Minimum - Only can be paid once with minimum amount\n \n- 5 = L = Maximum\n \n- 6 = N = Open Minimum - Can be paid multiple with minimum amount\n \n- 7 = X = Open Maximum - Can be paid multiple with cumulative maximum amount\n \n- 8 = V = Bill Variable\n \n- 9 = W = Multi Bill Variable"
},
"response": []
}
]
},
{
"name": "BTN SNAP VA",
"item": [
{
"name": "Step 1 - Init KJUR",
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.globals.set(\"jsrsasign-js\", responseBody);",
""
],
"type": "text/javascript"
}
},
{
"listen": "prerequest",
"script": {
"exec": [],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js",
"protocol": "http",
"host": [
"kjur",
"github",
"io"
],
"path": [
"jsrsasign",
"jsrsasign-latest-all-min.js"
]
}
},
"response": []
},
{
"name": "Step 2 - Get Token",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const privateKey = pm.collectionVariables.get(\"private_key\");",
"signRequest(privateKey, clientId);",
"",
"",
"function signRequest(privateKey, clientId) {",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ') ",
" ",
" const data = `${clientId}|${dateIso}`",
" console.log('stringtosign: ' + data);",
" ",
" var signatureLib = new KJUR.crypto.Signature({\"alg\": \"SHA256withRSA\"});",
" signatureLib.init(privateKey);",
" signatureLib.updateString(data);",
" var signatureHash = hex2b64(signatureLib.sign());",
"",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
" pm.collectionVariables.set(\"x_timestamp\", dateIso);",
" pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
"let success = true;",
"",
"try {",
" tests[\"Response has accessToken.\"] = responseBody.has(\"accessToken\");",
" const responseData = JSON.parse(responseBody);",
"",
" const accessToken = responseData.accessToken;",
" tests[\"Response has not null accessToken.\"] = typeof accessToken !== 'undefined';",
" pm.globals.set(\"snap_access_token_merchant\", accessToken);",
"}",
"catch(error) {",
" success = false;",
" console.log(\"Error: \" + JSON.stringify(error));",
"}",
"",
"tests[\"Test successfully done.\"] = success;",
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-CLIENT-KEY",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Step 3 - Create VA (DGPC)",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const date = new Date().toISOString();",
"const timestamp = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"const uniqueId = moment(date).format(\"yyyyMMDDHHmmssSSS\");",
"const externalId = \"RID_\" + uniqueId;",
"const invoiceNumber = \"INV_\" + uniqueId; ",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const secretKey = pm.collectionVariables.get(\"secret_key\");",
"",
"pm.collectionVariables.set(\"x_external_id\", externalId);",
"pm.collectionVariables.set(\"x_timestamp\", timestamp);",
"pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"pm.collectionVariables.set(\"invoice_number\", invoiceNumber);",
"pm.collectionVariables.set(\"expired_date\", moment().add(1, 'hour').format());",
"",
"",
"const bin = pm.collectionVariables.get(\"btn_dgpc_bin\");",
"const acquirerBinLength = 6; // please adjust the length based on acquirer BIN Rules",
"generatePartnerServiceId(bin, acquirerBinLength);",
"",
"function generatePartnerServiceId(bin, acquirerBinLength) {",
" let partnerServiceId = bin.trim();",
" if (bin.length < 8) {",
" partnerServiceId = partnerServiceId.substring(0, acquirerBinLength).padStart(8, ' ');",
" } else {",
" partnerServiceId = partnerServiceId.substring(0, 8);",
" }",
" pm.collectionVariables.set(\"partner_service_id\", partnerServiceId);",
"}",
"",
"",
"signRequest(pm.request);",
"",
"function createSignature(rawData, secretKey){",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);",
" console.log(\"secretKey: \" + secretKey);",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8,secretUtf8);",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);",
" return requestSignatureBase64String;",
"}",
"",
"function signRequest(request) {",
"",
" const method = pm.request.method;",
" const path = pm.request.url.getPath();",
" let body = pm.request.body.raw;",
" body = body",
" .replace(\"{{partner_service_id}}\", pm.collectionVariables.get(\"partner_service_id\"))",
" .replace(\"{{invoice_number}}\", pm.collectionVariables.get(\"invoice_number\"))",
" .replace(\"{{expired_date}}\", pm.collectionVariables.get(\"expired_date\"));",
" const accessToken = pm.globals.get(\"snap_access_token_merchant\");",
" ",
" var jsonObject = JSON.parse(body);",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)",
" console.log('minifyJsonObject: ' + minifyJsonObject);",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();",
"",
" const data = `${method}:${path}:${accessToken}:${bodySha256}:${timestamp}`",
" console.log('stringtosign: ' + data);",
"",
" var signatureHash = createSignature(data, secretKey); ",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-PARTNER-ID",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-EXTERNAL-ID",
"value": "{{x_external_id}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
},
{
"key": "Authorization",
"value": "Bearer {{snap_access_token_merchant}}",
"type": "text"
},
{
"key": "CHANNEL-ID",
"value": "VA009",
"description": "http://confluence.doku.com/display/GAT/SNAP+CHANNEL-ID+List",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerServiceId\": \"{{partner_service_id}}\",\r\n \"trxId\": \"{{invoice_number}}\",\r\n \"virtualAccountTrxType\": \"1\",\r\n \"totalAmount\": {\r\n \"value\": \"12500.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"expiredDate\": \"{{expired_date}}\",\r\n \"virtualAccountName\": \"Testing VA\",\r\n \"virtualAccountEmail\": \"testing@doku.com\",\r\n \"virtualAccountPhone\": \"6281200001111\",\r\n \"billDetails\": [\r\n {\r\n \"billCode\": \"01\",\r\n \"billNo\": \"123456789012345678\",\r\n \"billName\": \"Bill A for Jan\",\r\n \"billShortName\": \"Bill A\",\r\n \"billDescription\": {\r\n \"english\": \"Maintenance\",\r\n \"indonesia\": \"Pemeliharaan\"\r\n },\r\n \"billSubCompany\": \"00001\",\r\n \"billAmount\": {\r\n \"value\": \"20000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {}\r\n }\r\n ],\r\n \"freeTexts\": [\r\n {\r\n \"english\": \"Free text\",\r\n \"indonesia\": \"Tulisan bebas\"\r\n }\r\n ],\r\n \"additionalInfo\": {\r\n \"virtualAccountConfig\": {\r\n \"reusableStatus\": true\r\n },\r\n \"deviceId\": \"12345679237\",\r\n \"channel\": \"mobilephone\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bi-snap-va/btn/v1/transfer-va/create-va",
"host": [
"{{url}}"
],
"path": [
"bi-snap-va",
"btn",
"v1",
"transfer-va",
"create-va"
]
},
"description": "List of **virtualAccountTrxType**:\n\n- 1 = C = Closed Payment\n \n- 2 = O = Open Payment\n \n- 3 = I = Partial\n \n- 4 = M = Minimum - Only can be paid once with minimum amount\n \n- 5 = L = Maximum\n \n- 6 = N = Open Minimum - Can be paid multiple with minimum amount\n \n- 7 = X = Open Maximum - Can be paid multiple with cumulative maximum amount\n \n- 8 = V = Bill Variable\n \n- 9 = W = Multi Bill Variable"
},
"response": []
}
]
},
{
"name": "DANAMON SNAP VA",
"item": [
{
"name": "Step 1 - Init KJUR",
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.globals.set(\"jsrsasign-js\", responseBody);",
""
],
"type": "text/javascript"
}
},
{
"listen": "prerequest",
"script": {
"exec": [],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js",
"protocol": "http",
"host": [
"kjur",
"github",
"io"
],
"path": [
"jsrsasign",
"jsrsasign-latest-all-min.js"
]
}
},
"response": []
},
{
"name": "Step 2 - Get Token",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const privateKey = pm.collectionVariables.get(\"private_key\");",
"signRequest(privateKey, clientId);",
"",
"",
"function signRequest(privateKey, clientId) {",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ') ",
" ",
" const data = `${clientId}|${dateIso}`",
" console.log('stringtosign: ' + data);",
" ",
" var signatureLib = new KJUR.crypto.Signature({\"alg\": \"SHA256withRSA\"});",
" signatureLib.init(privateKey);",
" signatureLib.updateString(data);",
" var signatureHash = hex2b64(signatureLib.sign());",
"",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
" pm.collectionVariables.set(\"x_timestamp\", dateIso);",
" pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
"let success = true;",
"",
"try {",
" tests[\"Response has accessToken.\"] = responseBody.has(\"accessToken\");",
" const responseData = JSON.parse(responseBody);",
"",
" const accessToken = responseData.accessToken;",
" tests[\"Response has not null accessToken.\"] = typeof accessToken !== 'undefined';",
" pm.globals.set(\"snap_access_token_merchant\", accessToken);",
"}",
"catch(error) {",
" success = false;",
" console.log(\"Error: \" + JSON.stringify(error));",
"}",
"",
"tests[\"Test successfully done.\"] = success;",
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-CLIENT-KEY",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Step 3 - Create VA (DGPC)",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const date = new Date().toISOString();",
"const timestamp = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"const uniqueId = moment(date).format(\"yyyyMMDDHHmmssSSS\");",
"const externalId = \"RID_\" + uniqueId;",
"const invoiceNumber = \"INV_\" + uniqueId; ",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const secretKey = pm.collectionVariables.get(\"secret_key\");",
"",
"pm.collectionVariables.set(\"x_external_id\", externalId);",
"pm.collectionVariables.set(\"x_timestamp\", timestamp);",
"pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"pm.collectionVariables.set(\"invoice_number\", invoiceNumber);",
"pm.collectionVariables.set(\"expired_date\", moment().add(1, 'hour').format());",
"",
"",
"const bin = pm.collectionVariables.get(\"danamon_dgpc_bin\");",
"const acquirerBinLength = 6; // please adjust the length based on acquirer BIN Rules",
"generatePartnerServiceId(bin, acquirerBinLength);",
"",
"function generatePartnerServiceId(bin, acquirerBinLength) {",
" let partnerServiceId = bin.trim();",
" if (bin.length < 8) {",
" partnerServiceId = partnerServiceId.substring(0, acquirerBinLength).padStart(8, ' ');",
" } else {",
" partnerServiceId = partnerServiceId.substring(0, 8);",
" }",
" pm.collectionVariables.set(\"partner_service_id\", partnerServiceId);",
"}",
"",
"",
"signRequest(pm.request);",
"",
"function createSignature(rawData, secretKey){",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);",
" console.log(\"secretKey: \" + secretKey);",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8,secretUtf8);",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);",
" return requestSignatureBase64String;",
"}",
"",
"function signRequest(request) {",
"",
" const method = pm.request.method;",
" const path = pm.request.url.getPath();",
" let body = pm.request.body.raw;",
" body = body",
" .replace(\"{{partner_service_id}}\", pm.collectionVariables.get(\"partner_service_id\"))",
" .replace(\"{{invoice_number}}\", pm.collectionVariables.get(\"invoice_number\"))",
" .replace(\"{{expired_date}}\", pm.collectionVariables.get(\"expired_date\"));",
" const accessToken = pm.globals.get(\"snap_access_token_merchant\");",
" ",
" var jsonObject = JSON.parse(body);",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)",
" console.log('minifyJsonObject: ' + minifyJsonObject);",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();",
"",
" const data = `${method}:${path}:${accessToken}:${bodySha256}:${timestamp}`",
" console.log('stringtosign: ' + data);",
"",
" var signatureHash = createSignature(data, secretKey); ",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-PARTNER-ID",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-EXTERNAL-ID",
"value": "{{x_external_id}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
},
{
"key": "Authorization",
"value": "Bearer {{snap_access_token_merchant}}",
"type": "text"
},
{
"key": "CHANNEL-ID",
"value": "VA005",
"description": "http://confluence.doku.com/display/GAT/SNAP+CHANNEL-ID+List",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerServiceId\": \"{{partner_service_id}}\",\r\n \"trxId\": \"{{invoice_number}}\",\r\n \"virtualAccountTrxType\": \"1\",\r\n \"totalAmount\": {\r\n \"value\": \"12500.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"expiredDate\": \"{{expired_date}}\",\r\n \"virtualAccountName\": \"Testing VA\",\r\n \"virtualAccountEmail\": \"testing@doku.com\",\r\n \"virtualAccountPhone\": \"6281200001111\",\r\n \"billDetails\": [\r\n {\r\n \"billCode\": \"01\",\r\n \"billNo\": \"123456789012345678\",\r\n \"billName\": \"Bill A for Jan\",\r\n \"billShortName\": \"Bill A\",\r\n \"billDescription\": {\r\n \"english\": \"Maintenance\",\r\n \"indonesia\": \"Pemeliharaan\"\r\n },\r\n \"billSubCompany\": \"00001\",\r\n \"billAmount\": {\r\n \"value\": \"20000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {}\r\n }\r\n ],\r\n \"freeTexts\": [\r\n {\r\n \"english\": \"Free text\",\r\n \"indonesia\": \"Tulisan bebas\"\r\n }\r\n ],\r\n \"additionalInfo\": {\r\n \"virtualAccountConfig\": {\r\n \"reusableStatus\": true\r\n },\r\n \"deviceId\": \"12345679237\",\r\n \"channel\": \"mobilephone\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bi-snap-va/danamon/v1/transfer-va/create-va",
"host": [
"{{url}}"
],
"path": [
"bi-snap-va",
"danamon",
"v1",
"transfer-va",
"create-va"
]
},
"description": "List of **virtualAccountTrxType**:\n\n- 1 = C = Closed Payment\n \n- 2 = O = Open Payment\n \n- 3 = I = Partial\n \n- 4 = M = Minimum - Only can be paid once with minimum amount\n \n- 5 = L = Maximum\n \n- 6 = N = Open Minimum - Can be paid multiple with minimum amount\n \n- 7 = X = Open Maximum - Can be paid multiple with cumulative maximum amount\n \n- 8 = V = Bill Variable\n \n- 9 = W = Multi Bill Variable"
},
"response": []
}
]
},
{
"name": "MANDIRI SNAP VA",
"item": [
{
"name": "Step 1 - Init KJUR",
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.globals.set(\"jsrsasign-js\", responseBody);",
""
],
"type": "text/javascript"
}
},
{
"listen": "prerequest",
"script": {
"exec": [],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js",
"protocol": "http",
"host": [
"kjur",
"github",
"io"
],
"path": [
"jsrsasign",
"jsrsasign-latest-all-min.js"
]
}
},
"response": []
},
{
"name": "Step 2 - Get Token",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const privateKey = pm.collectionVariables.get(\"private_key\");",
"signRequest(privateKey, clientId);",
"",
"",
"function signRequest(privateKey, clientId) {",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ') ",
" ",
" const data = `${clientId}|${dateIso}`",
" console.log('stringtosign: ' + data);",
" ",
" var signatureLib = new KJUR.crypto.Signature({\"alg\": \"SHA256withRSA\"});",
" signatureLib.init(privateKey);",
" signatureLib.updateString(data);",
" var signatureHash = hex2b64(signatureLib.sign());",
"",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
" pm.collectionVariables.set(\"x_timestamp\", dateIso);",
" pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
"let success = true;",
"",
"try {",
" tests[\"Response has accessToken.\"] = responseBody.has(\"accessToken\");",
" const responseData = JSON.parse(responseBody);",
"",
" const accessToken = responseData.accessToken;",
" tests[\"Response has not null accessToken.\"] = typeof accessToken !== 'undefined';",
" pm.globals.set(\"snap_access_token_merchant\", accessToken);",
"}",
"catch(error) {",
" success = false;",
" console.log(\"Error: \" + JSON.stringify(error));",
"}",
"",
"tests[\"Test successfully done.\"] = success;",
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-CLIENT-KEY",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Step 3 - Create VA (DGPC)",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const date = new Date().toISOString();",
"const timestamp = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"const uniqueId = moment(date).format(\"yyyyMMDDHHmmssSSS\");",
"const externalId = \"RID_\" + uniqueId;",
"const invoiceNumber = \"INV_\" + uniqueId; ",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const secretKey = pm.collectionVariables.get(\"secret_key\");",
"",
"pm.collectionVariables.set(\"x_external_id\", externalId);",
"pm.collectionVariables.set(\"x_timestamp\", timestamp);",
"pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"pm.collectionVariables.set(\"invoice_number\", invoiceNumber);",
"pm.collectionVariables.set(\"expired_date\", moment().add(1, 'hour').format());",
"",
"",
"const bin = pm.collectionVariables.get(\"mandiri_dgpc_bin\");",
"const acquirerBinLength = 6; // please adjust the length based on acquirer BIN Rules",
"generatePartnerServiceId(bin, acquirerBinLength);",
"",
"function generatePartnerServiceId(bin, acquirerBinLength) {",
" let partnerServiceId = bin.trim();",
" if (bin.length < 8) {",
" partnerServiceId = partnerServiceId.substring(0, acquirerBinLength).padStart(8, ' ');",
" } else {",
" partnerServiceId = partnerServiceId.substring(0, 8);",
" }",
" pm.collectionVariables.set(\"partner_service_id\", partnerServiceId);",
"}",
"",
"",
"signRequest(pm.request);",
"",
"function createSignature(rawData, secretKey){",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);",
" console.log(\"secretKey: \" + secretKey);",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8,secretUtf8);",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);",
" return requestSignatureBase64String;",
"}",
"",
"function signRequest(request) {",
"",
" const method = pm.request.method;",
" const path = pm.request.url.getPath();",
" let body = pm.request.body.raw;",
" body = body",
" .replace(\"{{partner_service_id}}\", pm.collectionVariables.get(\"partner_service_id\"))",
" .replace(\"{{invoice_number}}\", pm.collectionVariables.get(\"invoice_number\"))",
" .replace(\"{{expired_date}}\", pm.collectionVariables.get(\"expired_date\"));",
" const accessToken = pm.globals.get(\"snap_access_token_merchant\");",
" ",
" var jsonObject = JSON.parse(body);",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)",
" console.log('minifyJsonObject: ' + minifyJsonObject);",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();",
"",
" const data = `${method}:${path}:${accessToken}:${bodySha256}:${timestamp}`",
" console.log('stringtosign: ' + data);",
"",
" var signatureHash = createSignature(data, secretKey); ",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-PARTNER-ID",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-EXTERNAL-ID",
"value": "{{x_external_id}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
},
{
"key": "Authorization",
"value": "Bearer {{snap_access_token_merchant}}",
"type": "text"
},
{
"key": "CHANNEL-ID",
"value": "VA009",
"description": "http://confluence.doku.com/display/GAT/SNAP+CHANNEL-ID+List",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerServiceId\": \"{{partner_service_id}}\",\r\n \"trxId\": \"{{invoice_number}}\",\r\n \"virtualAccountTrxType\": \"1\",\r\n \"totalAmount\": {\r\n \"value\": \"12500.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"expiredDate\": \"{{expired_date}}\",\r\n \"virtualAccountName\": \"Testing VA\",\r\n \"virtualAccountEmail\": \"testing@doku.com\",\r\n \"virtualAccountPhone\": \"6281200001111\",\r\n \"billDetails\": [\r\n {\r\n \"billCode\": \"01\",\r\n \"billNo\": \"123456789012345678\",\r\n \"billName\": \"Bill A for Jan\",\r\n \"billShortName\": \"Bill A\",\r\n \"billDescription\": {\r\n \"english\": \"Maintenance\",\r\n \"indonesia\": \"Pemeliharaan\"\r\n },\r\n \"billSubCompany\": \"00001\",\r\n \"billAmount\": {\r\n \"value\": \"20000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {}\r\n }\r\n ],\r\n \"freeTexts\": [\r\n {\r\n \"english\": \"Free text\",\r\n \"indonesia\": \"Tulisan bebas\"\r\n }\r\n ],\r\n \"additionalInfo\": {\r\n \"virtualAccountConfig\": {\r\n \"reusableStatus\": true\r\n },\r\n \"deviceId\": \"12345679237\",\r\n \"channel\": \"mobilephone\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bi-snap-va/mandiri/v1/transfer-va/create-va",
"host": [
"{{url}}"
],
"path": [
"bi-snap-va",
"mandiri",
"v1",
"transfer-va",
"create-va"
]
},
"description": "List of **virtualAccountTrxType**:\n\n- 1 = C = Closed Payment\n \n- 2 = O = Open Payment\n \n- 3 = I = Partial\n \n- 4 = M = Minimum - Only can be paid once with minimum amount\n \n- 5 = L = Maximum\n \n- 6 = N = Open Minimum - Can be paid multiple with minimum amount\n \n- 7 = X = Open Maximum - Can be paid multiple with cumulative maximum amount\n \n- 8 = V = Bill Variable\n \n- 9 = W = Multi Bill Variable"
},
"response": []
}
]
},
{
"name": "MAYBANK SNAP VA",
"item": [
{
"name": "Step 1 - Init KJUR",
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.globals.set(\"jsrsasign-js\", responseBody);",
""
],
"type": "text/javascript"
}
},
{
"listen": "prerequest",
"script": {
"exec": [],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js",
"protocol": "http",
"host": [
"kjur",
"github",
"io"
],
"path": [
"jsrsasign",
"jsrsasign-latest-all-min.js"
]
}
},
"response": []
},
{
"name": "Step 2 - Get Token",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const privateKey = pm.collectionVariables.get(\"private_key\");",
"signRequest(privateKey, clientId);",
"",
"",
"function signRequest(privateKey, clientId) {",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ') ",
" ",
" const data = `${clientId}|${dateIso}`",
" console.log('stringtosign: ' + data);",
" ",
" var signatureLib = new KJUR.crypto.Signature({\"alg\": \"SHA256withRSA\"});",
" signatureLib.init(privateKey);",
" signatureLib.updateString(data);",
" var signatureHash = hex2b64(signatureLib.sign());",
"",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
" pm.collectionVariables.set(\"x_timestamp\", dateIso);",
" pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
"let success = true;",
"",
"try {",
" tests[\"Response has accessToken.\"] = responseBody.has(\"accessToken\");",
" const responseData = JSON.parse(responseBody);",
"",
" const accessToken = responseData.accessToken;",
" tests[\"Response has not null accessToken.\"] = typeof accessToken !== 'undefined';",
" pm.globals.set(\"snap_access_token_merchant\", accessToken);",
"}",
"catch(error) {",
" success = false;",
" console.log(\"Error: \" + JSON.stringify(error));",
"}",
"",
"tests[\"Test successfully done.\"] = success;",
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-CLIENT-KEY",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Step 3 - Create VA (DGPC)",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const date = new Date().toISOString();",
"const timestamp = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"const uniqueId = moment(date).format(\"yyyyMMDDHHmmssSSS\");",
"const externalId = \"RID_\" + uniqueId;",
"const invoiceNumber = \"INV_\" + uniqueId; ",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const secretKey = pm.collectionVariables.get(\"secret_key\");",
"",
"pm.collectionVariables.set(\"x_external_id\", externalId);",
"pm.collectionVariables.set(\"x_timestamp\", timestamp);",
"pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"pm.collectionVariables.set(\"invoice_number\", invoiceNumber);",
"pm.collectionVariables.set(\"expired_date\", moment().add(1, 'hour').format());",
"",
"",
"const bin = pm.collectionVariables.get(\"maybank_dgpc_bin\");",
"const acquirerBinLength = 6; // please adjust the length based on acquirer BIN Rules",
"generatePartnerServiceId(bin, acquirerBinLength);",
"",
"function generatePartnerServiceId(bin, acquirerBinLength) {",
" let partnerServiceId = bin.trim();",
" if (bin.length < 8) {",
" partnerServiceId = partnerServiceId.substring(0, acquirerBinLength).padStart(8, ' ');",
" } else {",
" partnerServiceId = partnerServiceId.substring(0, 8);",
" }",
" pm.collectionVariables.set(\"partner_service_id\", partnerServiceId);",
"}",
"",
"",
"signRequest(pm.request);",
"",
"function createSignature(rawData, secretKey){",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);",
" console.log(\"secretKey: \" + secretKey);",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8,secretUtf8);",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);",
" return requestSignatureBase64String;",
"}",
"",
"function signRequest(request) {",
"",
" const method = pm.request.method;",
" const path = pm.request.url.getPath();",
" let body = pm.request.body.raw;",
" body = body",
" .replace(\"{{partner_service_id}}\", pm.collectionVariables.get(\"partner_service_id\"))",
" .replace(\"{{invoice_number}}\", pm.collectionVariables.get(\"invoice_number\"))",
" .replace(\"{{expired_date}}\", pm.collectionVariables.get(\"expired_date\"));",
" const accessToken = pm.globals.get(\"snap_access_token_merchant\");",
" ",
" var jsonObject = JSON.parse(body);",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)",
" console.log('minifyJsonObject: ' + minifyJsonObject);",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();",
"",
" const data = `${method}:${path}:${accessToken}:${bodySha256}:${timestamp}`",
" console.log('stringtosign: ' + data);",
"",
" var signatureHash = createSignature(data, secretKey); ",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-PARTNER-ID",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-EXTERNAL-ID",
"value": "{{x_external_id}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
},
{
"key": "Authorization",
"value": "Bearer {{snap_access_token_merchant}}",
"type": "text"
},
{
"key": "CHANNEL-ID",
"value": "VA009",
"description": "http://confluence.doku.com/display/GAT/SNAP+CHANNEL-ID+List",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerServiceId\": \"{{partner_service_id}}\",\r\n \"trxId\": \"{{invoice_number}}\",\r\n \"virtualAccountTrxType\": \"1\",\r\n \"totalAmount\": {\r\n \"value\": \"12500.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"expiredDate\": \"{{expired_date}}\",\r\n \"virtualAccountName\": \"Testing VA\",\r\n \"virtualAccountEmail\": \"testing@doku.com\",\r\n \"virtualAccountPhone\": \"6281200001111\",\r\n \"billDetails\": [\r\n {\r\n \"billCode\": \"01\",\r\n \"billNo\": \"123456789012345678\",\r\n \"billName\": \"Bill A for Jan\",\r\n \"billShortName\": \"Bill A\",\r\n \"billDescription\": {\r\n \"english\": \"Maintenance\",\r\n \"indonesia\": \"Pemeliharaan\"\r\n },\r\n \"billSubCompany\": \"00001\",\r\n \"billAmount\": {\r\n \"value\": \"20000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {}\r\n }\r\n ],\r\n \"freeTexts\": [\r\n {\r\n \"english\": \"Free text\",\r\n \"indonesia\": \"Tulisan bebas\"\r\n }\r\n ],\r\n \"additionalInfo\": {\r\n \"virtualAccountConfig\": {\r\n \"reusableStatus\": true\r\n },\r\n \"deviceId\": \"12345679237\",\r\n \"channel\": \"mobilephone\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bi-snap-va/maybank/v1/transfer-va/create-va",
"host": [
"{{url}}"
],
"path": [
"bi-snap-va",
"maybank",
"v1",
"transfer-va",
"create-va"
]
},
"description": "List of **virtualAccountTrxType**:\n\n- 1 = C = Closed Payment\n \n- 2 = O = Open Payment\n \n- 3 = I = Partial\n \n- 4 = M = Minimum - Only can be paid once with minimum amount\n \n- 5 = L = Maximum\n \n- 6 = N = Open Minimum - Can be paid multiple with minimum amount\n \n- 7 = X = Open Maximum - Can be paid multiple with cumulative maximum amount\n \n- 8 = V = Bill Variable\n \n- 9 = W = Multi Bill Variable"
},
"response": []
}
]
},
{
"name": "PERMATA SNAP VA",
"item": [
{
"name": "Step 1 - Init KJUR",
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.globals.set(\"jsrsasign-js\", responseBody);",
""
],
"type": "text/javascript"
}
},
{
"listen": "prerequest",
"script": {
"exec": [],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js",
"protocol": "http",
"host": [
"kjur",
"github",
"io"
],
"path": [
"jsrsasign",
"jsrsasign-latest-all-min.js"
]
}
},
"response": []
},
{
"name": "Step 2 - Get Token",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const privateKey = pm.collectionVariables.get(\"private_key\");",
"signRequest(privateKey, clientId);",
"",
"",
"function signRequest(privateKey, clientId) {",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ') ",
" ",
" const data = `${clientId}|${dateIso}`",
" console.log('stringtosign: ' + data);",
" ",
" var signatureLib = new KJUR.crypto.Signature({\"alg\": \"SHA256withRSA\"});",
" signatureLib.init(privateKey);",
" signatureLib.updateString(data);",
" var signatureHash = hex2b64(signatureLib.sign());",
"",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
" pm.collectionVariables.set(\"x_timestamp\", dateIso);",
" pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
"let success = true;",
"",
"try {",
" tests[\"Response has accessToken.\"] = responseBody.has(\"accessToken\");",
" const responseData = JSON.parse(responseBody);",
"",
" const accessToken = responseData.accessToken;",
" tests[\"Response has not null accessToken.\"] = typeof accessToken !== 'undefined';",
" pm.globals.set(\"snap_access_token_merchant\", accessToken);",
"}",
"catch(error) {",
" success = false;",
" console.log(\"Error: \" + JSON.stringify(error));",
"}",
"",
"tests[\"Test successfully done.\"] = success;",
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-CLIENT-KEY",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Step 3 - Create VA (DGPC)",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const date = new Date().toISOString();",
"const timestamp = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"const uniqueId = moment(date).format(\"yyyyMMDDHHmmssSSS\");",
"const externalId = \"RID_\" + uniqueId;",
"const invoiceNumber = \"INV_\" + uniqueId; ",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const secretKey = pm.collectionVariables.get(\"secret_key\");",
"",
"pm.collectionVariables.set(\"x_external_id\", externalId);",
"pm.collectionVariables.set(\"x_timestamp\", timestamp);",
"pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"pm.collectionVariables.set(\"invoice_number\", invoiceNumber);",
"pm.collectionVariables.set(\"expired_date\", moment().add(1, 'hour').format());",
"",
"",
"const bin = pm.collectionVariables.get(\"permata_dgpc_bin\");",
"const acquirerBinLength = 6; // please adjust the length based on acquirer BIN Rules",
"generatePartnerServiceId(bin, acquirerBinLength);",
"",
"function generatePartnerServiceId(bin, acquirerBinLength) {",
" let partnerServiceId = bin.trim();",
" if (bin.length < 8) {",
" partnerServiceId = partnerServiceId.substring(0, acquirerBinLength).padStart(8, ' ');",
" } else {",
" partnerServiceId = partnerServiceId.substring(0, 8);",
" }",
" pm.collectionVariables.set(\"partner_service_id\", partnerServiceId);",
"}",
"",
"",
"signRequest(pm.request);",
"",
"function createSignature(rawData, secretKey){",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);",
" console.log(\"secretKey: \" + secretKey);",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8,secretUtf8);",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);",
" return requestSignatureBase64String;",
"}",
"",
"function signRequest(request) {",
"",
" const method = pm.request.method;",
" const path = pm.request.url.getPath();",
" let body = pm.request.body.raw;",
" body = body",
" .replace(\"{{partner_service_id}}\", pm.collectionVariables.get(\"partner_service_id\"))",
" .replace(\"{{invoice_number}}\", pm.collectionVariables.get(\"invoice_number\"))",
" .replace(\"{{expired_date}}\", pm.collectionVariables.get(\"expired_date\"));",
" const accessToken = pm.globals.get(\"snap_access_token_merchant\");",
" ",
" var jsonObject = JSON.parse(body);",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)",
" console.log('minifyJsonObject: ' + minifyJsonObject);",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();",
"",
" const data = `${method}:${path}:${accessToken}:${bodySha256}:${timestamp}`",
" console.log('stringtosign: ' + data);",
"",
" var signatureHash = createSignature(data, secretKey); ",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-PARTNER-ID",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-EXTERNAL-ID",
"value": "{{x_external_id}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
},
{
"key": "Authorization",
"value": "Bearer {{snap_access_token_merchant}}",
"type": "text"
},
{
"key": "CHANNEL-ID",
"value": "VA007",
"description": "http://confluence.doku.com/display/GAT/SNAP+CHANNEL-ID+List",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerServiceId\": \"{{partner_service_id}}\",\r\n \"trxId\": \"{{invoice_number}}\",\r\n \"virtualAccountTrxType\": \"1\",\r\n \"totalAmount\": {\r\n \"value\": \"12500.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"expiredDate\": \"{{expired_date}}\",\r\n \"virtualAccountName\": \"Testing VA\",\r\n \"virtualAccountEmail\": \"testing@doku.com\",\r\n \"virtualAccountPhone\": \"6281200001111\",\r\n \"billDetails\": [\r\n {\r\n \"billCode\": \"01\",\r\n \"billNo\": \"123456789012345678\",\r\n \"billName\": \"Bill A for Jan\",\r\n \"billShortName\": \"Bill A\",\r\n \"billDescription\": {\r\n \"english\": \"Maintenance\",\r\n \"indonesia\": \"Pemeliharaan\"\r\n },\r\n \"billSubCompany\": \"00001\",\r\n \"billAmount\": {\r\n \"value\": \"20000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {}\r\n }\r\n ],\r\n \"freeTexts\": [\r\n {\r\n \"english\": \"Free text\",\r\n \"indonesia\": \"Tulisan bebas\"\r\n }\r\n ],\r\n \"additionalInfo\": {\r\n \"virtualAccountConfig\": {\r\n \"reusableStatus\": true\r\n },\r\n \"deviceId\": \"12345679237\",\r\n \"channel\": \"mobilephone\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bi-snap-va/permata/v1/transfer-va/create-va",
"host": [
"{{url}}"
],
"path": [
"bi-snap-va",
"permata",
"v1",
"transfer-va",
"create-va"
]
},
"description": "List of **virtualAccountTrxType**:\n\n- 1 = C = Closed Payment\n \n- 2 = O = Open Payment\n \n- 3 = I = Partial\n \n- 4 = M = Minimum - Only can be paid once with minimum amount\n \n- 5 = L = Maximum\n \n- 6 = N = Open Minimum - Can be paid multiple with minimum amount\n \n- 7 = X = Open Maximum - Can be paid multiple with cumulative maximum amount\n \n- 8 = V = Bill Variable\n \n- 9 = W = Multi Bill Variable"
},
"response": []
}
]
},
{
"name": "SINARMAS SNAP VA",
"item": [
{
"name": "Step 1 - Init KJUR",
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.globals.set(\"jsrsasign-js\", responseBody);",
""
],
"type": "text/javascript"
}
},
{
"listen": "prerequest",
"script": {
"exec": [],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js",
"protocol": "http",
"host": [
"kjur",
"github",
"io"
],
"path": [
"jsrsasign",
"jsrsasign-latest-all-min.js"
]
}
},
"response": []
},
{
"name": "Step 2 - Get Token",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const privateKey = pm.collectionVariables.get(\"private_key\");",
"signRequest(privateKey, clientId);",
"",
"",
"function signRequest(privateKey, clientId) {",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ') ",
" ",
" const data = `${clientId}|${dateIso}`",
" console.log('stringtosign: ' + data);",
" ",
" var signatureLib = new KJUR.crypto.Signature({\"alg\": \"SHA256withRSA\"});",
" signatureLib.init(privateKey);",
" signatureLib.updateString(data);",
" var signatureHash = hex2b64(signatureLib.sign());",
"",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
" pm.collectionVariables.set(\"x_timestamp\", dateIso);",
" pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
"let success = true;",
"",
"try {",
" tests[\"Response has accessToken.\"] = responseBody.has(\"accessToken\");",
" const responseData = JSON.parse(responseBody);",
"",
" const accessToken = responseData.accessToken;",
" tests[\"Response has not null accessToken.\"] = typeof accessToken !== 'undefined';",
" pm.globals.set(\"snap_access_token_merchant\", accessToken);",
"}",
"catch(error) {",
" success = false;",
" console.log(\"Error: \" + JSON.stringify(error));",
"}",
"",
"tests[\"Test successfully done.\"] = success;",
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-CLIENT-KEY",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Step 3 - Create VA (DGPC)",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const date = new Date().toISOString();",
"const timestamp = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"const uniqueId = moment(date).format(\"yyyyMMDDHHmmssSSS\");",
"const externalId = \"RID_\" + uniqueId;",
"const invoiceNumber = \"INV_\" + uniqueId; ",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const secretKey = pm.collectionVariables.get(\"secret_key\");",
"",
"pm.collectionVariables.set(\"x_external_id\", externalId);",
"pm.collectionVariables.set(\"x_timestamp\", timestamp);",
"pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"pm.collectionVariables.set(\"invoice_number\", invoiceNumber);",
"pm.collectionVariables.set(\"expired_date\", moment().add(1, 'hour').format());",
"",
"",
"const bin = pm.collectionVariables.get(\"sinarmas_dgpc_bin\");",
"const acquirerBinLength = 6; // please adjust the length based on acquirer BIN Rules",
"generatePartnerServiceId(bin, acquirerBinLength);",
"",
"function generatePartnerServiceId(bin, acquirerBinLength) {",
" let partnerServiceId = bin.trim();",
" if (bin.length < 8) {",
" partnerServiceId = partnerServiceId.substring(0, acquirerBinLength).padStart(8, ' ');",
" } else {",
" partnerServiceId = partnerServiceId.substring(0, 8);",
" }",
" pm.collectionVariables.set(\"partner_service_id\", partnerServiceId);",
"}",
"",
"",
"signRequest(pm.request);",
"",
"function createSignature(rawData, secretKey){",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);",
" console.log(\"secretKey: \" + secretKey);",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8,secretUtf8);",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);",
" return requestSignatureBase64String;",
"}",
"",
"function signRequest(request) {",
"",
" const method = pm.request.method;",
" const path = pm.request.url.getPath();",
" let body = pm.request.body.raw;",
" body = body",
" .replace(\"{{partner_service_id}}\", pm.collectionVariables.get(\"partner_service_id\"))",
" .replace(\"{{invoice_number}}\", pm.collectionVariables.get(\"invoice_number\"))",
" .replace(\"{{expired_date}}\", pm.collectionVariables.get(\"expired_date\"));",
" const accessToken = pm.globals.get(\"snap_access_token_merchant\");",
" ",
" var jsonObject = JSON.parse(body);",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)",
" console.log('minifyJsonObject: ' + minifyJsonObject);",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();",
"",
" const data = `${method}:${path}:${accessToken}:${bodySha256}:${timestamp}`",
" console.log('stringtosign: ' + data);",
"",
" var signatureHash = createSignature(data, secretKey); ",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-PARTNER-ID",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-EXTERNAL-ID",
"value": "{{x_external_id}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
},
{
"key": "Authorization",
"value": "Bearer {{snap_access_token_merchant}}",
"type": "text"
},
{
"key": "CHANNEL-ID",
"value": "VA012",
"description": "http://confluence.doku.com/display/GAT/SNAP+CHANNEL-ID+List",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerServiceId\": \"{{partner_service_id}}\",\r\n \"trxId\": \"{{invoice_number}}\",\r\n \"virtualAccountTrxType\": \"1\",\r\n \"totalAmount\": {\r\n \"value\": \"12500.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"expiredDate\": \"{{expired_date}}\",\r\n \"virtualAccountName\": \"Testing VA\",\r\n \"virtualAccountEmail\": \"testing@doku.com\",\r\n \"virtualAccountPhone\": \"6281200001111\",\r\n \"billDetails\": [\r\n {\r\n \"billCode\": \"01\",\r\n \"billNo\": \"123456789012345678\",\r\n \"billName\": \"Bill A for Jan\",\r\n \"billShortName\": \"Bill A\",\r\n \"billDescription\": {\r\n \"english\": \"Maintenance\",\r\n \"indonesia\": \"Pemeliharaan\"\r\n },\r\n \"billSubCompany\": \"00001\",\r\n \"billAmount\": {\r\n \"value\": \"20000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {}\r\n }\r\n ],\r\n \"freeTexts\": [\r\n {\r\n \"english\": \"Free text\",\r\n \"indonesia\": \"Tulisan bebas\"\r\n }\r\n ],\r\n \"additionalInfo\": {\r\n \"virtualAccountConfig\": {\r\n \"reusableStatus\": true\r\n },\r\n \"deviceId\": \"12345679237\",\r\n \"channel\": \"mobilephone\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bi-snap-va/sinarmas/v1/transfer-va/create-va",
"host": [
"{{url}}"
],
"path": [
"bi-snap-va",
"sinarmas",
"v1",
"transfer-va",
"create-va"
]
},
"description": "List of **virtualAccountTrxType**:\n\n- 1 = C = Closed Payment\n \n- 2 = O = Open Payment\n \n- 3 = I = Partial\n \n- 4 = M = Minimum - Only can be paid once with minimum amount\n \n- 5 = L = Maximum\n \n- 6 = N = Open Minimum - Can be paid multiple with minimum amount\n \n- 7 = X = Open Maximum - Can be paid multiple with cumulative maximum amount\n \n- 8 = V = Bill Variable\n \n- 9 = W = Multi Bill Variable"
},
"response": []
}
]
},
{
"name": "CIMB SNAP VA",
"item": [
{
"name": "Step 1 - Init KJUR",
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.globals.set(\"jsrsasign-js\", responseBody);",
""
],
"type": "text/javascript"
}
},
{
"listen": "prerequest",
"script": {
"exec": [],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js",
"protocol": "http",
"host": [
"kjur",
"github",
"io"
],
"path": [
"jsrsasign",
"jsrsasign-latest-all-min.js"
]
}
},
"response": []
},
{
"name": "Step 2 - Get Token",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const privateKey = pm.collectionVariables.get(\"private_key\");",
"signRequest(privateKey, clientId);",
"",
"",
"function signRequest(privateKey, clientId) {",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ') ",
" ",
" const data = `${clientId}|${dateIso}`",
" console.log('stringtosign: ' + data);",
" ",
" var signatureLib = new KJUR.crypto.Signature({\"alg\": \"SHA256withRSA\"});",
" signatureLib.init(privateKey);",
" signatureLib.updateString(data);",
" var signatureHash = hex2b64(signatureLib.sign());",
"",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
" pm.collectionVariables.set(\"x_timestamp\", dateIso);",
" pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
"let success = true;",
"",
"try {",
" tests[\"Response has accessToken.\"] = responseBody.has(\"accessToken\");",
" const responseData = JSON.parse(responseBody);",
"",
" const accessToken = responseData.accessToken;",
" tests[\"Response has not null accessToken.\"] = typeof accessToken !== 'undefined';",
" pm.globals.set(\"snap_access_token_merchant\", accessToken);",
"}",
"catch(error) {",
" success = false;",
" console.log(\"Error: \" + JSON.stringify(error));",
"}",
"",
"tests[\"Test successfully done.\"] = success;",
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-CLIENT-KEY",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Step 3 - Create VA (DGPC)",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(pm.globals.get(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const date = new Date().toISOString();",
"const timestamp = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"const uniqueId = moment(date).format(\"yyyyMMDDHHmmssSSS\");",
"const externalId = \"RID_\" + uniqueId;",
"const invoiceNumber = \"INV_\" + uniqueId; ",
"",
"const clientId = pm.collectionVariables.get(\"client_id\");",
"const secretKey = pm.collectionVariables.get(\"secret_key\");",
"",
"pm.collectionVariables.set(\"x_external_id\", externalId);",
"pm.collectionVariables.set(\"x_timestamp\", timestamp);",
"pm.collectionVariables.set(\"x_client_key\", clientId);",
"",
"pm.collectionVariables.set(\"invoice_number\", invoiceNumber);",
"pm.collectionVariables.set(\"expired_date\", moment().add(1, 'hour').format());",
"",
"",
"const bin = pm.collectionVariables.get(\"cimb_dgpc_bin\");",
"const acquirerBinLength = 6; // please adjust the length based on acquirer BIN Rules",
"generatePartnerServiceId(bin, acquirerBinLength);",
"",
"function generatePartnerServiceId(bin, acquirerBinLength) {",
" let partnerServiceId = bin.trim();",
" if (bin.length < 8) {",
" partnerServiceId = partnerServiceId.substring(0, acquirerBinLength).padStart(8, ' ');",
" } else {",
" partnerServiceId = partnerServiceId.substring(0, 8);",
" }",
" pm.collectionVariables.set(\"partner_service_id\", partnerServiceId);",
"}",
"",
"",
"signRequest(pm.request);",
"",
"function createSignature(rawData, secretKey){",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);",
" console.log(\"secretKey: \" + secretKey);",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8,secretUtf8);",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);",
" return requestSignatureBase64String;",
"}",
"",
"function signRequest(request) {",
"",
" const method = pm.request.method;",
" const path = pm.request.url.getPath();",
" let body = pm.request.body.raw;",
" body = body",
" .replace(\"{{partner_service_id}}\", pm.collectionVariables.get(\"partner_service_id\"))",
" .replace(\"{{invoice_number}}\", pm.collectionVariables.get(\"invoice_number\"))",
" .replace(\"{{expired_date}}\", pm.collectionVariables.get(\"expired_date\"));",
" const accessToken = pm.globals.get(\"snap_access_token_merchant\");",
" ",
" var jsonObject = JSON.parse(body);",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)",
" console.log('minifyJsonObject: ' + minifyJsonObject);",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();",
"",
" const data = `${method}:${path}:${accessToken}:${bodySha256}:${timestamp}`",
" console.log('stringtosign: ' + data);",
"",
" var signatureHash = createSignature(data, secretKey); ",
" pm.collectionVariables.set(\"x_signature\", signatureHash);",
"}"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "X-PARTNER-ID",
"value": "{{x_client_key}}",
"type": "text"
},
{
"key": "X-EXTERNAL-ID",
"value": "{{x_external_id}}",
"type": "text"
},
{
"key": "X-TIMESTAMP",
"value": "{{x_timestamp}}",
"type": "text"
},
{
"key": "X-SIGNATURE",
"value": "{{x_signature}}",
"type": "text"
},
{
"key": "Authorization",
"value": "Bearer {{snap_access_token_merchant}}",
"type": "text"
},
{
"key": "CHANNEL-ID",
"value": "VA011",
"description": "http://confluence.doku.com/display/GAT/SNAP+CHANNEL-ID+List",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerServiceId\": \"{{partner_service_id}}\",\r\n \"trxId\": \"{{invoice_number}}\",\r\n \"virtualAccountTrxType\": \"1\",\r\n \"totalAmount\": {\r\n \"value\": \"12500.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"expiredDate\": \"{{expired_date}}\",\r\n \"virtualAccountName\": \"Testing VA\",\r\n \"virtualAccountEmail\": \"testing@doku.com\",\r\n \"virtualAccountPhone\": \"6281200001111\",\r\n \"billDetails\": [\r\n {\r\n \"billCode\": \"01\",\r\n \"billNo\": \"123456789012345678\",\r\n \"billName\": \"Bill A for Jan\",\r\n \"billShortName\": \"Bill A\",\r\n \"billDescription\": {\r\n \"english\": \"Maintenance\",\r\n \"indonesia\": \"Pemeliharaan\"\r\n },\r\n \"billSubCompany\": \"00001\",\r\n \"billAmount\": {\r\n \"value\": \"20000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {}\r\n }\r\n ],\r\n \"freeTexts\": [\r\n {\r\n \"english\": \"Free text\",\r\n \"indonesia\": \"Tulisan bebas\"\r\n }\r\n ],\r\n \"additionalInfo\": {\r\n \"virtualAccountConfig\": {\r\n \"reusableStatus\": true\r\n },\r\n \"deviceId\": \"12345679237\",\r\n \"channel\": \"mobilephone\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bi-snap-va/cimb/v1/transfer-va/create-va",
"host": [
"{{url}}"
],
"path": [
"bi-snap-va",
"cimb",
"v1",
"transfer-va",
"create-va"
]
},
"description": "List of **virtualAccountTrxType**:\n\n- 1 = C = Closed Payment\n \n- 2 = O = Open Payment\n \n- 3 = I = Partial\n \n- 4 = M = Minimum - Only can be paid once with minimum amount\n \n- 5 = L = Maximum\n \n- 6 = N = Open Minimum - Can be paid multiple with minimum amount\n \n- 7 = X = Open Maximum - Can be paid multiple with cumulative maximum amount\n \n- 8 = V = Bill Variable\n \n- 9 = W = Multi Bill Variable"
},
"response": []
}
]
}
]
}
]
},
{
"name": "O2O",
"item": [
{
"name": "Alfa Group",
"item": [
{
"name": "Alfa - Generate Payment Code",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/alfa-online-to-offline/v2/payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-{{$timestamp}}\",\n \"amount\": 150000\n },\n \"online_to_offline_info\": {\n \"expired_time\": 60,\n \"reusable_status\": false,\n \"info\": \"Online Shoping Store\"\n },\n \"customer\": {\n \"name\": \"Taufik Ismail\",\n \"email\": \"taufik@doku.com\"\n },\n \"alfa_info\": {\n \"receipt\": {\n \"footer_message\": \"Call Center 021 555-0525\"\n }\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/alfa-online-to-offline/v2/payment-code",
"host": [
"{{url}}"
],
"path": [
"alfa-online-to-offline",
"v2",
"payment-code"
]
}
},
"response": []
},
{
"name": "Indomaret - Generate Payment Code Copy",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/indomaret-online-to-offline/v2/payment-code' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-{{$timestamp}}\",\n \"amount\": 150000\n },\n \"online_to_offline_info\": {\n \"expired_time\": 60,\n \"reusable_status\": false,\n \"info\": \"Online Shoping Store\"\n },\n \"customer\": {\n \"name\": \"Taufik Ismail\",\n \"email\": \"taufik@doku.com\"\n },\n \"alfa_info\": {\n \"receipt\": {\n \"footer_message\": \"Call Center 021 555-0525\"\n }\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/indomaret-online-to-offline/v2/payment-code",
"host": [
"{{url}}"
],
"path": [
"indomaret-online-to-offline",
"v2",
"payment-code"
]
}
},
"response": []
}
]
}
]
},
{
"name": "E-Money",
"item": [
{
"name": "OVO",
"item": [
{
"name": "OVO - Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"function check_sum(jsonBody) {\r",
"var body = JSON.parse(jsonBody);\r",
"var key = pm.variables.get(\"secret_key\"); // Change with your Secret Key\r",
"\r",
"signatureComponents = \r",
"body.order.amount\r",
"+ body.ovo_payment.approval_code\r",
"+ body.ovo_payment.batch_number\r",
"+ body.client.id\r",
"+ body.order.invoice_number\r",
"+ body.ovo_info.ovo_id\r",
"+ body.ovo_payment.reference_number\r",
"+ body.ovo_payment.trace_number\r",
"+ key\r",
"\r",
"var signature = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(signatureComponents));\r",
"console.log('Komponen signature: ' + signatureComponents)\r",
"console.log('Signature: ' + signature)\r",
"return signature;\r",
"}\r",
"postman.setEnvironmentVariable('check_sum', check_sum(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"protocolProfileBehavior": {
"disabledSystemHeaders": {}
},
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "text/plain",
"type": "text",
"disabled": true
},
{
"key": "Authorization",
"value": "Basic YWRtaW46cGFzc3dvcmQ=",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"client\": {\r\n \"id\": \"{{client_id}}\"\r\n },\r\n \"order\": {\r\n \"invoice_number\":\"INV-20210303-00123\",\r\n \"amount\": 15000\r\n },\r\n \"ovo_info\": {\r\n \"ovo_id\":\"081211111111\"\r\n },\r\n \"security\":{\r\n \"check_sum\":\"{{check_sum}}\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/ovo-emoney/v1/payment",
"host": [
"{{url}}"
],
"path": [
"ovo-emoney",
"v1",
"payment"
]
}
},
"response": []
},
{
"name": "OVO - Void",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"function check_sum(jsonBody) {\r",
"var body = JSON.parse(jsonBody)\r",
"var key = pm.variables.get(\"secret_key\");\r",
"var client_id = pm.variables.get(\"client_id\");\r",
"\r",
"signatureComponents = \r",
"body.order.amount\r",
"+ body.ovo_payment.approval_code\r",
"+ body.ovo_payment.batch_number\r",
"+ client_id\r",
"+ body.order.invoice_number\r",
"+ body.ovo_info.ovo_id\r",
"+ body.ovo_payment.reference_number\r",
"+ body.ovo_payment.trace_number\r",
"+ key\r",
"\r",
"var signature = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(signatureComponents));\r",
"console.log('Komponen signature: ' + signatureComponents)\r",
"console.log('Signature: ' + signature)\r",
"return signature;\r",
"}\r",
"postman.setEnvironmentVariable('check_sum', check_sum(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"protocolProfileBehavior": {
"disabledSystemHeaders": {}
},
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "text/plain",
"type": "text",
"disabled": true
},
{
"key": "Authorization",
"value": "Basic YWRtaW46cGFzc3dvcmQ=",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\r\n \"client\": {\r\n \"id\": \"{{client_id}}\"\r\n },\r\n \"order\": {\r\n \"invoice_number\": \"INV-20210303-001234-test11\",\r\n \"amount\": 15000\r\n },\r\n \"ovo_info\": {\r\n \"ovo_id\": \"081211111111\"\r\n },\r\n \"ovo_payment\": {\r\n \"batch_number\": 500,\r\n \"trace_number\": 4451979,\r\n \"reference_number\": 12,\r\n \"approval_code\": \"2404983\"\r\n },\r\n \"security\": {\r\n \"check_sum\": \"{{check_sum}}\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/ovo-emoney/v1/cancel",
"host": [
"{{url}}"
],
"path": [
"ovo-emoney",
"v1",
"cancel"
]
}
},
"response": []
}
]
},
{
"name": "Shopee Pay",
"item": [
{
"name": "Shopee Pay - Create Order",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/shopeepay-emoney/v2/order' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"invoice_number\": \"INV-{{$timestamp}}\",\n \"amount\": 150000\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/shopeepay-emoney/v2/order",
"host": [
"{{url}}"
],
"path": [
"shopeepay-emoney",
"v2",
"order"
]
}
},
"response": []
}
]
}
]
},
{
"name": "Direct Debit",
"item": [
{
"name": "BRI Direct Debit",
"item": [
{
"name": "Register Card - Create Token",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/direct-debit/v1/token' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"acquirer\": { \n \"id\":\"BRI\"\n },\n \"customer\": {\n \"id\": \"CUST-{{$timestamp}}\",\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\",\n \"phone\": \"62811223344\",\n \"id_card\": \"36032123123123\",\n \"country\": \"ID\",\n \"address\": \"Menara Mulia Lantai 8\",\n \"date_of_birth\": \"02-02-1996\"\n },\n \"debit_card\": {\n \"account_email\": \"wtda@mail.com\",\n \"account_mobile_phone\": \"6281394130621\",\n \"card_expiry\": \"0525\",\n \"card_last_four\": \"8224\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/v1/token",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"v1",
"token"
]
}
},
"response": []
},
{
"name": "Register Card - Validate OTP",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/direct-debit/v1/token/validate' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"debit_card\": {\n \"token_id\": \"TOK_KEQYWDR7GSUMB5IOK6OJFVTBNCKAFW6O::062110:17:15.704\",\n \"otp\": \"999999\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/v1/token/validate",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"v1",
"token",
"validate"
]
}
},
"response": []
},
{
"name": "Register Card - Resend OTP",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/direct-debit/v1/token-otp' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"channel\": {\n \"id\":\"DIRECT_DEBIT\"\n },\n \"acquirer\": {\n \"id\":\"BRI\"\n },\n \"debit_card\": {\n \"token_id\":\"TOK_MKZTIFPRLLDPIBH5BJNZWFUV4WE2ZO56::062116:56:56.355\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/v1/token-otp",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"v1",
"token-otp"
]
}
},
"response": []
},
{
"name": "Get Card List",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/direct-debit/v1/tokens' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"customer\": {\n \"id\": \"CUST-123123123\",\n \"name\": \"Anton Budiman\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/v1/tokens",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"v1",
"tokens"
]
}
},
"response": []
},
{
"name": "Payment - Create Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/direct-debit/v1/payment' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"channel\": {\n \"id\": \"DIRECT_DEBIT\"\n },\n \"acquirer\": {\n \"id\": \"BRI\"\n },\n \"customer\": {\n \"id\": \"CUST-123123123\",\n \"name\": \"Anton Budiman\"\n },\n \"order\": {\n \"invoice_number\": \"INV-{{$timestamp}}\",\n \"line_items\": [\n {\n \"name\": \"DOKU T-Shirt Black\",\n \"price\": 100000,\n \"quantity\" : 1\n },\n {\n \"name\": \"DOKU T-Shirt Red\",\n \"price\": 150000,\n \"quantity\" : 2\n }\n ],\n \"amount\": 400000\n },\n \"payment\": {\n \"token_id\": \"TOK_OMCSBRGQT3P7KPCYQ26BSFH4JBLSIKLK::062108:41:41.496\",\n \"otp_expiration_timestamp\": 360010\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/v1/payment",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"v1",
"payment"
]
}
},
"response": []
},
{
"name": "Payment - Validate OTP",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/direct-debit/v1/payment/validate' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"channel\":{\n \"id\":\"DIRECT_DEBIT\"\n },\n \"acquirer\":{\n \"id\":\"BRI\"\n },\n \"payment\":{\n \"token\":\"bzSvaFgw9g07C6VFWlkEhEQVDMEqUwE9YfjY5EM1lCI=\",\n \"otp\":\"999999\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/v1/payment/validate",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"v1",
"payment",
"validate"
]
}
},
"response": []
},
{
"name": "Payment - Resend OTP",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/direct-debit/v1/payment-otp' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"channel\": {\n \"id\":\"DIRECT_DEBIT\"\n },\n \"acquirer\": {\n \"id\":\"BRI\"\n },\n \"payment\": {\n \"token\":\"uJytoKwQQ6iSgpo6wPvTuLsZQrjToz/+9X6pITHSA0o=\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/v1/payment-otp",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"v1",
"payment-otp"
]
}
},
"response": []
},
{
"name": "Payment - Create Recurring Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/direct-debit/v1/payment-recurring' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
},
{
"listen": "test",
"script": {
"exec": [
"pm.test(\"Status code is 201\", function(){",
" pm.response.to.have.status(201);",
"});"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"channel\": {\n \"id\": \"DIRECT_DEBIT\"\n },\n \"acquirer\": {\n \"id\": \"BRI\"\n },\n \"customer\": {\n \"id\": \"CUST-123123123\",\n \"name\": \"Anton Budiman\"\n },\n \"order\": {\n \"invoice_number\": \"INV-{{$timestamp}}\",\n \"line_items\": [\n {\n \"name\": \"DOKU T-Shirt Black\",\n \"price\": 100000,\n \"quantity\" : 1\n },\n {\n \"name\": \"DOKU T-Shirt Red\",\n \"price\": 150000,\n \"quantity\" : 2\n }\n ],\n \"amount\": 400000\n },\n \"payment\": {\n \"token_id\": \"TOK_WMBD4E7ETDYVUEHNK4NEZFQP2WVQFCTQ::062115:41:36.718\",\n \"otp_expiration_timestamp\": 360010\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/v1/payment-recurring",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"v1",
"payment-recurring"
]
}
},
"response": []
},
{
"name": "Delete Card",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/direct-debit/v1/token-delete' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"customer\": {\n \"id\": \"CUST-123123\",\n \"name\": \"Anton Budiman\"\n },\n \"debit_card\": {\n \"token_id\": \"TOK_WMBD4E7ETDYVUEHNK4NEZFQP2WVQFCTQ::062115:41:36.718\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/v1/token-delete",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"v1",
"token-delete"
]
}
},
"response": []
}
]
},
{
"name": "OVO Snap Direct Debit",
"item": [
{
"name": "Get Token B2B",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const privateKey = pm.variables.get(\"private_key\");",
"const clientId = pm.variables.get(\"client_id\");",
"signRequest(privateKey, clientId);",
"",
"function signRequest(privateKey, clientId) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"",
" console.log('dateIso: ' + dateIso);",
" const stringToSign = `${clientId}|${dateIso}`;",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureLib = new KJUR.crypto.Signature({ \"alg\": \"SHA256withRSA\" });",
" signatureLib.init(privateKey);",
" signatureLib.updateString(stringToSign);",
" var signatureHash = hex2b64(signatureLib.sign());",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-CLIENT-KEY', value: clientId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"",
"pm.collectionVariables.set(\"dd_snap_access_token_b2b\", jsonData.accessToken);"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "noauth"
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Account Binding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"phoneNo\": \"6287711112222\",\r\n \"additionalInfo\": {\r\n \"channel\": \"EMONEY_OVO_SNAP\",\r\n \"custIdMerchant\": \"CUST_6287711112222\",\r\n \"customerName\": \"anomymous\",\r\n \"email\": \"john.doe@doku.com\",\r\n \"idCard\": \"12345\",\r\n \"country\": \"Indonesia\",\r\n \"address\": \"Bali\",\r\n \"dateOfBirth\": \"19990101\",\r\n \"successRegistrationUrl\": \"https://sandbox.doku.com/bo/login/\",\r\n \"failedRegistrationUrl\": \"https://www.seleniumeasy.com/test\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/registration-account-binding",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"registration-account-binding"
]
}
},
"response": []
},
{
"name": "Get Token B2B2C",
"event": [
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"",
"pm.collectionVariables.set(\"dd_ovo_snap_access_token_b2b2c\", jsonData.accessToken);"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const privateKey = pm.variables.get(\"private_key\");",
"const clientId = pm.variables.get(\"client_id\");",
"signRequest(privateKey, clientId);",
"",
"function signRequest(privateKey, clientId) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"",
" console.log('dateIso: ' + dateIso);",
" const stringToSign = `${clientId}|${dateIso}`;",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureLib = new KJUR.crypto.Signature({ \"alg\": \"SHA256withRSA\" });",
" signatureLib.init(privateKey);",
" signatureLib.updateString(stringToSign);",
" var signatureHash = hex2b64(signatureLib.sign());",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-CLIENT-KEY', value: clientId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"authorization_code\",\n \"authCode\": \"2238240717133523163107188141436000691039\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b2c",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b2c"
]
}
},
"response": []
},
{
"name": "Balance Inquiry",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var accessTokenB2b2c = pm.variables.get(\"dd_ovo_snap_access_token_b2b2c\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'Authorization-Customer', value: 'Bearer ' + accessTokenB2b2c });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"additionalInfo\": {\r\n \"channel\": \"EMONEY_OVO_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/balance-inquiry",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"balance-inquiry"
]
}
},
"response": []
},
{
"name": "Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var accessTokenB2b2c = pm.variables.get(\"dd_ovo_snap_access_token_b2b2c\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'Authorization-Customer', value: 'Bearer ' + accessTokenB2b2c });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerReferenceNo\": \"INV_20240815_0001\",\r\n \"journeyId\": \"737763959\",\r\n \"amount\": {\r\n \"value\": \"10000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"feeType\": \"OUR\",\r\n \"payOptionDetails\": [\r\n {\r\n \"payMethod\": \"CASH\",\r\n \"transAmount\": {\r\n \"value\": \"10000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"feeAmount\": {\r\n \"value\": \"1000.00\",\r\n \"currency\": \"IDR\"\r\n }\r\n }\r\n ],\r\n \"additionalInfo\": {\r\n \"channel\": \"EMONEY_OVO_SNAP\",\r\n \"lineItems\": [\r\n {\r\n \"name\": \"masker\",\r\n \"price\": \"5000.00\",\r\n \"quantity\": 1\r\n },\r\n {\r\n \"name\": \"aqua\",\r\n \"price\": \"5000.00\",\r\n \"quantity\": 1\r\n }\r\n ],\r\n \"successPaymentUrl\": \"https://dribbble.com/shots/14575431-Payment-method-success/attachments/6265573?mode=media\",\r\n \"failedPaymentUrl\": \"https://dribbble.com/shots/4756331-Failed-Transaction\",\r\n \"paymentType\": \"SALE\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/payment-host-to-host",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"payment-host-to-host"
]
}
},
"response": []
},
{
"name": "Refund",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"originalPartnerReferenceNo\": \"INV_20240815_0001\",\r\n \"partnerRefundNo\": \"202408150001\",\r\n \"reason\": \"Cancel Order\",\r\n \"refundAmount\": {\r\n \"value\": \"10000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {\r\n \"channel\": \"EMONEY_OVO_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/refund",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"refund"
]
}
},
"response": []
},
{
"name": "Account Unbinding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"tokenId\": \"eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MjI0OTQxOTYsImlzcyI6IkRPS1UiLCJjbGllbnRJZCI6IkJSTi0wMjAyLTE2OTAyNzUzNTM3OTgiLCJhY2NvdW50SWQiOiI2MDc5YThlNTZjZWRiM2FlOWFlOWJkYTI1MTk1ZDdhNCJ9.hG_TDQ5lkMESxka_y2DSxGYqe3csuhczXAN4Oa805cM\",\r\n \"additionalInfo\": {\r\n \"channel\": \"EMONEY_OVO_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/registration-account-unbinding",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"registration-account-unbinding"
]
}
},
"response": []
}
],
"description": "Note :\n\n- Call the \"Misc - Init KJUR\" API to import KJUR.\n \n- No need to bind when calling the \"Refund\" API.\n \n- To get the b2b2c token : copy the \"authCode\" value from the \"Account Binding\" response and paste it into the \"authCode\" field in the \"Get Token B2B2C\" request body.\n \n- To unbind : copy the \"accessToken\" value from the \"Get Token B2B2C\" response and paste it into the \"tokenId\" field in the \"Unbinding\" request body."
},
{
"name": "CIMB Snap Direct Debit",
"item": [
{
"name": "Get Token B2B",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const privateKey = pm.variables.get(\"private_key\");",
"const clientId = pm.variables.get(\"client_id\");",
"signRequest(privateKey, clientId);",
"",
"function signRequest(privateKey, clientId) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"",
" console.log('dateIso: ' + dateIso);",
" const stringToSign = `${clientId}|${dateIso}`;",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureLib = new KJUR.crypto.Signature({ \"alg\": \"SHA256withRSA\" });",
" signatureLib.init(privateKey);",
" signatureLib.updateString(stringToSign);",
" var signatureHash = hex2b64(signatureLib.sign());",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-CLIENT-KEY', value: clientId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"",
"pm.collectionVariables.set(\"dd_snap_access_token_b2b\", jsonData.accessToken);"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "noauth"
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Account Binding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"phoneNo\": \"6287711113333\",\r\n \"additionalInfo\": {\r\n \"channel\": \"EMONEY_CIMB_SNAP\",\r\n \"custIdMerchant\": \"CUST_6287711113333\",\r\n \"customerName\": \"anomymous\",\r\n \"email\": \"john.doe@doku.com\",\r\n \"idCard\": \"12345\",\r\n \"country\": \"Indonesia\",\r\n \"address\": \"Bali\",\r\n \"dateOfBirth\": \"19990101\",\r\n \"successRegistrationUrl\": \"https://sandbox.doku.com/bo/login/\",\r\n \"failedRegistrationUrl\": \"https://www.seleniumeasy.com/test\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/registration-account-binding",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"registration-account-binding"
]
}
},
"response": []
},
{
"name": "Get Token B2B2C",
"event": [
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"",
"pm.collectionVariables.set(\"dd_cimb_snap_access_token_b2b2c\", jsonData.accessToken);"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const privateKey = pm.variables.get(\"private_key\");",
"const clientId = pm.variables.get(\"client_id\");",
"signRequest(privateKey, clientId);",
"",
"function signRequest(privateKey, clientId) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"",
" console.log('dateIso: ' + dateIso);",
" const stringToSign = `${clientId}|${dateIso}`;",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureLib = new KJUR.crypto.Signature({ \"alg\": \"SHA256withRSA\" });",
" signatureLib.init(privateKey);",
" signatureLib.updateString(stringToSign);",
" var signatureHash = hex2b64(signatureLib.sign());",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-CLIENT-KEY', value: clientId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"authorization_code\",\n \"authCode\": \"2238240717133523163107188141436000691039\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b2c",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b2c"
]
}
},
"response": []
},
{
"name": "Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var accessTokenB2b2c = pm.variables.get(\"dd_cimb_snap_access_token_b2b2c\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"var channelId = \"H2H\";\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'Authorization-Customer', value: 'Bearer ' + accessTokenB2b2c });\r",
" pm.request.headers.add({ key: 'CHANNEL-ID', value: channelId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerReferenceNo\": \"L20240815001\",\r\n \"journeyId\": \"827399289\",\r\n \"amount\": {\r\n \"value\": \"10000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_CIMB_SNAP\",\r\n \"lineItems\": [\r\n {\r\n \"name\": \"masker\",\r\n \"price\": \"5000.00\",\r\n \"quantity\": 1\r\n },\r\n {\r\n \"name\": \"aqua\",\r\n \"price\": \"5000.00\",\r\n \"quantity\": 1\r\n }\r\n ],\r\n \"remarks\": \"hadiah\",\r\n \"successPaymentUrl\": \"https://dribbble.com/shots/14575431-Payment-method-success/attachments/6265573?mode=media\",\r\n \"failedPaymentUrl\": \"https://dribbble.com/shots/4756331-Failed-Transaction\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/payment-host-to-host",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"payment-host-to-host"
]
}
},
"response": []
},
{
"name": "Verify OTP Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"originalPartnerReferenceNo\": \"L20240815001\",\r\n \"otp\": \"051448\",\r\n \"action\": \"otpPayment\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_CIMB_SNAP\",\r\n \"bankCardToken\": \"eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDk4MDIyNTAsImlzcyI6IkRPS1UiLCJjbGllbnRJZCI6IkJSTi0wMjAyLTE2OTAyNzUzNTM3OTgiLCJhY2NvdW50SWQiOiI2YmYyNTNkYzIwMDFhMDMzOTE5ZTMxMzQwOTMxZjNlYyJ9.uBUW_GjttTD0OHuK-KaRocrX3dwU8cMC_b_mJUYkDXI\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/otp-verification",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"otp-verification"
]
}
},
"response": []
},
{
"name": "Refund",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var accessTokenB2b2c = pm.variables.get(\"dd_cimb_snap_access_token_b2b2c\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'Authorization-Customer', value: 'Bearer ' + accessTokenB2b2c });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"originalPartnerReferenceNo\": \"L20240815001\",\r\n \"partnerRefundNo\": \"202408150001\",\r\n \"reason\": \"Cancel Order\",\r\n \"refundAmount\": {\r\n \"value\": \"10000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_CIMB_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/refund",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"refund"
]
}
},
"response": []
},
{
"name": "Account Unbinding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"var channelId = \"H2H\";\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'CHANNEL-ID', value: channelId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"tokenId\": \"eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2OTMyODExMjksImlzcyI6IkRPS1UiLCJjbGllbnRJZCI6IkJSTi0wMjA3LTE2NjkyNzMwNjQ2MjAiLCJhY2NvdW50SWQiOiIzNGQ0MDhiODI0MGIxNjJjYTA1NWQ3MzJhOGI0ZGZjMiJ9.6Tw_0sPNO1zCdlw7hU2UBT41qSJwy_SUcOVsCROEBKY\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_CIMB_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/registration-account-unbinding",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"registration-account-unbinding"
]
}
},
"response": []
},
{
"name": "Verify OTP Unbinding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"otp\": \"791758\",\r\n \"action\": \"otpUnlink\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_CIMB_SNAP\",\r\n \"bankCardToken\": \"eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MDk4MDIyNTAsImlzcyI6IkRPS1UiLCJjbGllbnRJZCI6IkJSTi0wMjAyLTE2OTAyNzUzNTM3OTgiLCJhY2NvdW50SWQiOiJmNDBiMjFmN2Q2MGRjYmRjYjNmZDNhZDRiN2NhYWZkZSJ9.X7XAuhzQGalXak64I-sptjvjBLadaSLy4rA4ZQPdWMo\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/otp-verification",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"otp-verification"
]
}
},
"response": []
}
],
"description": "Note :\n\n- Call the \"Misc - Init KJUR\" API to import KJUR.\n \n- To get the b2b2c token : copy the \"authCode\" value from the \"Account Binding\" response and paste it into the \"authCode\" field in the \"Get Token B2B2C\" request body.\n \n- To verify OTP : copy the \"accessToken\" value from the \"Get Token B2B2C\" response and paste it into the \"bankCardToken\" field in the \"Verify OTP Payment\" or \"Verify OTP Unbinding\" request body.\n \n- To unbind : copy the \"accessToken\" value from the \"Get Token B2B2C\" response and paste it into the \"tokenId\" field in the \"Unbinding\" request body."
},
{
"name": "ALLO Snap Direct Debit",
"item": [
{
"name": "Get Token B2B",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const privateKey = pm.variables.get(\"private_key\");",
"const clientId = pm.variables.get(\"client_id\");",
"signRequest(privateKey, clientId);",
"",
"function signRequest(privateKey, clientId) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"",
" console.log('dateIso: ' + dateIso);",
" const stringToSign = `${clientId}|${dateIso}`;",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureLib = new KJUR.crypto.Signature({ \"alg\": \"SHA256withRSA\" });",
" signatureLib.init(privateKey);",
" signatureLib.updateString(stringToSign);",
" var signatureHash = hex2b64(signatureLib.sign());",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-CLIENT-KEY', value: clientId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"",
"pm.collectionVariables.set(\"dd_snap_access_token_b2b\", jsonData.accessToken);"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "noauth"
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Account Binding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"var ipAddress = \"127.1.1.12\";\r",
"var deviceId = \"912f12e223624d2e94828b168199asdf\";\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'X-IP-ADDRESS', value: ipAddress });\r",
" pm.request.headers.add({ key: 'X-DEVICE-ID', value: deviceId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"phoneNo\": \"6287711114444\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_ALLO_SNAP\",\r\n \"custIdMerchant\": \"CUST_6287711114444\",\r\n \"customerName\": \"anomymous\",\r\n \"email\": \"john.doe@doku.com\",\r\n \"idCard\": \"12345\",\r\n \"country\": \"Indonesia\",\r\n \"address\": \"Bali\",\r\n \"dateOfBirth\": \"19990101\",\r\n \"successRegistrationUrl\": \"https://sandbox.doku.com/bo/login/\",\r\n \"failedRegistrationUrl\": \"https://www.seleniumeasy.com/test\",\r\n \"deviceModel\": \"iphone12\",\r\n \"osType\": \"ios\",\r\n \"channelId\": \"app\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/registration-account-binding",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"registration-account-binding"
]
}
},
"response": []
},
{
"name": "Get Token B2B2C",
"event": [
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"",
"pm.collectionVariables.set(\"dd_allo_snap_access_token_b2b2c\", jsonData.accessToken);"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const privateKey = pm.variables.get(\"private_key\");",
"const clientId = pm.variables.get(\"client_id\");",
"signRequest(privateKey, clientId);",
"",
"function signRequest(privateKey, clientId) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"",
" console.log('dateIso: ' + dateIso);",
" const stringToSign = `${clientId}|${dateIso}`;",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureLib = new KJUR.crypto.Signature({ \"alg\": \"SHA256withRSA\" });",
" signatureLib.init(privateKey);",
" signatureLib.updateString(stringToSign);",
" var signatureHash = hex2b64(signatureLib.sign());",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-CLIENT-KEY', value: clientId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"authorization_code\",\n \"authCode\": \"2238240717133523163107188141436000691039\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b2c",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b2c"
]
}
},
"response": []
},
{
"name": "Balance Inquiry",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var accessTokenB2b2c = pm.variables.get(\"dd_allo_snap_access_token_b2b2c\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"var ipAddress = \"127.1.1.12\";\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'X-IP-ADDRESS', value: ipAddress });\r",
" pm.request.headers.add({ key: 'Authorization-Customer', value: 'Bearer ' + accessTokenB2b2c });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_ALLO_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/balance-inquiry",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"balance-inquiry"
]
}
},
"response": []
},
{
"name": "Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var accessTokenB2b2c = pm.variables.get(\"dd_allo_snap_access_token_b2b2c\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"var ipAddress = \"127.1.1.12\";\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'X-IP-ADDRESS', value: ipAddress });\r",
" pm.request.headers.add({ key: 'Authorization-Customer', value: 'Bearer ' + accessTokenB2b2c });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerReferenceNo\": \"INV2408150001\",\r\n \"journeyId\": \"990144241\",\r\n \"amount\": {\r\n \"value\": \"10000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"payOptionDetails\": [\r\n {\r\n \"payMethod\": \"BALANCE\",\r\n \"transAmount\": {\r\n \"value\": \"10000.00\",\r\n \"currency\": \"IDR\"\r\n }\r\n }\r\n ],\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_ALLO_SNAP\",\r\n \"lineItems\": [\r\n {\r\n \"name\": \"masker\",\r\n \"price\": \"5000.00\",\r\n \"quantity\": 1\r\n },\r\n {\r\n \"name\": \"aqua\",\r\n \"price\": \"5000.00\",\r\n \"quantity\": 1\r\n }\r\n ],\r\n \"successPaymentUrl\": \"https://dribbble.com/shots/14575431-Payment-method-success/attachments/6265573?mode=media\",\r\n \"failedPaymentUrl\": \"https://dribbble.com/shots/4756331-Failed-Transaction\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/payment-host-to-host",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"payment-host-to-host"
]
}
},
"response": []
},
{
"name": "Refund",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var accessTokenB2b2c = pm.variables.get(\"dd_allo_snap_access_token_b2b2c\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"var ipAddress = \"127.1.1.12\";\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'X-IP-ADDRESS', value: ipAddress });\r",
" pm.request.headers.add({ key: 'Authorization-Customer', value: 'Bearer ' + accessTokenB2b2c });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"originalPartnerReferenceNo\": \"INV2408150001\",\r\n \"partnerRefundNo\": \"INV24081500010000000000000000001\",\r\n \"reason\": \"Cancel Order\",\r\n \"refundAmount\": {\r\n \"value\": \"10000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_ALLO_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/refund",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"refund"
]
}
},
"response": []
},
{
"name": "Account Unbinding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"var ipAddress = \"127.1.1.12\";\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'X-IP-ADDRESS', value: ipAddress });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"tokenId\": \"eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE3MjI0OTQ3MDcsImlzcyI6IkRPS1UiLCJjbGllbnRJZCI6IkJSTi0wMjAyLTE2OTAyNzUzNTM3OTgiLCJhY2NvdW50SWQiOiI3MTYzYTg2MmY3ZmNkNGVmMDUwOGQyN2M5YmUyOTQzNiJ9.VPl3hvLRFsX5SGWOeSUUPge5b6uFcjhC-stdGQv1VzsCWnPA3Y58dDzq-HoIHZg11jJs2BBHEOETsAjvLkv8ren2FKiOEtE-4O7LKtgzjdJVLP_JBOt9gkdYIBrmWp2UnqtvtVter-C-HNsWJ29x7vUHrUNnJHFbtIG0gcgHcr0oZ5DCXbLTmg8L1oJjOsPRCYYsIJ4vpbCGz_SPmpWro0ZsPcJyHqW4s939hxA8r_diWERa2vOvWX52ELdXqt99fbTKOjttM2O9AZCl4iQCGQJVp0nO652oQf5nZz6sZZdqZ5gKgD42gvluzqft5yPz-IaQyHGtMh6YwSUJx_VNfw\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_ALLO_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/registration-account-unbinding",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"registration-account-unbinding"
]
}
},
"response": []
}
],
"description": "Note :\n\n- Call the \"Misc - Init KJUR\" API to import KJUR.\n \n- To get the b2b2c token : copy the \"authCode\" value from the \"Account Binding\" response and paste it into the \"authCode\" field in the \"Get Token B2B2C\" request body.\n \n- To unbind : copy the \"accessToken\" value from the \"Get Token B2B2C\" response and paste it into the \"tokenId\" field in the \"Unbinding\" request body."
},
{
"name": "BRI Snap Direct Debit",
"item": [
{
"name": "Get Token B2B",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const privateKey = pm.variables.get(\"private_key\");",
"const clientId = pm.variables.get(\"client_id\");",
"signRequest(privateKey, clientId);",
"",
"function signRequest(privateKey, clientId) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"",
" console.log('dateIso: ' + dateIso);",
" const stringToSign = `${clientId}|${dateIso}`;",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureLib = new KJUR.crypto.Signature({ \"alg\": \"SHA256withRSA\" });",
" signatureLib.init(privateKey);",
" signatureLib.updateString(stringToSign);",
" var signatureHash = hex2b64(signatureLib.sign());",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-CLIENT-KEY', value: clientId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"",
"pm.collectionVariables.set(\"dd_snap_access_token_b2b\", jsonData.accessToken);"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "noauth"
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Card Binding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"var channelId = 'H2H';\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'CHANNEL-ID', value: channelId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"cardData\": \"wELoNh9WXeNFYcBkKAurPQTAURO7LxY8QIl6/FHdPvRFeuhL1RfBRCGitzgFnAuA0jHOIVodKXPa6BNUtk6nVZaUHub+FgO7GjSvHOzNf6SLeeyUhy2hMegJ4RCPTbdrIwb0FTrqtl3AqvscSW7JlQM0DAJ2++R/fORxELrGdk2AElglhk0INwAMeRNscLNjuxKl5I+DJhDXL+XM2d1mpg==|5ANjkPlQ0bZIDkqeaQkjEA==\",\r\n \"custIdMerchant\": \"CUST_6287711115555\",\r\n \"journeyId\": \"827738467\",\r\n \"phoneNo\": \"6287711115555\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_BRI_SNAP\",\r\n \"customerName\": \"John Doe\",\r\n \"email\": \"john.doe@doku.com\",\r\n \"idCard\": \"12345\",\r\n \"country\": \"Indonesia\",\r\n \"address\": \"Bali\",\r\n \"dateOfBirth\": \"19990101\",\r\n \"successRegistrationUrl\": \"https://sandbox.doku.com/bo/login/\",\r\n \"failedRegistrationUrl\": \"https://www.seleniumeasy.com/test\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/registration-card-bind",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"registration-card-bind"
]
}
},
"response": []
},
{
"name": "Verify OTP Binding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"otp\": \"999999\",\r\n \"action\": \"otpLinkage\",\r\n \"originalReferenceNo\": \"835744306884\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_BRI_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/otp-verification",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"otp-verification"
]
}
},
"response": []
},
{
"name": "Get Token B2B2C",
"event": [
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"",
"pm.collectionVariables.set(\"dd_bri_snap_access_token_b2b2c\", jsonData.accessToken);"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const privateKey = pm.variables.get(\"private_key\");",
"const clientId = pm.variables.get(\"client_id\");",
"signRequest(privateKey, clientId);",
"",
"function signRequest(privateKey, clientId) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"",
" console.log('dateIso: ' + dateIso);",
" const stringToSign = `${clientId}|${dateIso}`;",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureLib = new KJUR.crypto.Signature({ \"alg\": \"SHA256withRSA\" });",
" signatureLib.init(privateKey);",
" signatureLib.updateString(stringToSign);",
" var signatureHash = hex2b64(signatureLib.sign());",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-CLIENT-KEY', value: clientId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"authorization_code\",\n \"authCode\": \"2238240717133523163107188141436000691039\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b2c",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b2c"
]
}
},
"response": []
},
{
"name": "Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var accessTokenB2b2c = pm.variables.get(\"dd_bri_snap_access_token_b2b2c\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"var channelId = 'H2H';\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'Authorization-Customer', value: 'Bearer ' + accessTokenB2b2c });\r",
" pm.request.headers.add({ key: 'CHANNEL-ID', value: channelId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerReferenceNo\": \"INV2408150001\",\r\n \"journeyId\": \"887394857\",\r\n \"amount\": {\r\n \"value\": \"1000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_BRI_SNAP\",\r\n \"lineItems\": [\r\n {\r\n \"name\": \"masker\",\r\n \"price\": \"500.00\",\r\n \"quantity\": 1\r\n },\r\n {\r\n \"name\": \"aqua\",\r\n \"price\": \"500.00\",\r\n \"quantity\": 1\r\n }\r\n ],\r\n \"successPaymentUrl\": \"https://dribbble.com/shots/14575431-Payment-method-success/attachments/6265573?mode=media\",\r\n \"failedPaymentUrl\": \"https://dribbble.com/shots/4756331-Failed-Transaction\",\r\n \"paymentType\": \"SALE\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/payment-host-to-host",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"payment-host-to-host"
]
}
},
"response": []
},
{
"name": "Verify OTP Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"otp\": \"999999\",\r\n \"action\": \"otpPayment\",\r\n \"originalPartnerReferenceNo\": \"INV2408150001\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_BRI_SNAP\",\r\n \"bankCardToken\": \"eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2OTMyODExMjksImlzcyI6IkRPS1UiLCJjbGllbnRJZCI6IkJSTi0wMjA3LTE2NjkyNzMwNjQ2MjAiLCJhY2NvdW50SWQiOiI2OGEwZWY3NTZlY2JhZTI4MDYwN2ZlOTYzMzY0NzFiMSJ9.sd72CBLaum8dn8CNRqmtsgQdjMQ8_yLZ4Xbj9AYbJQ0\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/otp-verification",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"otp-verification"
]
}
},
"response": []
},
{
"name": "Refund",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var accessTokenB2b2c = pm.variables.get(\"dd_bri_snap_access_token_b2b2c\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'Authorization-Customer', value: 'Bearer ' + accessTokenB2b2c });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"originalPartnerReferenceNo\": \"INV2408150001\",\r\n \"partnerRefundNo\": \"REFINV2408150001\",\r\n \"reason\": \"Customer complain\",\r\n \"refundAmount\": {\r\n \"value\": \"1000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_BRI_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/refund",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"refund"
]
}
},
"response": []
},
{
"name": "Card Unbinding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"tokenId\": \"eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2OTMyODExMjksImlzcyI6IkRPS1UiLCJjbGllbnRJZCI6IkJSTi0wMjA3LTE2NjkyNzMwNjQ2MjAiLCJhY2NvdW50SWQiOiI2OGEwZWY3NTZlY2JhZTI4MDYwN2ZlOTYzMzY0NzFiMSJ9.sd72CBLaum8dn8CNRqmtsgQdjMQ8_yLZ4Xbj9AYbJQ0\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_BRI_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/registration-card-unbind",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"registration-card-unbind"
]
}
},
"response": []
}
],
"description": "Note :\n\n- Call the \"Misc - Init KJUR\" API to import KJUR.\n \n- To get the b2b2c token : copy the \"authCode\" value from the \"Account Binding\" response and paste it into the \"authCode\" field in the \"Get Token B2B2C\" request body.\n \n- To resend OTP : copy the \"journeyId\" value from the \"Card Binding\" or \"Payment\" request and paste it into the \"journeyId\" field in the \"Request OTP Binding\" or \"Request OTP Payment\" request body.\n \n- To verify OTP : copy the \"accessToken\" value from the \"Get Token B2B2C\" response and paste it into the \"bankCardToken\" field in the \"Verify OTP Binding\" or \"Verify OTP Payment\" request body.\n \n- To unbind : copy the \"accessToken\" value from the \"Get Token B2B2C\" response and paste it into the \"tokenId\" field in the \"Unbinding\" request body."
},
{
"name": "Mandiri Snap Direct Debit",
"item": [
{
"name": "Get Token B2B",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const privateKey = pm.variables.get(\"private_key\");",
"const clientId = pm.variables.get(\"client_id\");",
"signRequest(privateKey, clientId);",
"",
"function signRequest(privateKey, clientId) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"",
" console.log('dateIso: ' + dateIso);",
" const stringToSign = `${clientId}|${dateIso}`;",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureLib = new KJUR.crypto.Signature({ \"alg\": \"SHA256withRSA\" });",
" signatureLib.init(privateKey);",
" signatureLib.updateString(stringToSign);",
" var signatureHash = hex2b64(signatureLib.sign());",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-CLIENT-KEY', value: clientId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"",
"pm.collectionVariables.set(\"dd_snap_access_token_b2b\", jsonData.accessToken);"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "noauth"
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Card Binding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"var channelId = 'H2H';\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'CHANNEL-ID', value: channelId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"cardData\": \"WQDBg1u8PK0+g9YVyFIWeAuD7bSciGdMlph0wbD2iPhYKLRCt4qS0/GIIwQVx40nEgbfYke+KqS4VJ2yXyTN7w==|EsOoC+kF3Tna/ZCWdCOSZA==\",\r\n \"custIdMerchant\": \"CUST_6287711116666\",\r\n \"journeyId\": \"110829384\",\r\n \"phoneNo\": \"6287711116666\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_MANDIRI_SNAP\",\r\n \"customerName\": \"John Doe\",\r\n \"email\": \"john.doe@doku.com\",\r\n \"idCard\": \"12345\",\r\n \"country\": \"Indonesia\",\r\n \"address\": \"Bali\",\r\n \"dateOfBirth\": \"19990101\",\r\n \"successRegistrationUrl\": \"https://sandbox.doku.com/bo/login/\",\r\n \"failedRegistrationUrl\": \"https://www.seleniumeasy.com/test\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/registration-card-bind",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"registration-card-bind"
]
}
},
"response": []
},
{
"name": "Request OTP Binding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"otpTrxCode\": \"01\",\r\n \"journeyId\": \"110829384\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_MANDIRI_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/otp",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"otp"
]
}
},
"response": []
},
{
"name": "Verify OTP Binding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"otp\": \"999999\",\r\n \"action\": \"otpLinkage\",\r\n \"originalReferenceNo\": \"422134092254\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_MANDIRI_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/otp-verification",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"otp-verification"
]
}
},
"response": []
},
{
"name": "Get Token B2B2C",
"event": [
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"",
"pm.collectionVariables.set(\"dd_mandiri_snap_access_token_b2b2c\", jsonData.accessToken);"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const privateKey = pm.variables.get(\"private_key\");",
"const clientId = pm.variables.get(\"client_id\");",
"signRequest(privateKey, clientId);",
"",
"function signRequest(privateKey, clientId) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"",
" console.log('dateIso: ' + dateIso);",
" const stringToSign = `${clientId}|${dateIso}`;",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureLib = new KJUR.crypto.Signature({ \"alg\": \"SHA256withRSA\" });",
" signatureLib.init(privateKey);",
" signatureLib.updateString(stringToSign);",
" var signatureHash = hex2b64(signatureLib.sign());",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-CLIENT-KEY', value: clientId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"authorization_code\",\n \"authCode\": \"2238240717133523163107188141436000691039\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b2c",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b2c"
]
}
},
"response": []
},
{
"name": "Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var accessTokenB2b2c = pm.variables.get(\"dd_mandiri_snap_access_token_b2b2c\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"var channelId = 'H2H';\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'Authorization-Customer', value: 'Bearer ' + accessTokenB2b2c });\r",
" pm.request.headers.add({ key: 'CHANNEL-ID', value: channelId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerReferenceNo\": \"INV2408150001\",\r\n \"journeyId\": \"778338493\",\r\n \"amount\": {\r\n \"value\": \"1000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_MANDIRI_SNAP\",\r\n \"lineItems\": [\r\n {\r\n \"name\": \"masker\",\r\n \"price\": \"500.00\",\r\n \"quantity\": 1\r\n },\r\n {\r\n \"name\": \"aqua\",\r\n \"price\": \"500.00\",\r\n \"quantity\": 1\r\n }\r\n ],\r\n \"successPaymentUrl\": \"https://dribbble.com/shots/14575431-Payment-method-success/attachments/6265573?mode=media\",\r\n \"failedPaymentUrl\": \"https://dribbble.com/shots/4756331-Failed-Transaction\",\r\n \"paymentType\": \"SALE\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/payment-host-to-host",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"payment-host-to-host"
]
}
},
"response": []
},
{
"name": "Request OTP Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"otpTrxCode\": \"02\",\r\n \"journeyId\": \"778338493\",\r\n \"bankCardToken\": \"eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2OTMyODExMjksImlzcyI6IkRPS1UiLCJjbGllbnRJZCI6IkJSTi0wMjA3LTE2NjkyNzMwNjQ2MjAiLCJhY2NvdW50SWQiOiI3MTc1YjhiNDU4NTZhNmVmNTcxOTY4NDdhZDIyNzMyMyJ9.2fTFRInImp__d3ysjewQawotftiNj0ayzFpLiTBhJx0\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_MANDIRI_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/otp",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"otp"
]
}
},
"response": []
},
{
"name": "Verify OTP Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"otp\": \"999999\",\r\n \"action\": \"otpPayment\",\r\n \"originalPartnerReferenceNo\": \"INV2408150001\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_MANDIRI_SNAP\",\r\n \"bankCardToken\": \"eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE3MjQzODM5MDQsImlzcyI6IkRPS1UiLCJjbGllbnRJZCI6IkJSTi0wMjAyLTE2OTAyNzUzNTM3OTgiLCJhY2NvdW50SWQiOiIyYWMxNWRhMmE1MWU5MzNkMmVjZTYyYmQ4MGVjMDdjOCJ9.eVn3ofvjrCXghWayAgUnkqM8JPelPmcJZVeL11xKUaAVUaX2yvWHSNBly1w5K__Xk5-FzdvU4uXNtEYyyW2RdaLxK-BugRF_LsS4cLh6_es5YmlY8Xg0Y0LRp9Rk4UT_pFO6i5KDn48sItPMt40VwJkdLPTjIyG7SQUk2fXxStrdEpfp85N3tpBRFxPk2h0NUPyMahIJSINMdQ9FPnj7PlwQAoF1FJeYGtqG16e1XPM6OdjEW3seAwuU8lSGhO7fQ0YCjYoEsYadyQg4apbjv10-3VpudaDvKcWflVeFqIki10TGURv6bDvoqw04MOKp4pmHrdXN8Gw8sbSU1dmTcw\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/otp-verification",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"otp-verification"
]
}
},
"response": []
},
{
"name": "Cancel",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var accessTokenB2b2c = pm.variables.get(\"dd_mandiri_snap_access_token_b2b2c\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
" pm.request.headers.add({ key: 'Authorization-Customer', value: 'Bearer ' + accessTokenB2b2c });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"originalPartnerReferenceNo\": \"INV2408150001\",\r\n \"amount\": {\r\n \"value\": \"1000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"reason\": \"Customer complain\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_MANDIRI_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/cancel",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"cancel"
]
}
},
"response": []
},
{
"name": "Card Unbinding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"tokenId\": \"eyJhbGciOiJSUzI1NiJ9.eyJleHAiOjE3MjQzODM5MDQsImlzcyI6IkRPS1UiLCJjbGllbnRJZCI6IkJSTi0wMjAyLTE2OTAyNzUzNTM3OTgiLCJhY2NvdW50SWQiOiIyYWMxNWRhMmE1MWU5MzNkMmVjZTYyYmQ4MGVjMDdjOCJ9.eVn3ofvjrCXghWayAgUnkqM8JPelPmcJZVeL11xKUaAVUaX2yvWHSNBly1w5K__Xk5-FzdvU4uXNtEYyyW2RdaLxK-BugRF_LsS4cLh6_es5YmlY8Xg0Y0LRp9Rk4UT_pFO6i5KDn48sItPMt40VwJkdLPTjIyG7SQUk2fXxStrdEpfp85N3tpBRFxPk2h0NUPyMahIJSINMdQ9FPnj7PlwQAoF1FJeYGtqG16e1XPM6OdjEW3seAwuU8lSGhO7fQ0YCjYoEsYadyQg4apbjv10-3VpudaDvKcWflVeFqIki10TGURv6bDvoqw04MOKp4pmHrdXN8Gw8sbSU1dmTcw\",\r\n \"additionalInfo\": {\r\n \"channel\": \"DIRECT_DEBIT_MANDIRI_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/registration-card-unbind",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"registration-card-unbind"
]
}
},
"response": []
}
],
"description": "Note :\n\n- Call the \"Misc - Init KJUR\" API to import KJUR.\n \n- To get the b2b2c token : copy the \"authCode\" value from the \"Account Binding\" response and paste it into the \"authCode\" field in the \"Get Token B2B2C\" request body.\n \n- To verify OTP : copy the \"accessToken\" value from the \"Get Token B2B2C\" response and paste it into the \"bankCardToken\" field in the \"Verify OTP Binding\" or \"Verify OTP Payment\" request body.\n \n- To unbind : copy the \"accessToken\" value from the \"Get Token B2B2C\" response and paste it into the \"tokenId\" field in the \"Unbinding\" request body."
},
{
"name": "Dana Snap Direct Debit",
"item": [
{
"name": "Get Token B2B",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const privateKey = pm.variables.get(\"private_key\");",
"const clientId = pm.variables.get(\"client_id\");",
"signRequest(privateKey, clientId);",
"",
"function signRequest(privateKey, clientId) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"",
" console.log('dateIso: ' + dateIso);",
" const stringToSign = `${clientId}|${dateIso}`;",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureLib = new KJUR.crypto.Signature({ \"alg\": \"SHA256withRSA\" });",
" signatureLib.init(privateKey);",
" signatureLib.updateString(stringToSign);",
" var signatureHash = hex2b64(signatureLib.sign());",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-CLIENT-KEY', value: clientId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"",
"pm.collectionVariables.set(\"dd_snap_access_token_b2b\", jsonData.accessToken);"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "noauth"
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerReferenceNo\": \"INV202408150001\",\r\n \"amount\": {\r\n \"value\": \"1.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"urlParam\": [\r\n {\r\n \"url\": \"https://sandbox.doku.com/bo/login\",\r\n \"type\": \"PAY_RETURN\",\r\n \"isDeepLink\": \"Y\"\r\n }\r\n ],\r\n \"validUpTo\": \"2024-12-30T10:09:59+07:00\",\r\n \"pointOfInitiation\": \"app\",\r\n \"additionalInfo\": {\r\n \"channel\": \"EMONEY_DANA_SNAP\",\r\n \"orderTitle\": \"Demo\",\r\n \"supportDeepLinkCheckoutUrl\": \"false\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/payment-host-to-host",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"payment-host-to-host"
]
}
},
"response": []
},
{
"name": "Refund",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"originalPartnerReferenceNo\": \"INV202408150001\",\r\n \"partnerRefundNo\": \"REFINV202408150001\",\r\n \"refundAmount\": {\r\n \"value\": \"1.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {\r\n \"channel\": \"EMONEY_DANA_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/refund",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"refund"
]
}
},
"response": []
}
],
"description": "Note :\n\n- Call the \"Misc - Init KJUR\" API to import KJUR."
},
{
"name": "ShopeePay Snap Direct Debit",
"item": [
{
"name": "Get Token B2B",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const privateKey = pm.variables.get(\"private_key\");",
"const clientId = pm.variables.get(\"client_id\");",
"signRequest(privateKey, clientId);",
"",
"function signRequest(privateKey, clientId) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"",
" console.log('dateIso: ' + dateIso);",
" const stringToSign = `${clientId}|${dateIso}`;",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureLib = new KJUR.crypto.Signature({ \"alg\": \"SHA256withRSA\" });",
" signatureLib.init(privateKey);",
" signatureLib.updateString(stringToSign);",
" var signatureHash = hex2b64(signatureLib.sign());",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-CLIENT-KEY', value: clientId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"",
"pm.collectionVariables.set(\"dd_snap_access_token_b2b\", jsonData.accessToken);"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "noauth"
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");",
"var secretKey = pm.variables.get(\"shared_key\");",
"var externalId = _.random(100000000, 999999999);",
"",
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const path = pm.request.url.getPath();",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");",
"signRequest(pm.request, path)",
"",
"function createSignature(rawData, secretKey) {",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);",
" console.log(\"secretKey: \" + secretKey);",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);",
" return requestSignatureBase64String;",
"}",
"",
"function signRequest(request, path) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')",
" console.log('date: ' + dateIso);",
"",
" const method = request.method;",
" console.log('method: ' + method);",
"",
" console.log('path: ' + path);",
"",
" const body = request.body.raw;",
" var jsonObject = JSON.parse(body);",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)",
" console.log('minifyJsonObject: ' + minifyJsonObject);",
"",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();",
" console.log('bodySha256: ' + bodySha256);",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureHash = createSignature(stringToSign, secretKey);",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
""
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"partnerReferenceNo\": \"INV_SHOPEE_202408150001\",\n \"amount\": {\n \"value\": \"1000.00\",\n \"currency\": \"IDR\"\n },\n \"urlParam\": [\n {\n \"url\": \"https://www.google.com/search?q=test-10\",\n \"type\": \"PAY_RETURN\",\n \"isDeepLink\": \"Y\"\n }\n ],\n \"validUpTo\": \"2024-12-30T10:09:59+07:00\",\n \"pointOfInitiation\": \"app\",\n \"additionalInfo\": {\n \"channel\": \"EMONEY_SHOPEE_PAY_SNAP\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/payment-host-to-host",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"payment-host-to-host"
]
},
"description": "## Important\n\n- urlParam\\[i\\].type only support for PAY_RETURN. Using PAY_NOTIFY will get you an error.\n \n\nSample intent URI:\n\n```\nshopeeid://main?apprl=/rn/TRANSFER_PAGE?navigate_url=https://wsa.uat.wallet.airpay.co.id/wallet/pay?medium_index=dFhkbmR1bTBIamhWlgLIa0r0oMHOm_4PXDP8xLKQOEKaMYPwVOqTbrkqpBM&order_key=fggaZLW-qHmkQ9VInE5jEIrAtuYTc4i4-zFwzWtYZo8DbOUKEBqNNamjjtWPNzfb5qbuFE9hNNQaww&source=qr&token=dFhkbmR1bTBIamhWlgLIa0r0oMHOm_4PXDP8xLKQOEKaMYPwVOqTbrkqpBM\n\n ```"
},
"response": []
},
{
"name": "Refund",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"originalPartnerReferenceNo\": \"INV_SHOPEE_202408150001\",\r\n \"partnerRefundNo\": \"REF_INV_SHOPEE_202408150001\",\r\n \"reason\": \"Customer complain\",\r\n \"refundAmount\": {\r\n \"value\": \"1000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {\r\n \"channel\": \"EMONEY_SHOPEE_PAY_SNAP\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/refund",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"refund"
]
}
},
"response": []
}
],
"description": "Note :\n\n- Call the \"Misc - Init KJUR\" API to import KJUR."
}
]
},
{
"name": "Paylater",
"item": [
{
"name": "Generate Order",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/akulaku-peer-to-peer/v2/generate-order' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\":{\n \"invoice_number\":\"invoice-000001014\",\n \"line_items\":[\n {\n \"name\":\"The Way I Used to Be by Amber Smith\",\n \"price\":\"30000\",\n \"quantity\":\"2\",\n \"sku\":\"1002\",\n \"category\":\"Book\"\n },\n {\n \"name\":\"JAVA Programming\",\n \"price\":\"5000\",\n \"quantity\":\"10\",\n \"sku\":\"1001\",\n \"category\":\"Book\"\n }\n ],\n \"amount\":\"110000\",\n \"callback_url\":\"https://merchant.com/return-url\"\n },\n \"payment\":{\n \"merchant_unique_reference\":\"TEST-ABC-000104\"\n },\n \"customer\":{\n \"id\":\"fyona\",\n \"name\":\"fyona panjaitan\",\n \"phone\":\"6281874744447\",\n \"address\":\"taman setiabudi\",\n \"postcode\":\"120129\",\n \"state\":\"Jakarta\",\n \"city\":\"Jakarta Selatan\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/akulaku-peer-to-peer/v2/generate-order",
"host": [
"{{url}}"
],
"path": [
"akulaku-peer-to-peer",
"v2",
"generate-order"
]
}
},
"response": []
},
{
"name": "Cancellation",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/akulaku-peer-to-peer/v2/cancel' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\":{\n \"invoice_number\":\"CH-88277770234\"\n },\n \"payment\":{\n \"merchant_unique_reference\":\"ABC-0090\",\n \"identifier\":[\n {\n \"name\":\"AKULAKU_UNIQUE_REFERENCE\",\n \"value\":\"MCH-1103200003ABC-0090\"\n },\n {\n \"name\":\"ORDER_ID\",\n \"value\":\"1000034679\"\n }\n ]\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/akulaku-peer-to-peer/v2/cancel",
"host": [
"{{url}}"
],
"path": [
"akulaku-peer-to-peer",
"v2",
"cancel"
]
}
},
"response": []
},
{
"name": "Refund",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/akulaku-peer-to-peer/v2/refund' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\":{\n \"invoice_number\":\"invoice-000001011245\"\n },\n \"payment\":{\n \"merchant_unique_reference\":\"REFUND-ABC-000104567\",\n \"identifier\":[\n {\n \"name\": \"ORDER_ID\",\n \"value\": \"1000043216\"\n },\n {\n \"name\": \"AKULAKU_UNIQUE_REFERENCE\",\n \"value\": \"MCH-0016-7451979181409REFUND-ABC-000104567\"\n }\n ]\n },\n \"refund\":{\n \"merchant_unique_reference\":\"XYZ-00645678\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/akulaku-peer-to-peer/v2/refund",
"host": [
"{{url}}"
],
"path": [
"akulaku-peer-to-peer",
"v2",
"refund"
]
}
},
"response": []
}
]
},
{
"name": "Direct Transfer",
"item": [
{
"name": "Generate Payment Amount",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"var req_id = uuid.v4();",
"pm.variables.set(\"request_id\", req_id);",
"var dateFormat = new Date().toISOString().slice(0, 19)+\"Z\";",
"pm.variables.set(\"request_timestamp\", dateFormat);",
"var targetPath = \"/bca-direct-transfer/v1/order\";",
"",
"function generatePayCodeSignature(jsonBody, key, client, req, tgl, target) {",
"var body = (jsonBody.raw);",
"var bodySha256 = CryptoJS.enc.Base64.stringify(CryptoJS.SHA256(body));",
"var signatureComponents = ",
"\"Client-Id:\"+client+\"\\n\"",
"+\"Request-Id:\"+req+\"\\n\"",
"+\"Request-Timestamp:\"+tgl+\"\\n\"",
"+\"Request-Target:\"+target+\"\\n\"",
"+\"Digest:\"+ bodySha256;",
"var signature = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(signatureComponents,key));",
"console.log('body : \\n' + body);",
"console.log('Digest : '+ bodySha256);",
"console.log('UTC : ' +tgl);",
"console.log('Komponen signature : \\n' + signatureComponents);",
"console.log('Signature : ' + signature);",
"return (signature);",
"}",
"",
"var Header = require('postman-collection').Header",
"pm.request.headers.add({key : 'Signature', value :\"HMACSHA256=\"+generatePayCodeSignature(pm.request.body, pm.variables.get('secret_key'), pm.variables.get('client_id'), pm.variables.get('request_id'), dateFormat, targetPath)});",
"pm.request.headers.add({key : 'Request-Id', value : pm.variables.get('request_id')});",
"pm.request.headers.add({key : 'Client-Id', value : pm.variables.get('client_id')});",
"pm.request.headers.add({key : 'Request-Timestamp', value : pm.variables.get('request_timestamp')});",
"pm.request.headers.add({key : 'Request-Target', value : targetPath});"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"amount\": 10000,\n \"invoice_number\": \"INV-234237\",\n \"item_name\": \"Vario 160 Sticker\",\n \"customer_address\": \"Jakarta Selatan\"\n },\n \"customer\": {\n \"email\": \"heriyatmo@doku.com\",\n \"name\": \"yatmo\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/bca-direct-transfer/v1/order",
"host": [
"{{url}}"
],
"path": [
"bca-direct-transfer",
"v1",
"order"
]
}
},
"response": []
}
]
},
{
"name": "KKI",
"item": [
{
"name": "Get Token B2B",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const privateKey = pm.variables.get(\"private_key\");",
"const clientId = pm.variables.get(\"client_id\");",
"signRequest(privateKey, clientId);",
"",
"function signRequest(privateKey, clientId) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ');",
"",
" console.log('dateIso: ' + dateIso);",
" const stringToSign = `${clientId}|${dateIso}`;",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureLib = new KJUR.crypto.Signature({ \"alg\": \"SHA256withRSA\" });",
" signatureLib.init(privateKey);",
" signatureLib.updateString(stringToSign);",
" var signatureHash = hex2b64(signatureLib.sign());",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-CLIENT-KEY', value: clientId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
},
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"",
"pm.collectionVariables.set(\"dd_snap_access_token_b2b\", jsonData.accessToken);"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "noauth"
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"grantType\": \"client_credentials\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/authorization/v1/access-token/b2b",
"host": [
"{{url}}"
],
"path": [
"authorization",
"v1",
"access-token",
"b2b"
]
}
},
"response": []
},
{
"name": "Binding Only",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"accountName\": \"merchantDoku\",\r\n \"cardData\": \"Ie4kRYdMl3r7cxT/ALeiBfPU5z7L92BzkJDbUhOukkqBz6dk97Plw43+gHgQ5bKDck1HXw1UaqaJLccTkYjHAg==|oETj76OOa2760y8bI6ANgw==\",\r\n \"custIdMerchant\": \"merchantDoku\",\r\n \"additionalInfo\": {\r\n \"channel\": \"KARTU_KREDIT_INDONESIA\",\r\n \"customerName\": \"merchantDoku\",\r\n \"email\": \"merchant@doku.com\",\r\n \"dateOfBirth\": \"19990101\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/registration-card-bind",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"registration-card-bind"
]
}
},
"response": []
},
{
"name": "Payment AFP with Binding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerReferenceNo\": \"CPTS2110240001\",\r\n \"chargeToken\": \"9360011100202777889\",\r\n \"otp\": \"12345678\",\r\n \"amount\": {\r\n \"value\": \"10000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {\r\n \"channel\": \"KARTU_KREDIT_INDONESIA\",\r\n \"isBindAndPay\": \"Y\",\r\n \"customer\": {\r\n \"customerId\": \"merchantDoku\",\r\n \"customerName\": \"merchantDoku\",\r\n \"postalCode\": 15222\r\n },\r\n \"lineItems\": [\r\n {\r\n \"name\": \"T-Shirt Red\",\r\n \"price\": \"10000.00\",\r\n \"quantity\": 1\r\n }\r\n ]\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/payment-host-to-host",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"payment-host-to-host"
]
}
},
"response": []
},
{
"name": "Payment AFP",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerReferenceNo\": \"CPTS2110240001\",\r\n \"chargeToken\": \"9360011100202777889\",\r\n \"otp\": \"12345678\",\r\n \"amount\": {\r\n \"value\": \"10000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {\r\n \"channel\": \"KARTU_KREDIT_INDONESIA\",\r\n \"customer\": {\r\n \"customerId\": \"merchantDoku\",\r\n \"customerName\": \"merchantDoku\",\r\n \"postalCode\": 15222\r\n },\r\n \"lineItems\": [\r\n {\r\n \"name\": \"T-Shirt Red\",\r\n \"price\": \"10000.00\",\r\n \"quantity\": 1\r\n }\r\n ]\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/payment-host-to-host",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"payment-host-to-host"
]
}
},
"response": []
},
{
"name": "Payment with token",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerReferenceNo\": \"SNAP2810020001\",\r\n \"bankCardToken\": \"4e4ceb98729003ba38a362e7a415b3c7\",\r\n \"amount\": {\r\n \"value\": \"10000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {\r\n \"channel\": \"KARTU_KREDIT_INDONESIA\",\r\n \"deviceId\": \"Macintosh\",\r\n \"originalRequestId\": \"merchantRequestId\",\r\n \"account\": {\r\n \"accountName\": \"http://doku.com/\",\r\n \"accountNo\": \"http://doku.com/\"\r\n },\r\n \"lineItems\": [\r\n {\r\n \"name\": \"T-Shirt Red\",\r\n \"price\": \"10000.00\",\r\n \"quantity\": 1\r\n }\r\n ]\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/payment-host-to-host",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"payment-host-to-host"
]
}
},
"response": []
},
{
"name": "Payment without AFP",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"partnerReferenceNo\": \"SNAP2810020002\",\r\n \"bankCardToken\": \"4e4ceb98729003ba38a362e7a415b3c7\",\r\n \"amount\": {\r\n \"value\": \"10000.00\",\r\n \"currency\": \"IDR\"\r\n },\r\n \"additionalInfo\": {\r\n \"channel\": \"KARTU_KREDIT_INDONESIA\",\r\n \"lineItems\": [\r\n {\r\n \"name\": \"masker\",\r\n \"price\": \"40072.00\",\r\n \"quantity\": 1\r\n }\r\n ],\r\n \"paymentType\": \"RECURRING\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/payment-host-to-host",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"payment-host-to-host"
]
}
},
"response": []
},
{
"name": "Refund",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");",
"var secretKey = pm.variables.get(\"shared_key\");",
"var externalId = _.random(100000000, 999999999);",
"",
"var CryptoJS = require(\"crypto-js\");",
"var moment = require(\"moment\");",
"var navigator = {}; //fake a navigator object for the lib",
"var window = {}; //fake a window object for the lib",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign",
"",
"const path = pm.request.url.getPath();",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");",
"signRequest(pm.request, path)",
"",
"function createSignature(rawData, secretKey) {",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);",
" console.log(\"secretKey: \" + secretKey);",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);",
" return requestSignatureBase64String;",
"}",
"",
"function signRequest(request, path) {",
"",
" const date = new Date().toISOString();",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')",
" console.log('date: ' + dateIso);",
"",
" const method = request.method;",
" console.log('method: ' + method);",
"",
" console.log('path: ' + path);",
"",
" const body = request.body.raw;",
" var jsonObject = JSON.parse(body);",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)",
" console.log('minifyJsonObject: ' + minifyJsonObject);",
"",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();",
" console.log('bodySha256: ' + bodySha256);",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`",
" console.log('stringToSign: ' + stringToSign);",
"",
" var signatureHash = createSignature(stringToSign, secretKey);",
" console.log(\"signatureHash: \" + signatureHash);",
"",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });",
"",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"originalReferenceNo\": \"SNAP260824SNAP260824\",\n \"originalPartnerReferenceNo\": \"SNAP26082416\",\n \"originalExternalId\": \"534656848\",\n \"partnerRefundNo\": \"SNAP26082416-1\",\n \"refundAmount\": {\n \"value\": \"10000.00\",\n \"currency\": \"IDR\"\n },\n \"latestTransactionStatus\" : \"00\",\n \"reason\": \"Customer Request\",\n \"additionalInfo\": {\n \"channel\": \"KARTU_KREDIT_INDONESIA\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/debit/refund",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"debit",
"refund"
]
}
},
"response": []
},
{
"name": "Unbinding",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var partnerId = pm.variables.get(\"client_id\");\r",
"var secretKey = pm.variables.get(\"shared_key\");\r",
"var externalId = _.random(100000000, 999999999);\r",
"\r",
"var CryptoJS = require(\"crypto-js\");\r",
"var moment = require(\"moment\");\r",
"var navigator = {}; //fake a navigator object for the lib\r",
"var window = {}; //fake a window object for the lib\r",
"eval(postman.getGlobalVariable(\"jsrsasign-js\")); //import javascript jsrsasign\r",
"\r",
"const path = pm.request.url.getPath();\r",
"const accessTokenB2B = pm.variables.get(\"dd_snap_access_token_b2b\");\r",
"signRequest(pm.request, path)\r",
"\r",
"function createSignature(rawData, secretKey) {\r",
" let signatureUtf8 = CryptoJS.enc.Utf8.parse(rawData);\r",
" var secretUtf8 = CryptoJS.enc.Utf8.parse(secretKey);\r",
" console.log(\"secretKey: \" + secretKey);\r",
" var signatureBytes = CryptoJS.HmacSHA512(signatureUtf8, secretUtf8);\r",
" var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes);\r",
" return requestSignatureBase64String;\r",
"}\r",
"\r",
"function signRequest(request, path) {\r",
"\r",
" const date = new Date().toISOString();\r",
" const dateIso = moment(date).format('YYYY-MM-DDTHH:mm:ssZ')\r",
" console.log('date: ' + dateIso);\r",
"\r",
" const method = request.method;\r",
" console.log('method: ' + method);\r",
"\r",
" console.log('path: ' + path);\r",
"\r",
" const body = request.body.raw;\r",
" var jsonObject = JSON.parse(body);\r",
" var minifyJsonObject = JSON.stringify(jsonObject, null, 0)\r",
" console.log('minifyJsonObject: ' + minifyJsonObject);\r",
"\r",
" const bodySha256 = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(minifyJsonObject)).toLowerCase();\r",
" console.log('bodySha256: ' + bodySha256);\r",
" const stringToSign = `${method}:${path}:${accessTokenB2B}:${bodySha256}:${dateIso}`\r",
" console.log('stringToSign: ' + stringToSign);\r",
"\r",
" var signatureHash = createSignature(stringToSign, secretKey);\r",
" console.log(\"signatureHash: \" + signatureHash);\r",
"\r",
" pm.request.headers.add({ key: 'X-SIGNATURE', value: signatureHash });\r",
" pm.request.headers.add({ key: 'X-TIMESTAMP', value: dateIso });\r",
" pm.request.headers.add({ key: 'X-PARTNER-ID', value: partnerId });\r",
" pm.request.headers.add({ key: 'X-EXTERNAL-ID', value: externalId });\r",
"\r",
"}"
],
"type": "text/javascript",
"packages": {}
}
}
],
"request": {
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{dd_snap_access_token_b2b}}",
"type": "string"
}
]
},
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\r\n \"tokenId\": \"484f670190eab89da007c5cd2ba89099\",\r\n \"additionalInfo\": {\r\n \"channel\": \"KARTU_KREDIT_INDONESIA\"\r\n }\r\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/direct-debit/core/v1/registration-card-unbind",
"host": [
"{{url}}"
],
"path": [
"direct-debit",
"core",
"v1",
"registration-card-unbind"
]
}
},
"response": []
}
]
}
],
"description": "DOKU Direct is a collection of REST APIs for customizing your payment flow"
},
{
"name": "DOKU Checkout",
"item": [
{
"name": "DOKU Checkout - Initiate Payment",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/checkout/v1/payment' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"order\": {\n \"amount\": 10500,\n \"invoice_number\": \"INV-{{$timestamp}}\",\n \"currency\": \"IDR\",\n \"session_id\": \"SU5WFDferd561dfasfasdfae123c\",\n \"callback_url\": \"https://doku.com/\",\n \"line_items\": [\n {\n \"name\": \"DOKU T-Shirt\",\n \"price\": 10500,\n \"quantity\" : 1\n }\n ]\n },\n \"payment\": {\n \"payment_due_date\": 60\n },\n \"customer\": {\n \"name\": \"Anton Budiman\",\n \"email\": \"anton@doku.com\",\n \"phone\": \"+6285694566147\",\n \"address\": \"Plaza Asia Office Park Unit 3\",\n \"country\": \"ID\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/checkout/v1/payment",
"host": [
"{{url}}"
],
"path": [
"checkout",
"v1",
"payment"
]
}
},
"response": []
}
],
"description": "DOKU Checkout is a Hosted Payment Page that helps you do single integration for all payment channels available."
},
{
"name": "Misc",
"item": [
{
"name": "init KJUR",
"event": [
{
"listen": "test",
"script": {
"type": "text/javascript",
"exec": [
"postman.setGlobalVariable(\"jsrsasign-js\", responseBody);"
]
}
}
],
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://kjur.github.io/jsrsasign/jsrsasign-latest-all-min.js",
"protocol": "http",
"host": [
"kjur",
"github",
"io"
],
"path": [
"jsrsasign",
"jsrsasign-latest-all-min.js"
]
}
},
"response": []
},
{
"name": "Check Status API",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature() {",
" var invoiceNumber = 'INV-1640746942'; // Replace this with the Invoice Number or Request-Id as the query params",
"",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:' + '/orders/v1/status/' + invoiceNumber",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature());"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
}
],
"url": {
"raw": "{{url}}/orders/v1/status/INV-1640746942",
"host": [
"{{url}}"
],
"path": [
"orders",
"v1",
"status",
"INV-1640746942"
]
}
},
"response": []
}
]
},
{
"name": "DOKU Sub Account",
"item": [
{
"name": "Create Sub Account",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/sac-merchant/v1/accounts' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"type": "text"
},
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"account\": {\n\t\t\"email\": \"alifiani+stan001@doku.com\",\n\t\t\"type\": \"bank\",\n\t\t\"name\": \"Alifiani Standard 001\"\n\t}\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/sac-merchant/v1/accounts",
"host": [
"{{url}}"
],
"path": [
"sac-merchant",
"v1",
"accounts"
]
}
},
"response": []
},
{
"name": "Payouts",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/sac-merchant/v1/payouts' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"type": "text"
},
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{ \n \"account\": \n { \n \"id\":\"SAC-5933-1641483083409\" \n }, \n \"payout\": \n { \n \"amount\": 12000, \n \"invoice_number\":\"Invoice/001/SANDBOX\" \n }, \n \"beneficiary\": \n { \n \"bank_code\":\"BNINIDJA\", \n \"bank_account_number\": \"0577624308\", \n \"bank_account_name\":\"Sdri Artika Julianti\" \n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/sac-merchant/v1/payouts",
"host": [
"{{url}}"
],
"path": [
"sac-merchant",
"v1",
"payouts"
]
}
},
"response": []
},
{
"name": "Transfers",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var digestSHA256 = CryptoJS.SHA256(CryptoJS.enc.Utf8.parse(jsonBody));",
" var digestBase64 = CryptoJS.enc.Base64.stringify(digestSHA256);",
" console.log('Digest Component: ' + jsonBody)",
" console.log('Digest sha256: ' + digestSHA256)",
" console.log('Digest: ' + digestBase64)",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/sac-merchant/v1/transfers' + '\\n'+",
" 'Digest:' + digestBase64;",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));"
],
"type": "text/javascript"
}
}
],
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"type": "text"
},
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{ \n \"transfer\":\n {\n \"origin\" : \"SAC-8698-1628220445878\",\n \"destination\" : \"SAC-1670-1628490169910\",\n \"amount\" : 100000,\n \"invoice_number\" : \"TEST-SANDBOX-1\"\n }\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{url}}/sac-merchant/v1/transfers",
"host": [
"{{url}}"
],
"path": [
"sac-merchant",
"v1",
"transfers"
]
}
},
"response": []
},
{
"name": "Balance",
"event": [
{
"listen": "prerequest",
"script": {
"exec": [
"var uuid = require('uuid');",
"pm.variables.set(\"request_id\", uuid.v4());",
"pm.variables.set(\"request_timestamp\", new Date().toISOString().slice(0, 19)+\"Z\");",
"",
"function generateSignature(jsonBody) {",
" var account_id = 'SAC-7549-1645676098163' // Replace this with the Account Id as the query params",
" var signatureComponents = 'Client-Id:' + pm.variables.get('client_id') +'\\n'+",
" 'Request-Id:' + pm.variables.get('request_id') +'\\n'+",
" 'Request-Timestamp:' + pm.variables.get('request_timestamp') + '\\n'+",
" 'Request-Target:/sac-merchant/v1/balances/' + account_id",
" var signatureHmacSha256 = CryptoJS.HmacSHA256(signatureComponents,pm.variables.get('secret_key'));",
" var signatureBase64 = CryptoJS.enc.Base64.stringify(signatureHmacSha256);",
" console.log('Signature Components: ' + signatureComponents)",
" console.log('Signature HMACSHA256: ' + signatureHmacSha256)",
" console.log('Signature: ' + signatureBase64)",
" return 'HMACSHA256='+signatureBase64;",
"}",
"",
"pm.variables.set('signature', generateSignature(pm.variables.replaceIn(pm.request.body.raw)));",
""
],
"type": "text/javascript"
}
}
],
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json",
"type": "text"
},
{
"key": "Client-Id",
"value": "{{client_id}}",
"type": "text"
},
{
"key": "Request-Id",
"value": "{{request_id}}",
"type": "text"
},
{
"key": "Signature",
"value": "{{signature}}",
"type": "text"
},
{
"key": "Request-Timestamp",
"value": "{{request_timestamp}}",
"type": "text"
}
],
"url": {
"raw": "{{url}}/sac-merchant/v1/balances/SAC-7549-1645676098163",
"host": [
"{{url}}"
],
"path": [
"sac-merchant",
"v1",
"balances",
"SAC-7549-1645676098163"
]
}
},
"response": []
}
]
}
],
"event": [
{
"listen": "prerequest",
"script": {
"type": "text/javascript",
"exec": [
""
]
}
},
{
"listen": "test",
"script": {
"type": "text/javascript",
"exec": [
""
]
}
}
],
"variable": [
{
"key": "url",
"value": "https://api-sandbox.doku.com"
},
{
"key": "prod_url",
"value": "https://api.doku.com"
},
{
"key": "client_id",
"value": "MCH-0003-8279340109246"
},
{
"key": "secret_key",
"value": "SK-7D9Lk82lxvJ2tPn18d4t",
"type": "string"
},
{
"key": "request_id",
"value": "93626957-8ebe-4e0e-9778-3a1a623ea18b"
},
{
"key": "private_key",
"value": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCx1sG5T84ty8oA\nW4IgQIOsR2hmWoI4xSn6TDrr/WsF5Z53vm35Hbj4lqvsRGEvqSzIExapGKe64TP3\ndLeMvCfpcixHsm05Dzdxfv2Wd9XWSE3XsexNH8HGpSE56aNsmU1se4l96zkujJOs\niBfwwo4wDQcDp57o9T4tJOXdk827DA2zsQXBBTcaDZ6iqsixYUvJXa76SFUtyXC+\nSm9rk7n6bomSCoSuEs6FiKQ6rNSQSU4UQD4PpNPv+g6Aeem0MIBD+2kAOncXSzbv\neMxd4BLooypOJaMI/bZxfqkiLXUo3ll0kopjmvzN6KAxJgTEOok64EMjREhm9l9J\nloBdXpUXAgMBAAECggEAYzoXl2VO/kCB8lccsRAuJ/cj6lA/7pscQ/s6uSgKCh1H\noTqQs/oAljvDq62vqF81jGESOMF3/Q7g5wapz43Am0HIMSz+QmMaJWqc5dLxboGj\nZWFyHspEXakPc/fH5rVW/NulKKwRmMZ5M0AwU3bKzUbHjiN9yC/mRFwdIdfxZ5Zx\nBfKL8X9d2OmzGnR/76PFJrjFKnPVKLSQZyBvMJgk/INrJ5F2t7Twcmf9EnHScDWI\nBtCd4EmIuejLMB4kC7lCcWNCOL9DBNL2ka9YeLZ34tjE4Itvowtz1hgdNcAkoFAt\nwMRxUf9vVqkukqt/0c37UAsrwjXFIAfRkSKatV0WGQKBgQDWxuDPKwsCeY6VAY0f\naa/kKbSBgau2Sgsgx0yNvtCx2/gK1eKuHScXbCer8sXYVPO9nwNkynMEO5pec4vV\nfhmleDrKH18kYXafNeTuXV4gotnm51OWOaQZkwIBnUV8BxnMlL9gicIn4bFNrtaW\nP+MmHafacjScJr3li+DTAApWawKBgQDT+Ou6Mck7c2guAv2RDl9CH6o267Sr2fcU\n29uKSHchp0qmrMcFfA27NMqC4zsYIw41wnIOrGXwh0jg1UHHqjswGoyO3ED4VCec\n7AiHOd97As3y48Mvm5liYx5LeRRJML5zvBH14W490NUHXOsSNWpJ49EnoxkLbcS9\nh9R30LfvBQKBgAuHdX3pc5fYapz5DlhHVhfLXVMuYMdSRjKmQCfDvHQvuKrsPFTY\nX8bUGXUTfSdVuBfPt2DrtSze/jRfw3vcXwgQ4icDdBoB2VpGjFl3TZw24beRZ11D\nDtoImCz6AkbcIrhmq7dE7dUyOlBPOFmsaEcdhGsngkd3lO4DijgJYoStAoGBALZ5\nhWvO6f1sttVNK72Qkr5Yhe4rcGe0BjiFn3NmOG/XFLNw7w8woJ10r5SHSlrX6qaq\n0gcBr+ukej9aNftM9xDM+g0NXDyqLUOwCRNn5ZN+cY5TNbapCxygWPb9r1HmTT1S\nPF/fhUhfmtNw0MfnBa3AGVA23htxjjjeUjAmlACFAoGBAKxnvtLNDatmsuvxkKo4\nzUvrDVc4lRCZBXZvY6HXnaK9BLeyJ16Hb8yz9Ig222gKr4PAJCW5DOJKbHqHuGhZ\nAAjXo3wdH4AmODAh/kkysZlyQ2pY52r0C7xjsIeEGJbrwIBLWL3tEd3Hsjwnj6gd\nMdU1l0PsqOEv0kYbuKHVaGmm\n-----END PRIVATE KEY-----",
"type": "string"
},
{
"key": "btn_dgpc_bin",
"value": "959626",
"type": "string"
},
{
"key": "bri_dgpc_bin",
"value": "",
"type": "string"
},
{
"key": "bni_dgpc_bin",
"value": "",
"type": "string"
},
{
"key": "bnc_dgpc_bin",
"value": "",
"type": "string"
},
{
"key": "mandiri_dgpc_bin",
"value": "",
"type": "string"
},
{
"key": "permata_dgpc_bin",
"value": "",
"type": "string"
},
{
"key": "maybank_dgpc_bin",
"value": "",
"type": "string"
},
{
"key": "bsi_dgpc_bin",
"value": "",
"type": "string"
},
{
"key": "sinarmas_dgpc_bin",
"value": "",
"type": "string"
},
{
"key": "danamon_dgpc_bin",
"value": "",
"type": "string"
},
{
"key": "cimb_dgpc_bin",
"value": "",
"type": "string"
},
{
"key": "x_signature",
"value": ""
},
{
"key": "x_timestamp",
"value": ""
},
{
"key": "x_client_key",
"value": ""
},
{
"key": "x_external_id",
"value": ""
},
{
"key": "invoice_number",
"value": ""
},
{
"key": "expired_date",
"value": ""
},
{
"key": "partner_service_id",
"value": ""
}
]
}