Requet
GET https://sandbox.api.visa.com/vdp/helloworld?apikey=YHTAJGU4LF6K3T4RNLJI21-voLG2WO-3lludlAJRtNNz0U38o HTTP/1.1
Accept-Encoding: gzip,deflate
x-pay-token: xv2:1738835743:9919e79424e1911256accd806e1ef3c4c94d5bd015fbe6c23efdc116eb1d6d27
Host: sandbox.api.visa.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.5 (Java/17.0.12)
Response
{"responseStatus": {
"status": 401,
"code": "9201",
"severity": "ERROR",
"message": "Token Validation Failed",
"info": ""
}}
Groovy Script
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
def hmac(String secretKey, String data) {
Mac mac = Mac.getInstance("HmacSHA256")
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(), "HmacSHA256")
mac.init(secretKeySpec)
byte[] digest = mac.doFinal(data.getBytes())
return digest
}
def APIKey = 'YHTAJGU4LF6K3T4RNLJI21-voLG2WO-3lludlAJRtNNz0U38o'
def sharedSecret = 'Xx4+H7DKQavhemqNeQVyC0IZad0r8yPEfBoCf-W/'
def URI = "helloworld"
def QS = "apikey="+APIKey
def timeStampUTC = String.valueOf(System.currentTimeMillis().intdiv(1000L))
def payload = ""
def HMACDigest = hmac(sharedSecret, timeStampUTC + URI + QS + payload)
def encodedDigest = HMACDigest.encodeHex().toString()
def XPayToken = "xv2:"+ timeStampUTC + ":" + encodedDigest
testRunner.testCase.setPropertyValue("xpayToken", XPayToken)
log.info(XPayToken)