{
	"info": {
		"_postman_id": "e8d67aaf-1573-4507-b041-f183094fb154",
		"name": "OVO Push To Pay",
		"description": "OVO Staging",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
		"_exporter_id": "7822554"
	},
	"item": [
		{
			"name": "setup credentials",
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"exec": [
							"/* this request is to setup the environment of the postman collection */",
							"",
							"//please change value \"redacted\" with credential values shared by OVO team, then click Send button in the Postman application",
							"",
							"if (pm.environment.name === 'OVO Push To Pay'){",
							"    pm.environment.set('baseURL','https://api.byte-stack.net');",
							"",
							"    pm.environment.set('appid','redacted');",
							"    pm.environment.set('appkey','redacted');",
							"    pm.environment.set('merchantId','redacted');",
							"    pm.environment.set('storeCode','redacted');",
							"    pm.environment.set('mid','redacted');",
							"    pm.environment.set('tid','redacted');",
							"",
							"    pm.environment.set('time','');",
							"    pm.environment.set('hmac','');",
							"    pm.environment.set('phone','');",
							"    pm.environment.set('amount','');",
							"    pm.environment.set('batchNo','');",
							"    pm.environment.set('referenceNumber','');",
							"}"
						],
						"type": "text/javascript"
					}
				},
				{
					"listen": "test",
					"script": {
						"exec": [
							"if ((responseCode.code === 422) || (responseCode.code === 200)) {\r",
							"    pm.test('variable should exist', function () {\r",
							"        pm.expect(pm.environment.has('baseURL')).to.equal(true);\r",
							"        pm.expect(pm.environment.has('appid')).to.equal(true);\r",
							"        pm.expect(pm.environment.has('appkey')).to.equal(true);\r",
							"        pm.expect(pm.environment.has('merchantId')).to.equal(true);\r",
							"        pm.expect(pm.environment.has('storeCode')).to.equal(true);\r",
							"        pm.expect(pm.environment.has('tid')).to.equal(true);\r",
							"        pm.expect(pm.environment.has('mid')).to.equal(true);\r",
							"    });\r",
							"}"
						],
						"type": "text/javascript"
					}
				}
			],
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json",
						"type": "text"
					}
				],
				"body": {
					"mode": "raw",
					"raw": ""
				},
				"url": {
					"raw": "https://api.byte-stack.net",
					"protocol": "https",
					"host": [
						"api",
						"byte-stack",
						"net"
					]
				},
				"description": "Push To Pay"
			},
			"response": []
		},
		{
			"name": "<1> Inquiry Phone Number (optional)",
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"exec": [
							"if (pm.environment.name === 'OVO Push To Pay'){",
							"    const time = Math.round(new Date().getTime() / 1000);",
							"    const data = pm.environment.get('appid') + time;",
							"    const hmac = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256(data, pm.environment.get('appkey')));",
							"",
							"    pm.environment.set('time',time);",
							"    pm.environment.set('hmac',hmac);",
							"",
							"    console.log('time=>',time);",
							"    console.log('data=>',data);",
							"    console.log('hmac=>',hmac);",
							"}"
						],
						"type": "text/javascript"
					}
				},
				{
					"listen": "test",
					"script": {
						"exec": [
							"if ((responseCode.code === 422) || (responseCode.code === 200)) {\r",
							"    var res = JSON.parse(responseBody);\r",
							"    pm.environment.set('phone',res.transactionRequestData.phone);\r",
							"}"
						],
						"type": "text/javascript"
					}
				}
			],
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json",
						"type": "text"
					},
					{
						"key": "app-id",
						"value": "{{appid}}",
						"type": "text"
					},
					{
						"key": "random",
						"value": "{{time}}",
						"type": "text"
					},
					{
						"key": "hmac",
						"value": "{{hmac}}",
						"type": "text"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\r\n    \"type\":\"0100\",\r\n    \"processingCode\":\"050000\",\r\n    \"merchantId\":\"{{merchantId}}\",\r\n    \"storeCode\":\"{{storeCode}}\",\r\n    \"mid\":\"{{mid}}\",\r\n    \"tid\":\"{{tid}}\",\r\n    \"transactionRequestData\":{\r\n        \"phone\":\"0857957868761\"\r\n    }\r\n}"
				},
				"url": {
					"raw": "{{baseURL}}/pos",
					"host": [
						"{{baseURL}}"
					],
					"path": [
						"pos"
					]
				},
				"description": "Push To Pay"
			},
			"response": []
		},
		{
			"name": "<2> Push To Pay (mandatory)",
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"exec": [
							"if (pm.environment.name === 'OVO Push To Pay'){",
							"    const time = Math.round(new Date().getTime() / 1000);",
							"    const referenceNumber = Math.round(Math.random() * 1000000);",
							"    const data = pm.environment.get('appid') + time;",
							"    const hmac = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256(data, pm.environment.get('appkey')));",
							"",
							"    let local = new Date();",
							"    local.setMinutes(local.getMinutes() - local.getTimezoneOffset());",
							"    const batchNo = local.toJSON().slice(2, 10).replace(/-/g,\"\");",
							"",
							"    pm.environment.set('time',time);",
							"    pm.environment.set('hmac',hmac);",
							"    pm.environment.set('batchNo', batchNo);",
							"    pm.environment.set('referenceNumber',referenceNumber);",
							"",
							"    console.log('time=>',time);",
							"    console.log('data=>',data);",
							"    console.log('hmac=>',hmac);",
							"    console.log('referenceNumber=>',referenceNumber);",
							"    console.log('batchNo=>',batchNo);",
							"",
							"    var req = JSON.parse(request.data);",
							"    pm.environment.set('amount',req.amount);",
							"    pm.environment.set('merchantInvoice',req.transactionRequestData.merchantInvoice);",
							"}"
						],
						"type": "text/javascript"
					}
				},
				{
					"listen": "test",
					"script": {
						"exec": [
							"if ((responseCode.code === 422) || (responseCode.code === 200)) {\r",
							"    var res = JSON.parse(responseBody);\r",
							"    pm.environment.set('amount',res.amount);\r",
							"    pm.environment.set('referenceNumber',res.referenceNumber);\r",
							"    pm.environment.set('batchNo',res.transactionRequestData.batchNo);\r",
							"    pm.environment.set('PTP_responseCode',res.responseCode);\r",
							"}"
						],
						"type": "text/javascript"
					}
				}
			],
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"value": "application/json",
						"type": "text"
					},
					{
						"key": "app-id",
						"value": "{{appid}}",
						"type": "text"
					},
					{
						"key": "random",
						"value": "{{time}}",
						"type": "text"
					},
					{
						"key": "hmac",
						"value": "{{hmac}}",
						"type": "text"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n    \"type\":\"0200\",\n    \"processingCode\":\"040000\",\n    \"merchantId\":\"{{merchantId}}\",\n    \"storeCode\":\"{{storeCode}}\",\n    \"mid\":\"{{mid}}\",\n    \"tid\":\"{{tid}}\",\n    \"referenceNumber\":\"{{referenceNumber}}\",\n    \"amount\":100000,\n    \"transactionRequestData\":{\n        \"phone\":\"{{phone}}\",\n        \"batchNo\":\"{{batchNo}}\",\n        \"merchantInvoice\":\"InvoiceTest-{{batchNo}}-{{referenceNumber}}\"\n    }\n}"
				},
				"url": {
					"raw": "{{baseURL}}/pos",
					"host": [
						"{{baseURL}}"
					],
					"path": [
						"pos"
					]
				},
				"description": "Push To Pay"
			},
			"response": []
		},
		{
			"name": "<3> Reversal (mandatory)",
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"exec": [
							"if (pm.environment.name === 'OVO Push To Pay'){",
							"    const time = Math.round(new Date().getTime() / 1000);",
							"    const data = pm.environment.get('appid') + time;",
							"    const hmac = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256(data, pm.environment.get('appkey')));",
							"",
							"    pm.environment.set('time',time);",
							"    pm.environment.set('hmac',hmac);",
							"",
							"    console.log('time=>',time);",
							"    console.log('data=>',data);",
							"    console.log('hmac=>',hmac);",
							"}"
						],
						"type": "text/javascript"
					}
				},
				{
					"listen": "test",
					"script": {
						"exec": [
							"if ((responseCode.code === 422) || (responseCode.code === 200)) {\r",
							"    var res = JSON.parse(responseBody);\r",
							"    pm.environment.set('REVERSAL_responseCode',res.responseCode);\r",
							"}"
						],
						"type": "text/javascript"
					}
				}
			],
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"type": "text",
						"value": "application/json"
					},
					{
						"key": "app-id",
						"type": "text",
						"value": "{{appid}}"
					},
					{
						"key": "random",
						"type": "text",
						"value": "{{time}}"
					},
					{
						"key": "hmac",
						"type": "text",
						"value": "{{hmac}}"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\r\n    \"type\":\"0400\",\r\n    \"processingCode\":\"040000\",\r\n    \"merchantId\":\"{{merchantId}}\",\r\n    \"storeCode\":\"{{storeCode}}\",\r\n    \"mid\":\"{{mid}}\",\r\n    \"tid\":\"{{tid}}\",\r\n    \"referenceNumber\":\"{{referenceNumber}}\",\r\n    \"amount\":\"{{amount}}\",\r\n    \"transactionRequestData\":{\r\n        \"batchNo\":\"{{batchNo}}\",\r\n        \"merchantInvoice\":\"{{merchantInvoice}}\"\r\n    }\r\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseURL}}/pos",
					"host": [
						"{{baseURL}}"
					],
					"path": [
						"pos"
					]
				},
				"description": "Push To Pay"
			},
			"response": []
		},
		{
			"name": "<4> Inquiry Payment Status (optional)",
			"event": [
				{
					"listen": "test",
					"script": {
						"exec": [
							"if ((responseCode.code === 422) || (responseCode.code === 200)) {\r",
							"    var res = JSON.parse(responseBody);\r",
							"    pm.environment.set('CheckPTP_responseCode',res.responseCode);\r",
							"}"
						],
						"type": "text/javascript"
					}
				},
				{
					"listen": "prerequest",
					"script": {
						"exec": [
							"if (pm.environment.name === 'OVO Push To Pay'){",
							"    const time = Math.round(new Date().getTime() / 1000);",
							"    const data = pm.environment.get('appid') + time;",
							"    const hmac = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256(data, pm.environment.get('appkey')));",
							"",
							"    pm.environment.set('time',time);",
							"    pm.environment.set('hmac',hmac);",
							"",
							"    console.log('time=>',time);",
							"    console.log('data=>',data);",
							"    console.log('hmac=>',hmac);",
							"}"
						],
						"type": "text/javascript"
					}
				}
			],
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"type": "text",
						"value": "application/json"
					},
					{
						"key": "app-id",
						"type": "text",
						"value": "{{appid}}"
					},
					{
						"key": "random",
						"type": "text",
						"value": "{{time}}"
					},
					{
						"key": "hmac",
						"type": "text",
						"value": "{{hmac}}"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\n    \"type\":\"0100\",\n    \"processingCode\":\"040000\",\n    \"merchantId\":\"{{merchantId}}\",\n    \"storeCode\":\"{{storeCode}}\",\n    \"mid\":\"{{mid}}\",\n    \"tid\":\"{{tid}}\",\n    \"referenceNumber\":\"{{referenceNumber}}\",\n    \"amount\":\"{{amount}}\",\n    \"transactionRequestData\":{\n        \"phone\":\"{{phone}}\",\n        \"batchNo\":\"{{batchNo}}\",\n        \"merchantInvoice\":\"{{merchantInvoice}}\"\n    }\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseURL}}/pos",
					"host": [
						"{{baseURL}}"
					],
					"path": [
						"pos"
					]
				},
				"description": "Push To Pay"
			},
			"response": []
		},
		{
			"name": "<5> Void (optional)",
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"exec": [
							"if (pm.environment.name === 'OVO Push To Pay'){",
							"    const time = Math.round(new Date().getTime() / 1000);",
							"    const data = pm.environment.get('appid') + time;",
							"    const hmac = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256(data, pm.environment.get('appkey')));",
							"",
							"    pm.environment.set('time',time);",
							"    pm.environment.set('hmac',hmac);",
							"",
							"    console.log('time=>',time);",
							"    console.log('data=>',data);",
							"    console.log('hmac=>',hmac);",
							"}"
						],
						"type": "text/javascript"
					}
				},
				{
					"listen": "test",
					"script": {
						"exec": [
							"if ((responseCode.code === 422) || (responseCode.code === 200)) {\r",
							"    var res = JSON.parse(responseBody);\r",
							"    pm.environment.set('VOID_responseCode',res.responseCode);\r",
							"}"
						],
						"type": "text/javascript"
					}
				}
			],
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"type": "text",
						"value": "application/json"
					},
					{
						"key": "app-id",
						"type": "text",
						"value": "{{appid}}"
					},
					{
						"key": "random",
						"type": "text",
						"value": "{{time}}"
					},
					{
						"key": "hmac",
						"type": "text",
						"value": "{{hmac}}"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\r\n    \"type\":\"0200\",\r\n    \"processingCode\":\"020040\",\r\n    \"merchantId\":\"{{merchantId}}\",\r\n    \"storeCode\":\"{{storeCode}}\",\r\n    \"mid\":\"{{mid}}\",\r\n    \"tid\":\"{{tid}}\",\r\n    \"referenceNumber\":\"{{referenceNumber}}\",\r\n    \"amount\":\"{{amount}}\",\r\n    \"transactionRequestData\":{\r\n        \"batchNo\":\"{{batchNo}}\",\r\n        \"merchantInvoice\":\"{{merchantInvoice}}\"\r\n    }\r\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseURL}}/pos",
					"host": [
						"{{baseURL}}"
					],
					"path": [
						"pos"
					]
				},
				"description": "Push To Pay"
			},
			"response": []
		},
		{
			"name": "<6> Inquiry Void Status (optional)",
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"exec": [
							"if (pm.environment.name === 'OVO Push To Pay'){",
							"    const time = Math.round(new Date().getTime() / 1000);",
							"    const data = pm.environment.get('appid') + time;",
							"    const hmac = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256(data, pm.environment.get('appkey')));",
							"",
							"    pm.environment.set('time',time);",
							"    pm.environment.set('hmac',hmac);",
							"",
							"    console.log('time=>',time);",
							"    console.log('data=>',data);",
							"    console.log('hmac=>',hmac);",
							"}"
						],
						"type": "text/javascript"
					}
				},
				{
					"listen": "test",
					"script": {
						"exec": [
							"if ((responseCode.code === 422) || (responseCode.code === 200)) {\r",
							"    var res = JSON.parse(responseBody);\r",
							"    pm.environment.set('InquiryVOID_responseCode',res.responseCode);\r",
							"}"
						],
						"type": "text/javascript"
					}
				}
			],
			"request": {
				"method": "POST",
				"header": [
					{
						"key": "Content-Type",
						"type": "text",
						"value": "application/json"
					},
					{
						"key": "app-id",
						"type": "text",
						"value": "{{appid}}"
					},
					{
						"key": "random",
						"type": "text",
						"value": "{{time}}"
					},
					{
						"key": "hmac",
						"type": "text",
						"value": "{{hmac}}"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\r\n    \"type\":\"0100\",\r\n    \"processingCode\":\"020040\",\r\n    \"merchantId\":\"{{merchantId}}\",\r\n    \"storeCode\":\"{{storeCode}}\",\r\n    \"mid\":\"{{mid}}\",\r\n    \"tid\":\"{{tid}}\",\r\n    \"referenceNumber\":\"{{referenceNumber}}\",\r\n    \"amount\":\"{{amount}}\",\r\n    \"transactionRequestData\":{\r\n        \"batchNo\":\"{{batchNo}}\",\r\n        \"merchantInvoice\":\"{{merchantInvoice}}\"\r\n    }\r\n}",
					"options": {
						"raw": {
							"language": "json"
						}
					}
				},
				"url": {
					"raw": "{{baseURL}}/pos",
					"host": [
						"{{baseURL}}"
					],
					"path": [
						"pos"
					]
				},
				"description": "Push To Pay"
			},
			"response": []
		}
	]
}