Hello,
I'm having problems trying to test the customer rules registration api.
I had downloaded the Helloworld postman x-pay token example, it works, then I have changed it to hit the customer rules registration.
So my
Post URL looks like: https://sandbox.api.visa.com/vctc/customerrules/v1/consumertransactioncontrols?apiKey=xxx
Header: x-pay-token {{x-pay-token}}
Body raw: {"primaryAccountNumber": "498649053823XXXX"}
pre-request script looks like these:
var resourcePath = '/vctc/customerrules/v1/consumertransactioncontrols';
var queryParams = 'apiKey=xxx';
var sharedSecret = 'xxx';
var postBody = '{"primaryAccountNumber": "498649053823XXXX"}';
var timestamp = Math.floor(Date.now() / 1000);
var preHashString = timestamp + resourcePath + queryParams + postBody;
var hashString = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256(preHashString, sharedSecret));
var xPayToken = 'xv2:' + timestamp + ':' + hashString;
postman.setEnvironmentVariable('x-pay-token', xPayToken);
And I'm getting this response:
{"responseStatus":{"status":401,"code":"9159","severity":"ERROR","message":"Token Validation Failed","info":""}}
I already tried resourcePath like: core/customer, only customer, and consumertransactioncontrols but nothing works.
What I'm doing wrong?
Thanks
Javier.
Solved! Go to Solution
Hi @JavierSivack,
Can you please share the follow details:
Please also reference the X-Pay-Token Guide to assist with troubleshooting.
Hi Stacey,
Thank you for the response.
Here is the postman raw log (I have deleted de tokens and keys and replaced them by xxx):
POST /vctc/customerrules/v1/consumertransactioncontrols?apiKey=xxx HTTP/1.1
x-pay-token: xv2:xxx
Accept: application/json
Content-Type: application/json
User-Agent: PostmanRuntime/7.28.3
Postman-Token: ac3c4faf-2345-4c3a-b0c3-d0830410f382
Host: sandbox.api.visa.com
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 44
{"primaryAccountNumber": "498649053823XXXX"}
HTTP/1.1 401 Unauthorized
Server: nginx
Date: Fri, 13 Aug 2021 12:17:23 GMT
Content-Type: application/json
Content-Length: 112
Connection: keep-alive
X-SERVED-BY: l73c013
X-CORRELATION-ID: 1628857043_758_463564656_l73c013_VDP_WS
x-vdp-normalized-url: /vctc/customerrules/v1/consumertransactioncontrols
X-APP-STATUS: 401
x-vdp-authn-api-visa-id: PMC.100
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000;includeSubdomains
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: -1
{"responseStatus":{"status":401,"code":"9159","severity":"ERROR","message":"Token Validation Failed","info":""}}
and this is the pre-request script:
var resourcePath = 'vctc/customerrules/v1/consumertransactioncontrols';
var queryParams = 'apiKey=xxx';
var sharedSecret = 'xxx';
var postBody = '{"primaryAccountNumber": "498649053823XXXX"}';
var timestamp = Math.floor(Date.now() / 1000);
var preHashString = timestamp + resourcePath + queryParams + postBody;
var hashString = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA256(preHashString, sharedSecret));
var xPayToken = 'xv2:' + timestamp + ':' + hashString;
postman.setEnvironmentVariable('x-pay-token', xPayToken);
Thanks in advance,
Javier Sivack
Hi @JavierSivack,
Thank you for sharing the details and masking sensitive information. It seems the service is currently down and our tech team is investigating the issue. I will share an update as soon as I hear back from the team.
Hi @JavierSivack,
Thank you for your patience. The issue has been fixed, please retry and you should get a success response as below:
Method POST
Request
{"primaryAccountNumber": "498649053823XXXX"}
Response
{
"receivedTimestamp": "2021-08-18 21:14:32.66",
"resource": {
"lastUpdateTimeStamp": "2021-08-18 21:14:17",
"documentID": "ctc-vd-5a3ef463-b854-40d6-b9eb-c40cb399d122",
"createdOnDate": "2021-08-18 21:14:17.590"
},
"processingTimeinMs": 7
}
Response Header
Status Code: 200 OK
Server : nginx
Date : Wed, 18 Aug 2021 21:14:32 GMT
Content-Type : application/json;charset=UTF-8
Content-Length : 227
Connection : keep-alive
X-SERVED-BY : l73c014
X-CORRELATION-ID : 1629321272_595_1125181131_l73c014_VDP_WS
X-APP-STATUS : 200
X-Backside-Transport : OK OK,OK OK
Cache-Control : no-cache, no-store, must-revalidate
Pragma : no-cache
Expires : -1
Accept : application/json
X-Global-Transaction-ID : 458484be611d78388f8be487
X-Frame-Options : SAMEORIGIN
X-XSS-Protection : 1; mode=block
X-Content-Type-Options : nosniff
Content-Language : en-US
Strict-Transport-Security : max-age=2592000;includeSubdomains
X-XSS-Protection : 1; mode=block
X-Content-Type-Options : nosniff
Strict-Transport-Security : max-age=31536000;includeSubdomains;always
Hi @JavierSivack,
Can you please confirm the following:
1. Did you create a project in Visa Developer?
2. Did you add VTC to your project?
3. Did you choose the X-Pay-Token authentication method?
4. Are you using the API key and Shared Secret from the credential section of your project dashboard to connect to the VTC API (screenshot below).
Hi @JavierSivack,
Would you mind downloading our VDP Playground tool to quickly test your X-Pay Token? The Playground tool is available for download from your project dashboard page. Scroll down to General Assets => ZIP tab.
You can find the guide on Getting Started with VDC Playground from this blog post here - https://developer.visa.com/pages/visa-developer-center-playground
Once setup, the VTC API request and response should look like this: