Chilkat Online Tools

DataFlex / GP-API Collection / Access Token

Back to Collection Items

Use ChilkatAx-win32.pkg

Procedure Test
    Handle hoHttp
    Boolean iSuccess
    Variant vJson
    Handle hoJson
    Variant vResp
    Handle hoResp
    String sTemp1
    Integer iTemp1
    Boolean bTemp1

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    Get Create (RefClass(cComChilkatHttp)) To hoHttp
    If (Not(IsComObjectCreated(hoHttp))) Begin
        Send CreateComObject of hoHttp
    End

    // Use this online tool to generate code from sample JSON: Generate Code to Create JSON

    // The following JSON is sent in the request body.

    // {
    //   "app_id": "{{app_id}}",
    //   "secret": "{{secret}}",
    //   "grant_type": "client_credentials",
    //   "nonce": "{{nonce}}"
    // }

    Get Create (RefClass(cComChilkatJsonObject)) To hoJson
    If (Not(IsComObjectCreated(hoJson))) Begin
        Send CreateComObject of hoJson
    End
    Get ComUpdateString Of hoJson "app_id" "{{app_id}}" To iSuccess
    Get ComUpdateString Of hoJson "secret" "{{secret}}" To iSuccess
    Get ComUpdateString Of hoJson "grant_type" "client_credentials" To iSuccess
    Get ComUpdateString Of hoJson "nonce" "{{nonce}}" To iSuccess

    Send ComSetRequestHeader To hoHttp "Content-Type" "application/json"
    Send ComSetRequestHeader To hoHttp "X-GP-Version" "{{version}}"

    Get pvComObject of hoJson to vJson
    Get ComPostJson3 Of hoHttp "https://{{url}}/ucp/accesstoken" "application/json" vJson To vResp
    If (IsComObject(vResp)) Begin
        Get Create (RefClass(cComChilkatHttpResponse)) To hoResp
        Set pvComObject Of hoResp To vResp
    End
    Get ComLastMethodSuccess Of hoHttp To bTemp1
    If (bTemp1 = False) Begin
        Get ComLastErrorText Of hoHttp To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComStatusCode Of hoResp To iTemp1
    Showln iTemp1
    Get ComBodyStr Of hoResp To sTemp1
    Showln sTemp1
    Send Destroy of hoResp


End_Procedure

Curl Command

curl -X POST
	-H "Content-Type: application/json"
	-H "X-GP-Version: {{version}}"
	-d '{
    "app_id": "{{app_id}}",
    "secret": "{{secret}}",
    "grant_type": "client_credentials",
    "nonce": "{{nonce}}"
}'
https://{{url}}/ucp/accesstoken

Postman Collection Item JSON

