{ "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": "" } ] }