{"info":{"_postman_id":"b9208e50-cb19-4a5b-8afe-578442cabb4b","name":"API IsiKuota.com","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"description":"<html><head></head><body></body></html>","owner":"12871107","collectionId":"b9208e50-cb19-4a5b-8afe-578442cabb4b","publishedId":"2sBXwqtBjL","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-06-10T01:26:28.000Z"},"item":[{"name":"balance","event":[{"listen":"prerequest","script":{"id":"cd23a295-0169-4389-9ec7-2d18647c4519","exec":["const CryptoJS = require(\"crypto-js\");\r","\r","const apiKey    = pm.environment.get(\"api_key\");\r","const apiId     = pm.environment.get(\"api_id\");\r","const apiSecret = pm.environment.get(\"api_secret\");\r","const timestamp = Math.floor(Date.now() / 1000).toString();\r","\r","const AUTH_FIELDS  = [\"api_id\", \"timestamp\", \"signature\"];\r","const businessParams = {};\r","const bodyMode = pm.request.body?.mode;\r","\r","if (bodyMode === \"formdata\") {\r","    (pm.request.body.formdata?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","\r","} else if (bodyMode === \"raw\") {\r","    const raw = pm.request.body?.raw?.trim() || \"\";\r","    if (raw) {\r","        try {\r","            // replaceIn dulu agar {{variable}} jadi nilai asli sebelum di-parse\r","            const parsed = JSON.parse(pm.variables.replaceIn(raw));\r","            Object.entries(parsed).forEach(([k, v]) => {\r","                if (!AUTH_FIELDS.includes(k)) businessParams[k] = v;\r","            });\r","        } catch (e) {\r","            console.error(\"Gagal parse raw body:\", e.message);\r","        }\r","    }\r","\r","} else if (bodyMode === \"urlencoded\") {\r","    (pm.request.body.urlencoded?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","}\r","\r","// Canonical body: sort by key → JSON string\r","const sorted = Object.fromEntries(\r","    Object.entries(businessParams).sort(([a], [b]) => a.localeCompare(b))\r",");\r","const canonicalBody = Object.keys(sorted).length > 0 ? JSON.stringify(sorted) : \"\";\r","\r","// Sign\r","const bodyHash     = CryptoJS.SHA256(canonicalBody).toString(CryptoJS.enc.Hex);\r","const stringToSign = `${apiId}|${apiKey}|${timestamp}|${bodyHash}`;\r","const signature    = CryptoJS.HmacSHA256(stringToSign, apiSecret).toString(CryptoJS.enc.Hex);\r","\r","pm.environment.set(\"timestamp\", timestamp);\r","pm.environment.set(\"signature\", signature);\r","\r","console.log(\"bodyMode     :\", bodyMode);\r","console.log(\"canonicalBody:\", canonicalBody);\r","console.log(\"bodyHash     :\", bodyHash);\r","console.log(\"stringToSign :\", stringToSign);\r",""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"ad298010-d7b5-4e1e-bf5d-08197f77816e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n  \"api_id\": \"\",\r\n  \"timestamp\": {{timestamp}},\r\n  \"signature\": \"{{signature}}\"\r\n}"},"url":"{{base_url}}/balance","urlObject":{"path":["balance"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"ad298010-d7b5-4e1e-bf5d-08197f77816e"},{"name":"product list","event":[{"listen":"prerequest","script":{"id":"cd23a295-0169-4389-9ec7-2d18647c4519","exec":["const CryptoJS = require(\"crypto-js\");\r","\r","const apiKey    = pm.environment.get(\"api_key\");\r","const apiId     = pm.environment.get(\"api_id\");\r","const apiSecret = pm.environment.get(\"api_secret\");\r","const timestamp = Math.floor(Date.now() / 1000).toString();\r","\r","const AUTH_FIELDS  = [\"api_id\", \"timestamp\", \"signature\"];\r","const businessParams = {};\r","const bodyMode = pm.request.body?.mode;\r","\r","if (bodyMode === \"formdata\") {\r","    (pm.request.body.formdata?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","\r","} else if (bodyMode === \"raw\") {\r","    const raw = pm.request.body?.raw?.trim() || \"\";\r","    if (raw) {\r","        try {\r","            // replaceIn dulu agar {{variable}} jadi nilai asli sebelum di-parse\r","            const parsed = JSON.parse(pm.variables.replaceIn(raw));\r","            Object.entries(parsed).forEach(([k, v]) => {\r","                if (!AUTH_FIELDS.includes(k)) businessParams[k] = v;\r","            });\r","        } catch (e) {\r","            console.error(\"Gagal parse raw body:\", e.message);\r","        }\r","    }\r","\r","} else if (bodyMode === \"urlencoded\") {\r","    (pm.request.body.urlencoded?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","}\r","\r","// Canonical body: sort by key → JSON string\r","const sorted = Object.fromEntries(\r","    Object.entries(businessParams).sort(([a], [b]) => a.localeCompare(b))\r",");\r","const canonicalBody = Object.keys(sorted).length > 0 ? JSON.stringify(sorted) : \"\";\r","\r","// Sign\r","const bodyHash     = CryptoJS.SHA256(canonicalBody).toString(CryptoJS.enc.Hex);\r","const stringToSign = `${apiId}|${apiKey}|${timestamp}|${bodyHash}`;\r","const signature    = CryptoJS.HmacSHA256(stringToSign, apiSecret).toString(CryptoJS.enc.Hex);\r","\r","pm.environment.set(\"timestamp\", timestamp);\r","pm.environment.set(\"signature\", signature);\r","\r","console.log(\"bodyMode     :\", bodyMode);\r","console.log(\"canonicalBody:\", canonicalBody);\r","console.log(\"bodyHash     :\", bodyHash);\r","console.log(\"stringToSign :\", stringToSign);\r",""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"b89c4186-f825-4c21-bf98-59d9a669d5b7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n  \"api_id\": \"\",\r\n  \"timestamp\": {{timestamp}},\r\n  \"signature\": \"{{signature}}\",\r\n  \"cmd\": \"prepaid\"\r\n}"},"url":"{{base_url}}/products","urlObject":{"path":["products"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"b89c4186-f825-4c21-bf98-59d9a669d5b7"},{"name":"transaction","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["const CryptoJS = require(\"crypto-js\");\r\n\r\nconst apiKey    = pm.environment.get(\"api_key\");\r\nconst apiId     = pm.environment.get(\"api_id\");\r\nconst apiSecret = pm.environment.get(\"api_secret\");\r\nconst timestamp = Math.floor(Date.now() / 1000).toString();\r\n\r\nconst AUTH_FIELDS  = [\"api_id\", \"timestamp\", \"signature\"];\r\nconst businessParams = {};\r\nconst bodyMode = pm.request.body?.mode;\r\n\r\nif (bodyMode === \"formdata\") {\r\n    (pm.request.body.formdata?.members ?? []).forEach(item => {\r\n        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r\n            businessParams[item.key] = pm.variables.replaceIn(item.value);\r\n        }\r\n    });\r\n\r\n} else if (bodyMode === \"raw\") {\r\n    const raw = pm.request.body?.raw?.trim() || \"\";\r\n    if (raw) {\r\n        try {\r\n            // replaceIn dulu agar {{variable}} jadi nilai asli sebelum di-parse\r\n            const parsed = JSON.parse(pm.variables.replaceIn(raw));\r\n            Object.entries(parsed).forEach(([k, v]) => {\r\n                if (!AUTH_FIELDS.includes(k)) businessParams[k] = v;\r\n            });\r\n        } catch (e) {\r\n            console.error(\"Gagal parse raw body:\", e.message);\r\n        }\r\n    }\r\n\r\n} else if (bodyMode === \"urlencoded\") {\r\n    (pm.request.body.urlencoded?.members ?? []).forEach(item => {\r\n        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r\n            businessParams[item.key] = pm.variables.replaceIn(item.value);\r\n        }\r\n    });\r\n}\r\n\r\n// Canonical body: sort by key → JSON string\r\nconst sorted = Object.fromEntries(\r\n    Object.entries(businessParams).sort(([a], [b]) => a.localeCompare(b))\r\n);\r\nconst canonicalBody = Object.keys(sorted).length > 0 ? JSON.stringify(sorted) : \"\";\r\n\r\n// Sign\r\nconst bodyHash     = CryptoJS.SHA256(canonicalBody).toString(CryptoJS.enc.Hex);\r\nconst stringToSign = `${apiId}|${apiKey}|${timestamp}|${bodyHash}`;\r\nconst signature    = CryptoJS.HmacSHA256(stringToSign, apiSecret).toString(CryptoJS.enc.Hex);\r\n\r\npm.environment.set(\"timestamp\", timestamp);\r\npm.environment.set(\"signature\", signature);\r\n\r\nconsole.log(\"bodyMode     :\", bodyMode);\r\nconsole.log(\"canonicalBody:\", canonicalBody);\r\nconsole.log(\"bodyHash     :\", bodyHash);\r\nconsole.log(\"stringToSign :\", stringToSign);\r\n"]}}],"id":"701ad37d-59e8-4bdf-93ac-97baef5d117b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\r\n  \"api_id\": \"\",\r\n  \"timestamp\": {{timestamp}},\r\n  \"signature\": \"{{signature}}\",\r\n  \"cmd\": \"prepaid\",\r\n  \"code\": \"SGBDANA\",\r\n  \"customer_no\": \"081234567891\",\r\n  \"ref_id\": \"TRX2026\",\r\n  \"testing\": true,\r\n  \"nominal\": 1000\r\n}","options":{"raw":{"language":"text"}}},"url":"{{base_url}}/transaction","urlObject":{"path":["transaction"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"701ad37d-59e8-4bdf-93ac-97baef5d117b"},{"name":"cek tagihan","event":[{"listen":"prerequest","script":{"id":"cd23a295-0169-4389-9ec7-2d18647c4519","exec":["const CryptoJS = require(\"crypto-js\");\r","\r","const apiKey    = pm.environment.get(\"api_key\");\r","const apiId     = pm.environment.get(\"api_id\");\r","const apiSecret = pm.environment.get(\"api_secret\");\r","const timestamp = Math.floor(Date.now() / 1000).toString();\r","\r","const AUTH_FIELDS  = [\"api_id\", \"timestamp\", \"signature\"];\r","const businessParams = {};\r","const bodyMode = pm.request.body?.mode;\r","\r","if (bodyMode === \"formdata\") {\r","    (pm.request.body.formdata?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","\r","} else if (bodyMode === \"raw\") {\r","    const raw = pm.request.body?.raw?.trim() || \"\";\r","    if (raw) {\r","        try {\r","            // replaceIn dulu agar {{variable}} jadi nilai asli sebelum di-parse\r","            const parsed = JSON.parse(pm.variables.replaceIn(raw));\r","            Object.entries(parsed).forEach(([k, v]) => {\r","                if (!AUTH_FIELDS.includes(k)) businessParams[k] = v;\r","            });\r","        } catch (e) {\r","            console.error(\"Gagal parse raw body:\", e.message);\r","        }\r","    }\r","\r","} else if (bodyMode === \"urlencoded\") {\r","    (pm.request.body.urlencoded?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","}\r","\r","// Canonical body: sort by key → JSON string\r","const sorted = Object.fromEntries(\r","    Object.entries(businessParams).sort(([a], [b]) => a.localeCompare(b))\r",");\r","const canonicalBody = Object.keys(sorted).length > 0 ? JSON.stringify(sorted) : \"\";\r","\r","// Sign\r","const bodyHash     = CryptoJS.SHA256(canonicalBody).toString(CryptoJS.enc.Hex);\r","const stringToSign = `${apiId}|${apiKey}|${timestamp}|${bodyHash}`;\r","const signature    = CryptoJS.HmacSHA256(stringToSign, apiSecret).toString(CryptoJS.enc.Hex);\r","\r","pm.environment.set(\"timestamp\", timestamp);\r","pm.environment.set(\"signature\", signature);\r","\r","console.log(\"bodyMode     :\", bodyMode);\r","console.log(\"canonicalBody:\", canonicalBody);\r","console.log(\"bodyHash     :\", bodyHash);\r","console.log(\"stringToSign :\", stringToSign);\r",""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"47674dec-c3dc-457d-a01a-fcb0b2cb0df3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n  \"api_id\": \"\",\r\n  \"timestamp\": {{timestamp}},\r\n  \"signature\": \"{{signature}}\",\r\n  \"cmd\": \"inquiry\",\r\n  \"code\": \"PPLN\",\r\n  \"customer_no\": \"1234567890\",\r\n  \"ref_id\": \"TRX202608181\",\r\n  \"testing\": true\r\n}"},"url":"{{base_url}}/order","urlObject":{"path":["order"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"47674dec-c3dc-457d-a01a-fcb0b2cb0df3"},{"name":"bayar tagihan","event":[{"listen":"prerequest","script":{"id":"cd23a295-0169-4389-9ec7-2d18647c4519","exec":["const CryptoJS = require(\"crypto-js\");\r","\r","const apiKey    = pm.environment.get(\"api_key\");\r","const apiId     = pm.environment.get(\"api_id\");\r","const apiSecret = pm.environment.get(\"api_secret\");\r","const timestamp = Math.floor(Date.now() / 1000).toString();\r","\r","const AUTH_FIELDS  = [\"api_id\", \"timestamp\", \"signature\"];\r","const businessParams = {};\r","const bodyMode = pm.request.body?.mode;\r","\r","if (bodyMode === \"formdata\") {\r","    (pm.request.body.formdata?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","\r","} else if (bodyMode === \"raw\") {\r","    const raw = pm.request.body?.raw?.trim() || \"\";\r","    if (raw) {\r","        try {\r","            // replaceIn dulu agar {{variable}} jadi nilai asli sebelum di-parse\r","            const parsed = JSON.parse(pm.variables.replaceIn(raw));\r","            Object.entries(parsed).forEach(([k, v]) => {\r","                if (!AUTH_FIELDS.includes(k)) businessParams[k] = v;\r","            });\r","        } catch (e) {\r","            console.error(\"Gagal parse raw body:\", e.message);\r","        }\r","    }\r","\r","} else if (bodyMode === \"urlencoded\") {\r","    (pm.request.body.urlencoded?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","}\r","\r","// Canonical body: sort by key → JSON string\r","const sorted = Object.fromEntries(\r","    Object.entries(businessParams).sort(([a], [b]) => a.localeCompare(b))\r",");\r","const canonicalBody = Object.keys(sorted).length > 0 ? JSON.stringify(sorted) : \"\";\r","\r","// Sign\r","const bodyHash     = CryptoJS.SHA256(canonicalBody).toString(CryptoJS.enc.Hex);\r","const stringToSign = `${apiId}|${apiKey}|${timestamp}|${bodyHash}`;\r","const signature    = CryptoJS.HmacSHA256(stringToSign, apiSecret).toString(CryptoJS.enc.Hex);\r","\r","pm.environment.set(\"timestamp\", timestamp);\r","pm.environment.set(\"signature\", signature);\r","\r","console.log(\"bodyMode     :\", bodyMode);\r","console.log(\"canonicalBody:\", canonicalBody);\r","console.log(\"bodyHash     :\", bodyHash);\r","console.log(\"stringToSign :\", stringToSign);\r",""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"9ecc21a3-39de-4054-98b3-534752de163a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n  \"api_id\": \"\",\r\n  \"timestamp\": {{timestamp}},\r\n  \"signature\": \"{{signature}}\",\r\n  \"cmd\": \"pay\",\r\n  \"code\": \"PPLN\",\r\n  \"customer_no\": \"1234567890\",\r\n  \"ref_id\": \"TRX202608181\",\r\n  \"testing\": true\r\n}"},"url":"{{base_url}}/order","urlObject":{"path":["order"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"9ecc21a3-39de-4054-98b3-534752de163a"},{"name":"cek status","event":[{"listen":"prerequest","script":{"id":"cd23a295-0169-4389-9ec7-2d18647c4519","exec":["const CryptoJS = require(\"crypto-js\");\r","\r","const apiKey    = pm.environment.get(\"api_key\");\r","const apiId     = pm.environment.get(\"api_id\");\r","const apiSecret = pm.environment.get(\"api_secret\");\r","const timestamp = Math.floor(Date.now() / 1000).toString();\r","\r","const AUTH_FIELDS  = [\"api_id\", \"timestamp\", \"signature\"];\r","const businessParams = {};\r","const bodyMode = pm.request.body?.mode;\r","\r","if (bodyMode === \"formdata\") {\r","    (pm.request.body.formdata?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","\r","} else if (bodyMode === \"raw\") {\r","    const raw = pm.request.body?.raw?.trim() || \"\";\r","    if (raw) {\r","        try {\r","            // replaceIn dulu agar {{variable}} jadi nilai asli sebelum di-parse\r","            const parsed = JSON.parse(pm.variables.replaceIn(raw));\r","            Object.entries(parsed).forEach(([k, v]) => {\r","                if (!AUTH_FIELDS.includes(k)) businessParams[k] = v;\r","            });\r","        } catch (e) {\r","            console.error(\"Gagal parse raw body:\", e.message);\r","        }\r","    }\r","\r","} else if (bodyMode === \"urlencoded\") {\r","    (pm.request.body.urlencoded?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","}\r","\r","// Canonical body: sort by key → JSON string\r","const sorted = Object.fromEntries(\r","    Object.entries(businessParams).sort(([a], [b]) => a.localeCompare(b))\r",");\r","const canonicalBody = Object.keys(sorted).length > 0 ? JSON.stringify(sorted) : \"\";\r","\r","// Sign\r","const bodyHash     = CryptoJS.SHA256(canonicalBody).toString(CryptoJS.enc.Hex);\r","const stringToSign = `${apiId}|${apiKey}|${timestamp}|${bodyHash}`;\r","const signature    = CryptoJS.HmacSHA256(stringToSign, apiSecret).toString(CryptoJS.enc.Hex);\r","\r","pm.environment.set(\"timestamp\", timestamp);\r","pm.environment.set(\"signature\", signature);\r","\r","console.log(\"bodyMode     :\", bodyMode);\r","console.log(\"canonicalBody:\", canonicalBody);\r","console.log(\"bodyHash     :\", bodyHash);\r","console.log(\"stringToSign :\", stringToSign);\r",""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"34aa90af-0a02-4ef6-987b-9dbbee43b013","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n  \"api_id\": \"\",\r\n  \"timestamp\": {{timestamp}},\r\n  \"signature\": \"{{signature}}\",\r\n  \"ref_id\": \"TRX20261\"\r\n}"},"url":"{{base_url}}/status","urlObject":{"path":["status"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"34aa90af-0a02-4ef6-987b-9dbbee43b013"},{"name":"deposit Methods","event":[{"listen":"prerequest","script":{"id":"cd23a295-0169-4389-9ec7-2d18647c4519","exec":["const CryptoJS = require(\"crypto-js\");\r","\r","const apiKey    = pm.environment.get(\"api_key\");\r","const apiId     = pm.environment.get(\"api_id\");\r","const apiSecret = pm.environment.get(\"api_secret\");\r","const timestamp = Math.floor(Date.now() / 1000).toString();\r","\r","const AUTH_FIELDS  = [\"api_id\", \"timestamp\", \"signature\"];\r","const businessParams = {};\r","const bodyMode = pm.request.body?.mode;\r","\r","if (bodyMode === \"formdata\") {\r","    (pm.request.body.formdata?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","\r","} else if (bodyMode === \"raw\") {\r","    const raw = pm.request.body?.raw?.trim() || \"\";\r","    if (raw) {\r","        try {\r","            // replaceIn dulu agar {{variable}} jadi nilai asli sebelum di-parse\r","            const parsed = JSON.parse(pm.variables.replaceIn(raw));\r","            Object.entries(parsed).forEach(([k, v]) => {\r","                if (!AUTH_FIELDS.includes(k)) businessParams[k] = v;\r","            });\r","        } catch (e) {\r","            console.error(\"Gagal parse raw body:\", e.message);\r","        }\r","    }\r","\r","} else if (bodyMode === \"urlencoded\") {\r","    (pm.request.body.urlencoded?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","}\r","\r","// Canonical body: sort by key → JSON string\r","const sorted = Object.fromEntries(\r","    Object.entries(businessParams).sort(([a], [b]) => a.localeCompare(b))\r",");\r","const canonicalBody = Object.keys(sorted).length > 0 ? JSON.stringify(sorted) : \"\";\r","\r","// Sign\r","const bodyHash     = CryptoJS.SHA256(canonicalBody).toString(CryptoJS.enc.Hex);\r","const stringToSign = `${apiId}|${apiKey}|${timestamp}|${bodyHash}`;\r","const signature    = CryptoJS.HmacSHA256(stringToSign, apiSecret).toString(CryptoJS.enc.Hex);\r","\r","pm.environment.set(\"timestamp\", timestamp);\r","pm.environment.set(\"signature\", signature);\r","\r","console.log(\"bodyMode     :\", bodyMode);\r","console.log(\"canonicalBody:\", canonicalBody);\r","console.log(\"bodyHash     :\", bodyHash);\r","console.log(\"stringToSign :\", stringToSign);\r",""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"bd616030-77f0-4dc0-954f-b26c2ff06008","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n  \"api_id\": \"\",\r\n  \"timestamp\": {{timestamp}},\r\n  \"signature\": \"{{signature}}\",\r\n  \"cmd\": \"methods\"\r\n}"},"url":"{{base_url}}/deposit","urlObject":{"path":["deposit"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"bd616030-77f0-4dc0-954f-b26c2ff06008"},{"name":"deposit Ceate","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["const CryptoJS = require(\"crypto-js\");\r\n\r\nconst apiKey    = pm.environment.get(\"api_key\");\r\nconst apiId     = pm.environment.get(\"api_id\");\r\nconst apiSecret = pm.environment.get(\"api_secret\");\r\nconst timestamp = Math.floor(Date.now() / 1000).toString();\r\n\r\nconst AUTH_FIELDS  = [\"api_id\", \"timestamp\", \"signature\"];\r\nconst businessParams = {};\r\nconst bodyMode = pm.request.body?.mode;\r\n\r\nif (bodyMode === \"formdata\") {\r\n    (pm.request.body.formdata?.members ?? []).forEach(item => {\r\n        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r\n            businessParams[item.key] = pm.variables.replaceIn(item.value);\r\n        }\r\n    });\r\n\r\n} else if (bodyMode === \"raw\") {\r\n    const raw = pm.request.body?.raw?.trim() || \"\";\r\n    if (raw) {\r\n        try {\r\n            // replaceIn dulu agar {{variable}} jadi nilai asli sebelum di-parse\r\n            const parsed = JSON.parse(pm.variables.replaceIn(raw));\r\n            Object.entries(parsed).forEach(([k, v]) => {\r\n                if (!AUTH_FIELDS.includes(k)) businessParams[k] = v;\r\n            });\r\n        } catch (e) {\r\n            console.error(\"Gagal parse raw body:\", e.message);\r\n        }\r\n    }\r\n\r\n} else if (bodyMode === \"urlencoded\") {\r\n    (pm.request.body.urlencoded?.members ?? []).forEach(item => {\r\n        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r\n            businessParams[item.key] = pm.variables.replaceIn(item.value);\r\n        }\r\n    });\r\n}\r\n\r\n// Canonical body: sort by key → JSON string\r\nconst sorted = Object.fromEntries(\r\n    Object.entries(businessParams).sort(([a], [b]) => a.localeCompare(b))\r\n);\r\nconst canonicalBody = Object.keys(sorted).length > 0 ? JSON.stringify(sorted) : \"\";\r\n\r\n// Sign\r\nconst bodyHash     = CryptoJS.SHA256(canonicalBody).toString(CryptoJS.enc.Hex);\r\nconst stringToSign = `${apiId}|${apiKey}|${timestamp}|${bodyHash}`;\r\nconst signature    = CryptoJS.HmacSHA256(stringToSign, apiSecret).toString(CryptoJS.enc.Hex);\r\n\r\npm.environment.set(\"timestamp\", timestamp);\r\npm.environment.set(\"signature\", signature);\r\n\r\nconsole.log(\"bodyMode     :\", bodyMode);\r\nconsole.log(\"canonicalBody:\", canonicalBody);\r\nconsole.log(\"bodyHash     :\", bodyHash);\r\nconsole.log(\"stringToSign :\", stringToSign);\r\n"]}}],"id":"276b0942-7b5e-4c29-acfd-39e4565dbec8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\r\n  \"api_id\": \"\",\r\n  \"timestamp\": {{timestamp}},\r\n  \"signature\": \"{{signature}}\",\r\n  \"cmd\": \"create\",\r\n  \"code\": \"qrism\",\r\n  \"amount\": 1000\r\n}","options":{"raw":{"language":"text"}}},"url":"{{base_url}}/deposit","urlObject":{"path":["deposit"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"276b0942-7b5e-4c29-acfd-39e4565dbec8"},{"name":"deposit Status","event":[{"listen":"prerequest","script":{"id":"cd23a295-0169-4389-9ec7-2d18647c4519","exec":["const CryptoJS = require(\"crypto-js\");\r","\r","const apiKey    = pm.environment.get(\"api_key\");\r","const apiId     = pm.environment.get(\"api_id\");\r","const apiSecret = pm.environment.get(\"api_secret\");\r","const timestamp = Math.floor(Date.now() / 1000).toString();\r","\r","const AUTH_FIELDS  = [\"api_id\", \"timestamp\", \"signature\"];\r","const businessParams = {};\r","const bodyMode = pm.request.body?.mode;\r","\r","if (bodyMode === \"formdata\") {\r","    (pm.request.body.formdata?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","\r","} else if (bodyMode === \"raw\") {\r","    const raw = pm.request.body?.raw?.trim() || \"\";\r","    if (raw) {\r","        try {\r","            // replaceIn dulu agar {{variable}} jadi nilai asli sebelum di-parse\r","            const parsed = JSON.parse(pm.variables.replaceIn(raw));\r","            Object.entries(parsed).forEach(([k, v]) => {\r","                if (!AUTH_FIELDS.includes(k)) businessParams[k] = v;\r","            });\r","        } catch (e) {\r","            console.error(\"Gagal parse raw body:\", e.message);\r","        }\r","    }\r","\r","} else if (bodyMode === \"urlencoded\") {\r","    (pm.request.body.urlencoded?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","}\r","\r","// Canonical body: sort by key → JSON string\r","const sorted = Object.fromEntries(\r","    Object.entries(businessParams).sort(([a], [b]) => a.localeCompare(b))\r",");\r","const canonicalBody = Object.keys(sorted).length > 0 ? JSON.stringify(sorted) : \"\";\r","\r","// Sign\r","const bodyHash     = CryptoJS.SHA256(canonicalBody).toString(CryptoJS.enc.Hex);\r","const stringToSign = `${apiId}|${apiKey}|${timestamp}|${bodyHash}`;\r","const signature    = CryptoJS.HmacSHA256(stringToSign, apiSecret).toString(CryptoJS.enc.Hex);\r","\r","pm.environment.set(\"timestamp\", timestamp);\r","pm.environment.set(\"signature\", signature);\r","\r","console.log(\"bodyMode     :\", bodyMode);\r","console.log(\"canonicalBody:\", canonicalBody);\r","console.log(\"bodyHash     :\", bodyHash);\r","console.log(\"stringToSign :\", stringToSign);\r",""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"a084e624-ac81-4458-8962-2158f7268a96","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n  \"api_id\": \"\",\r\n  \"timestamp\": {{timestamp}},\r\n  \"signature\": \"{{signature}}\",\r\n  \"cmd\": \"status\",\r\n  \"ref_id\": \"DP202608181\"\r\n}"},"url":"{{base_url}}/deposit","urlObject":{"path":["deposit"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"a084e624-ac81-4458-8962-2158f7268a96"},{"name":"deposit Cancel","event":[{"listen":"prerequest","script":{"id":"cd23a295-0169-4389-9ec7-2d18647c4519","exec":["const CryptoJS = require(\"crypto-js\");\r","\r","const apiKey    = pm.environment.get(\"api_key\");\r","const apiId     = pm.environment.get(\"api_id\");\r","const apiSecret = pm.environment.get(\"api_secret\");\r","const timestamp = Math.floor(Date.now() / 1000).toString();\r","\r","const AUTH_FIELDS  = [\"api_id\", \"timestamp\", \"signature\"];\r","const businessParams = {};\r","const bodyMode = pm.request.body?.mode;\r","\r","if (bodyMode === \"formdata\") {\r","    (pm.request.body.formdata?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","\r","} else if (bodyMode === \"raw\") {\r","    const raw = pm.request.body?.raw?.trim() || \"\";\r","    if (raw) {\r","        try {\r","            // replaceIn dulu agar {{variable}} jadi nilai asli sebelum di-parse\r","            const parsed = JSON.parse(pm.variables.replaceIn(raw));\r","            Object.entries(parsed).forEach(([k, v]) => {\r","                if (!AUTH_FIELDS.includes(k)) businessParams[k] = v;\r","            });\r","        } catch (e) {\r","            console.error(\"Gagal parse raw body:\", e.message);\r","        }\r","    }\r","\r","} else if (bodyMode === \"urlencoded\") {\r","    (pm.request.body.urlencoded?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","}\r","\r","// Canonical body: sort by key → JSON string\r","const sorted = Object.fromEntries(\r","    Object.entries(businessParams).sort(([a], [b]) => a.localeCompare(b))\r",");\r","const canonicalBody = Object.keys(sorted).length > 0 ? JSON.stringify(sorted) : \"\";\r","\r","// Sign\r","const bodyHash     = CryptoJS.SHA256(canonicalBody).toString(CryptoJS.enc.Hex);\r","const stringToSign = `${apiId}|${apiKey}|${timestamp}|${bodyHash}`;\r","const signature    = CryptoJS.HmacSHA256(stringToSign, apiSecret).toString(CryptoJS.enc.Hex);\r","\r","pm.environment.set(\"timestamp\", timestamp);\r","pm.environment.set(\"signature\", signature);\r","\r","console.log(\"bodyMode     :\", bodyMode);\r","console.log(\"canonicalBody:\", canonicalBody);\r","console.log(\"bodyHash     :\", bodyHash);\r","console.log(\"stringToSign :\", stringToSign);\r",""],"type":"text/javascript","packages":{},"requests":{}}}],"id":"6ecfd1a7-f23e-4d4e-abe7-1c2ff189dc5d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n  \"api_id\": \"\",\r\n  \"timestamp\": {{timestamp}},\r\n  \"signature\": \"{{signature}}\",\r\n  \"cmd\": \"cancel\",\r\n  \"ref_id\": \"DP202608181\"\r\n}"},"url":"{{base_url}}/deposit","urlObject":{"path":["deposit"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"6ecfd1a7-f23e-4d4e-abe7-1c2ff189dc5d"},{"name":"account-inquiry","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["const CryptoJS = require(\"crypto-js\");\r\n\r\nconst apiKey    = pm.environment.get(\"api_key\");\r\nconst apiId     = pm.environment.get(\"api_id\");\r\nconst apiSecret = pm.environment.get(\"api_secret\");\r\nconst timestamp = Math.floor(Date.now() / 1000).toString();\r\n\r\nconst AUTH_FIELDS  = [\"api_id\", \"timestamp\", \"signature\"];\r\nconst businessParams = {};\r\nconst bodyMode = pm.request.body?.mode;\r\n\r\nif (bodyMode === \"formdata\") {\r\n    (pm.request.body.formdata?.members ?? []).forEach(item => {\r\n        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r\n            businessParams[item.key] = pm.variables.replaceIn(item.value);\r\n        }\r\n    });\r\n\r\n} else if (bodyMode === \"raw\") {\r\n    const raw = pm.request.body?.raw?.trim() || \"\";\r\n    if (raw) {\r\n        try {\r\n            // replaceIn dulu agar {{variable}} jadi nilai asli sebelum di-parse\r\n            const parsed = JSON.parse(pm.variables.replaceIn(raw));\r\n            Object.entries(parsed).forEach(([k, v]) => {\r\n                if (!AUTH_FIELDS.includes(k)) businessParams[k] = v;\r\n            });\r\n        } catch (e) {\r\n            console.error(\"Gagal parse raw body:\", e.message);\r\n        }\r\n    }\r\n\r\n} else if (bodyMode === \"urlencoded\") {\r\n    (pm.request.body.urlencoded?.members ?? []).forEach(item => {\r\n        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r\n            businessParams[item.key] = pm.variables.replaceIn(item.value);\r\n        }\r\n    });\r\n}\r\n\r\n// Canonical body: sort by key → JSON string\r\nconst sorted = Object.fromEntries(\r\n    Object.entries(businessParams).sort(([a], [b]) => a.localeCompare(b))\r\n);\r\nconst canonicalBody = Object.keys(sorted).length > 0 ? JSON.stringify(sorted) : \"\";\r\n\r\n// Sign\r\nconst bodyHash     = CryptoJS.SHA256(canonicalBody).toString(CryptoJS.enc.Hex);\r\nconst stringToSign = `${apiId}|${apiKey}|${timestamp}|${bodyHash}`;\r\nconst signature    = CryptoJS.HmacSHA256(stringToSign, apiSecret).toString(CryptoJS.enc.Hex);\r\n\r\npm.environment.set(\"timestamp\", timestamp);\r\npm.environment.set(\"signature\", signature);\r\n\r\nconsole.log(\"bodyMode     :\", bodyMode);\r\nconsole.log(\"canonicalBody:\", canonicalBody);\r\nconsole.log(\"bodyHash     :\", bodyHash);\r\nconsole.log(\"stringToSign :\", stringToSign);\r\n"]}}],"id":"dc4df2e1-997e-420d-a6df-06063ca862c3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\r\n  \"api_id\": \"\",\r\n  \"timestamp\": {{timestamp}},\r\n  \"signature\": \"{{signature}}\",\r\n  \"code\": \"SGBDANA1\",\r\n  \"customer_no\": \"123456789\"\r\n}","options":{"raw":{"language":"text"}}},"url":"{{base_url}}/account-inquiry","urlObject":{"path":["account-inquiry"],"host":["{{base_url}}"],"query":[],"variable":[]}},"response":[],"_postman_id":"dc4df2e1-997e-420d-a6df-06063ca862c3"}],"event":[{"listen":"prerequest","script":{"id":"16b302d6-d356-4b7b-8c9e-661379841b5c","type":"text/javascript","packages":{},"requests":{},"exec":["const CryptoJS = require(\"crypto-js\");\r","\r","const apiKey    = pm.environment.get(\"api_key\");\r","const apiId     = pm.environment.get(\"api_id\");\r","const apiSecret = pm.environment.get(\"api_secret\");\r","const timestamp = Math.floor(Date.now() / 1000).toString();\r","\r","const AUTH_FIELDS  = [\"api_id\", \"timestamp\", \"signature\"];\r","const businessParams = {};\r","const bodyMode = pm.request.body?.mode;\r","\r","if (bodyMode === \"formdata\") {\r","    (pm.request.body.formdata?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","\r","} else if (bodyMode === \"raw\") {\r","    const raw = pm.request.body?.raw?.trim() || \"\";\r","    if (raw) {\r","        try {\r","            // replaceIn dulu agar {{variable}} jadi nilai asli sebelum di-parse\r","            const parsed = JSON.parse(pm.variables.replaceIn(raw));\r","            Object.entries(parsed).forEach(([k, v]) => {\r","                if (!AUTH_FIELDS.includes(k)) businessParams[k] = v;\r","            });\r","        } catch (e) {\r","            console.error(\"Gagal parse raw body:\", e.message);\r","        }\r","    }\r","\r","} else if (bodyMode === \"urlencoded\") {\r","    (pm.request.body.urlencoded?.members ?? []).forEach(item => {\r","        if (item.enabled !== false && !AUTH_FIELDS.includes(item.key)) {\r","            businessParams[item.key] = pm.variables.replaceIn(item.value);\r","        }\r","    });\r","}\r","\r","// Canonical body: sort by key → JSON string\r","const sorted = Object.fromEntries(\r","    Object.entries(businessParams).sort(([a], [b]) => a.localeCompare(b))\r",");\r","const canonicalBody = Object.keys(sorted).length > 0 ? JSON.stringify(sorted) : \"\";\r","\r","// Sign\r","const bodyHash     = CryptoJS.SHA256(canonicalBody).toString(CryptoJS.enc.Hex);\r","const stringToSign = `${apiId}|${apiKey}|${timestamp}|${bodyHash}`;\r","const signature    = CryptoJS.HmacSHA256(stringToSign, apiSecret).toString(CryptoJS.enc.Hex);\r","\r","pm.environment.set(\"timestamp\", timestamp);\r","pm.environment.set(\"signature\", signature);\r","\r","console.log(\"bodyMode     :\", bodyMode);\r","console.log(\"canonicalBody:\", canonicalBody);\r","console.log(\"bodyHash     :\", bodyHash);\r","console.log(\"stringToSign :\", stringToSign);\r",""]}},{"listen":"test","script":{"id":"f1afd5e7-3488-4867-b366-da908e02f6e9","type":"text/javascript","packages":{},"requests":{},"exec":[""]}}],"variable":[{"key":"api_id","value":""},{"key":"api_key","value":""},{"key":"api_secret","value":""}]}