{
  "name": "Access Token",
  "event": [
    {
      "listen": "test",
      "script": {
        "exec": [
          "pm.environment.unset(\"token\");\r",
          "\r",
          "var jsonData = JSON.parse(responseBody);\r",
          "\r",
          "postman.setEnvironmentVariable(\"token\", jsonData.token);\r",
          "tests[\"Token is \" + pm.environment.get(\"token\")] = true;\r",
          "\r",
          "\r",
          "\r",
          "postman.setEnvironmentVariable(\"mer_id\", jsonData.scope.merchant_id);\r",
          "\r",
          "postman.setEnvironmentVariable(\"tra_id\", jsonData.scope.accounts[0].id);\r",
          "\r",
          "postman.setEnvironmentVariable(\"acc_name\", jsonData.scope.accounts[0].name);\r",
          "\r",
          "if (jsonData.scope.accounts[1].name == 'tokenization' || jsonData.scope.accounts[1].name == 'Tokenization') {\r",
          "postman.setEnvironmentVariable(\"token_acc_name\", jsonData.scope.accounts[1].name);\r",
          "}\r",
          "\r",
          "\r",
          "if (jsonData.scope.accounts[2].name == 'dispute_management' || jsonData.scope.accounts[2].name == 'Dispute Management') {\r",
          "postman.setEnvironmentVariable(\"dispute_acc_name\", jsonData.scope.accounts[2].name);\r",
          "}\r",
          "\r",
          "if (jsonData.scope.accounts[3].name == 'settlement_reporting' || jsonData.scope.accounts[3].name == 'Settlement Reporting') {\r",
          "postman.setEnvironmentVariable(\"settlement_acc_name\", jsonData.scope.accounts[3].name);\r",
          "}\r",
          "\r",
          "tests[\"Token is \" + pm.environment.get(\"token\")] = true;\r",
          "\r",
          "\r",
          "\r",
          "tests[\"Response time is acceptable\"] = _.inRange(responseTime, 100, 1500); \r",
          "\r",
          "\r",
          "pm.test(\"Successful POST request\", function () {\r",
          "    pm.expect(pm.response.code).to.be.oneOf([200,201,202]);\r",
          "});\r",
          "\r",
          "pm.test(\"Status code name has string\", function () {\r",
          "    pm.response.to.have.status(\"OK\");\r",
          "});\r",
          "\r",
          "\r",
          ""
        ],
        "type": "text/javascript"
      }
    },
    {
      "listen": "prerequest",
      "script": {
        "exec": [
          "var date = new Date();",
          "",
          "",
          "nonceDate = date.toISOString(); ",
          "pm.environment.set(\"nonce\", nonceDate);",
          "",
          "var nonce = pm.environment.get(\"nonce\");",
          "",
          "",
          "var app_key = pm.environment.get(\"app_key\");",
          "var s512Txt = nonce +''+app_key;",
          "var secret = CryptoJS.SHA512(s512Txt).toString(CryptoJS.enc.Hex);",
          "",
          "//var secret = SHA512(s512Txt);",
          "pm.environment.set(\"secret\", secret);",
          "",
          "",
          "",
          "/*",
          "",
          "NOT USE as replace this function with CryptoJS.SHA512",
          "",
          "* Secure Hash Algorithm (SHA512)",
          "* http://www.happycode.info/",
          "*/",
          "",
          "function SHA512(str) {",
          " function int64(msint_32, lsint_32) {",
          " this.highOrder = msint_32;",
          " this.lowOrder = lsint_32;",
          " }",
          "",
          " var H = [new int64(0x6a09e667, 0xf3bcc908), new int64(0xbb67ae85, 0x84caa73b),",
          " new int64(0x3c6ef372, 0xfe94f82b), new int64(0xa54ff53a, 0x5f1d36f1),",
          " new int64(0x510e527f, 0xade682d1), new int64(0x9b05688c, 0x2b3e6c1f),",
          " new int64(0x1f83d9ab, 0xfb41bd6b), new int64(0x5be0cd19, 0x137e2179)];",
          "",
          " var K = [new int64(0x428a2f98, 0xd728ae22), new int64(0x71374491, 0x23ef65cd),",
          " new int64(0xb5c0fbcf, 0xec4d3b2f), new int64(0xe9b5dba5, 0x8189dbbc),",
          " new int64(0x3956c25b, 0xf348b538), new int64(0x59f111f1, 0xb605d019),",
          " new int64(0x923f82a4, 0xaf194f9b), new int64(0xab1c5ed5, 0xda6d8118),",
          " new int64(0xd807aa98, 0xa3030242), new int64(0x12835b01, 0x45706fbe),",
          " new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, 0xd5ffb4e2),",
          " new int64(0x72be5d74, 0xf27b896f), new int64(0x80deb1fe, 0x3b1696b1),",
          " new int64(0x9bdc06a7, 0x25c71235), new int64(0xc19bf174, 0xcf692694),",
          " new int64(0xe49b69c1, 0x9ef14ad2), new int64(0xefbe4786, 0x384f25e3),",
          " new int64(0x0fc19dc6, 0x8b8cd5b5), new int64(0x240ca1cc, 0x77ac9c65),",
          " new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),",
          " new int64(0x5cb0a9dc, 0xbd41fbd4), new int64(0x76f988da, 0x831153b5),",
          " new int64(0x983e5152, 0xee66dfab), new int64(0xa831c66d, 0x2db43210),",
          " new int64(0xb00327c8, 0x98fb213f), new int64(0xbf597fc7, 0xbeef0ee4),",
          " new int64(0xc6e00bf3, 0x3da88fc2), new int64(0xd5a79147, 0x930aa725),",
          " new int64(0x06ca6351, 0xe003826f), new int64(0x14292967, 0x0a0e6e70),",
          " new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),",
          " new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, 0x9d95b3df),",
          " new int64(0x650a7354, 0x8baf63de), new int64(0x766a0abb, 0x3c77b2a8),",
          " new int64(0x81c2c92e, 0x47edaee6), new int64(0x92722c85, 0x1482353b),",
          " new int64(0xa2bfe8a1, 0x4cf10364), new int64(0xa81a664b, 0xbc423001),",
          " new int64(0xc24b8b70, 0xd0f89791), new int64(0xc76c51a3, 0x0654be30),",
          " new int64(0xd192e819, 0xd6ef5218), new int64(0xd6990624, 0x5565a910),",
          " new int64(0xf40e3585, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),",
          " new int64(0x19a4c116, 0xb8d2d0c8), new int64(0x1e376c08, 0x5141ab53),",
          " new int64(0x2748774c, 0xdf8eeb99), new int64(0x34b0bcb5, 0xe19b48a8),",
          " new int64(0x391c0cb3, 0xc5c95a63), new int64(0x4ed8aa4a, 0xe3418acb),",
          " new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, 0xd6b2b8a3),",
          " new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),",
          " new int64(0x84c87814, 0xa1f0ab72), new int64(0x8cc70208, 0x1a6439ec),",
          " new int64(0x90befffa, 0x23631e28), new int64(0xa4506ceb, 0xde82bde9),",
          " new int64(0xbef9a3f7, 0xb2c67915), new int64(0xc67178f2, 0xe372532b),",
          " new int64(0xca273ece, 0xea26619c), new int64(0xd186b8c7, 0x21c0c207),",
          " new int64(0xeada7dd6, 0xcde0eb1e), new int64(0xf57d4f7f, 0xee6ed178),",
          " new int64(0x06f067aa, 0x72176fba), new int64(0x0a637dc5, 0xa2c898a6),",
          " new int64(0x113f9804, 0xbef90dae), new int64(0x1b710b35, 0x131c471b),",
          " new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),",
          " new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, 0x9c100d4c),",
          " new int64(0x4cc5d4be, 0xcb3e42b6), new int64(0x597f299c, 0xfc657e2a),",
          " new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)];",
          "",
          " var W = new Array(64);",
          " var a, b, c, d, e, f, g, h, i, j;",
          " var T1, T2;",
          " var charsize = 8;",
          "",
          " function utf8_encode(str) {",
          " return unescape(encodeURIComponent(str));",
          " }",
          "",
          " function str2binb(str) {",
          " var bin = [];",
          " var mask = (1 << charsize) - 1;",
          " var len = str.length * charsize;",
          "",
          " for (var i = 0; i < len; i += charsize) {",
          " bin[i >> 5] |= (str.charCodeAt(i / charsize) & mask) << (32 - charsize - (i % 32));",
          " }",
          "",
          " return bin;",
          " }",
          "",
          " function binb2hex(binarray) {",
          " var hex_tab = '0123456789abcdef';",
          " var str = '';",
          " var length = binarray.length * 4;",
          " var srcByte;",
          "",
          " for (var i = 0; i < length; i += 1) {",
          " srcByte = binarray[i >> 2] >> ((3 - (i % 4)) * 8);",
          " str += hex_tab.charAt((srcByte >> 4) & 0xF) + hex_tab.charAt(srcByte & 0xF);",
          " }",
          "",
          " return str;",
          " }",
          "",
          " function safe_add_2(x, y) {",
          " var lsw, msw, lowOrder, highOrder;",
          "",
          " lsw = (x.lowOrder & 0xFFFF) + (y.lowOrder & 0xFFFF);",
          " msw = (x.lowOrder >>> 16) + (y.lowOrder >>> 16) + (lsw >>> 16);",
          " lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);",
          "",
          " lsw = (x.highOrder & 0xFFFF) + (y.highOrder & 0xFFFF) + (msw >>> 16);",
          " msw = (x.highOrder >>> 16) + (y.highOrder >>> 16) + (lsw >>> 16);",
          " highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);",
          "",
          " return new int64(highOrder, lowOrder);",
          " }",
          "",
          " function safe_add_4(a, b, c, d) {",
          " var lsw, msw, lowOrder, highOrder;",
          "",
          " lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF);",
          " msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (lsw >>> 16);",
          " lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);",
          "",
          " lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (msw >>> 16);",
          " msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (lsw >>> 16);",
          " highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);",
          "",
          " return new int64(highOrder, lowOrder);",
          " }",
          "",
          " function safe_add_5(a, b, c, d, e) {",
          " var lsw, msw, lowOrder, highOrder;",
          "",
          " lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF) + (e.lowOrder & 0xFFFF);",
          " msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (e.lowOrder >>> 16) + (lsw >>> 16);",
          " lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);",
          "",
          " lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (e.highOrder & 0xFFFF) + (msw >>> 16);",
          " msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (e.highOrder >>> 16) + (lsw >>> 16);",
          " highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);",
          "",
          " return new int64(highOrder, lowOrder);",
          " }",
          "",
          " function maj(x, y, z) {",
          " return new int64(",
          " (x.highOrder & y.highOrder) ^ (x.highOrder & z.highOrder) ^ (y.highOrder & z.highOrder),",
          " (x.lowOrder & y.lowOrder) ^ (x.lowOrder & z.lowOrder) ^ (y.lowOrder & z.lowOrder)",
          " );",
          " }",
          "",
          " function ch(x, y, z) {",
          " return new int64(",
          " (x.highOrder & y.highOrder) ^ (~x.highOrder & z.highOrder),",
          " (x.lowOrder & y.lowOrder) ^ (~x.lowOrder & z.lowOrder)",
          " );",
          " }",
          "",
          " function rotr(x, n) {",
          " if (n <= 32) {",
          " return new int64(",
          " (x.highOrder >>> n) | (x.lowOrder << (32 - n)),",
          " (x.lowOrder >>> n) | (x.highOrder << (32 - n))",
          " );",
          " } else {",
          " return new int64(",
          " (x.lowOrder >>> n) | (x.highOrder << (32 - n)),",
          " (x.highOrder >>> n) | (x.lowOrder << (32 - n))",
          " );",
          " }",
          " }",
          "",
          " function sigma0(x) {",
          " var rotr28 = rotr(x, 28);",
          " var rotr34 = rotr(x, 34);",
          " var rotr39 = rotr(x, 39);",
          "",
          " return new int64(",
          " rotr28.highOrder ^ rotr34.highOrder ^ rotr39.highOrder,",
          " rotr28.lowOrder ^ rotr34.lowOrder ^ rotr39.lowOrder",
          " );",
          " }",
          "",
          " function sigma1(x) {",
          " var rotr14 = rotr(x, 14);",
          " var rotr18 = rotr(x, 18);",
          " var rotr41 = rotr(x, 41);",
          "",
          " return new int64(",
          " rotr14.highOrder ^ rotr18.highOrder ^ rotr41.highOrder,",
          " rotr14.lowOrder ^ rotr18.lowOrder ^ rotr41.lowOrder",
          " );",
          " }",
          "",
          " function gamma0(x) {",
          " var rotr1 = rotr(x, 1), rotr8 = rotr(x, 8), shr7 = shr(x, 7);",
          "",
          " return new int64(",
          " rotr1.highOrder ^ rotr8.highOrder ^ shr7.highOrder,",
          " rotr1.lowOrder ^ rotr8.lowOrder ^ shr7.lowOrder",
          " );",
          " }",
          "",
          " function gamma1(x) {",
          " var rotr19 = rotr(x, 19);",
          " var rotr61 = rotr(x, 61);",
          " var shr6 = shr(x, 6);",
          "",
          " return new int64(",
          " rotr19.highOrder ^ rotr61.highOrder ^ shr6.highOrder,",
          " rotr19.lowOrder ^ rotr61.lowOrder ^ shr6.lowOrder",
          " );",
          " }",
          "",
          " function shr(x, n) {",
          " if (n <= 32) {",
          " return new int64(",
          " x.highOrder >>> n,",
          " x.lowOrder >>> n | (x.highOrder << (32 - n))",
          " );",
          " } else {",
          " return new int64(",
          " 0,",
          " x.highOrder << (32 - n)",
          " );",
          " }",
          " }",
          "",
          " str = utf8_encode(str);",
          " strlen = str.length*charsize;",
          " str = str2binb(str);",
          "",
          " str[strlen >> 5] |= 0x80 << (24 - strlen % 32);",
          " str[(((strlen + 128) >> 10) << 5) + 31] = strlen;",
          "",
          " for (var i = 0; i < str.length; i += 32) {",
          " a = H[0];",
          " b = H[1];",
          " c = H[2];",
          " d = H[3];",
          " e = H[4];",
          " f = H[5];",
          " g = H[6];",
          " h = H[7];",
          "",
          " for (var j = 0; j < 80; j++) {",
          " if (j < 16) {",
          " W[j] = new int64(str[j*2 + i], str[j*2 + i + 1]);",
          " } else {",
          " W[j] = safe_add_4(gamma1(W[j - 2]), W[j - 7], gamma0(W[j - 15]), W[j - 16]);",
          " }",
          "",
          " T1 = safe_add_5(h, sigma1(e), ch(e, f, g), K[j], W[j]);",
          " T2 = safe_add_2(sigma0(a), maj(a, b, c));",
          " h = g;",
          " g = f;",
          " f = e;",
          " e = safe_add_2(d, T1);",
          " d = c;",
          " c = b;",
          " b = a;",
          " a = safe_add_2(T1, T2);",
          " }",
          "",
          " H[0] = safe_add_2(a, H[0]);",
          " H[1] = safe_add_2(b, H[1]);",
          " H[2] = safe_add_2(c, H[2]);",
          " H[3] = safe_add_2(d, H[3]);",
          " H[4] = safe_add_2(e, H[4]);",
          " H[5] = safe_add_2(f, H[5]);",
          " H[6] = safe_add_2(g, H[6]);",
          " H[7] = safe_add_2(h, H[7]);",
          " }",
          "",
          " var binarray = [];",
          " for (var i = 0; i < H.length; i++) {",
          " binarray.push(H[i].highOrder);",
          " binarray.push(H[i].lowOrder);",
          " }",
          " return binb2hex(binarray);",
          "}",
          ""
        ],
        "type": "text/javascript"
      }
    }
  ],
  "protocolProfileBehavior": {
    "disabledSystemHeaders": {
      "content-type": true
    }
  },
  "request": {
    "method": "POST",
    "header": [
      {
        "key": "Content-Type",
        "name": "Content-Type",
        "value": "application/json",
        "type": "text"
      },
      {
        "key": "X-GP-Version",
        "type": "text",
        "value": "{{version}}"
      }
    ],
    "body": {
      "mode": "raw",
      "raw": "{\n    \"app_id\": \"{{app_id}}\",\n    \"secret\": \"{{secret}}\",\n    \"grant_type\": \"client_credentials\",\n    \"nonce\": \"{{nonce}}\"\n}"
    },
    "url": {
      "raw": "https://{{url}}/ucp/accesstoken",
      "protocol": "https",
      "host": [
        "{{url}}"
      ],
      "path": [
        "ucp",
        "accesstoken"
      ]
    },
    "description": "An Access Token Request must be done in order to execute any request to the GP-API. As you can see in the body of the request there are 3 variables:\r\n- app_id: This is your individual app id that was given to you when your app was created in the dev portal. It indicates to the GP-API what accounts and permissions you have access to e.g. Settlements, Disputes etc.\r\n- nonce: this is a random unique string used to calculate the secret. In this case we use the current date and time in string format for nonce. Every time access token is run, value is unique due to time change.\r\n- secret: as the app_key is never sent over the Internet, we use encryption to hide the app_key, SHA512(nonce + app_key). This function can be seen in Pre-request Script for this request. GP-API decrypts SHA512 and if app_key matches one on GP-API record, then access token is given.\r\n- seconds_to_expire: this is how long you want your access token to be valid in seconds. We do not recommend having an access token live for more than 24hrs.\r\n\r\n\r\nIn the response received back, you will see the merchant_id along with the accounts and permissions available for the current merchant e.g Settlement Reporting or Tokenization etc.. The merchant_id is associated with your app and it determines what accounts of the API your app has access to and by extension, the resources and permissions.\r\n\r\nFor more info on retrieving an access token, visit: https://developer.globalpay.com/api/access-token#/Create%20Access%20Token/post_accesstoken"
  },
  "response": [
  ]
}