public static string visaUrl = "https://sandbox.api.visa.com/";
public static string apiKey = "apiKey ";
public static string sharedSecret = "sharedSecret ";
[FunctionName("XPayTokenGenerator")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
//var resourcepath = "https://sandbox.api.visa.com/visacardeligibilityservices/v1/cardeligibility/validate";
//var apikey = "";
//var requestBody = "";
// token = getXPayToken(resourcepath, apikey, requestBody);
string responseMessage = string.IsNullOrEmpty(name)
? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
: $"Hello, {name}";
string queryString = "apiKey=" + apiKey;
String status = DoXPayTokenCall("vdp/", "helloworld", queryString, "POST", null, null);
return new OkObjectResult(responseMessage);
}
private static string GetCorrelationId()
{
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var random = new Random();
return new string(Enumerable.Repeat(chars, 12).Select(s => s[random.Next(s.Length)]).ToArray()) + "_SC";
}
public static string DoXPayTokenCall(string baseUri, string resourcePath, string queryString, string method, string testInfo, string requestBodyString)
{
string requestURL = visaUrl + baseUri + resourcePath + "?" + "apikey=" + apiKey;
string apikey = apiKey;
//LogRequest(requestURL, requestBodyString);
// Create the POST request object
string statusCode = "";
HttpWebRequest request = WebRequest.Create(requestURL) as HttpWebRequest;
request.Method = method;
if (method.Equals("POST") || method.Equals("PUT"))
{
request.ContentType = "application/json";
request.Accept = "application/json";
// Load the body for the post request
var requestStringBytes = Encoding.UTF8.GetBytes(requestBodyString);
request.GetRequestStream().Write(requestStringBytes, 0, requestStringBytes.Length);
}
string xPayToken = getXPayToken(resourcePath, "apikey=" + apikey, requestBodyString);
request.Headers["x-pay-token"] = xPayToken;
request.Headers["ex-correlation-id"] = GetCorrelationId();
try
{
// Make the call
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
//LogResponse(testInfo, response);
statusCode = response.StatusCode.ToString();
}
}
catch (WebException e)
{
if (e.Response is HttpWebResponse)
{
HttpWebResponse response = (HttpWebResponse)e.Response;
//LogResponse(testInfo, response);
statusCode = response.StatusCode.ToString();
}
}
return statusCode;
}
private static string getTimestamp()
{
long timeStamp = ((long)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds) / 1000;
return timeStamp.ToString();
}
private static string getHash(string data)
{
var SHARED_SECRET = "s4z1q3VYqWAS7-{3mpCQ1rwDCD/7w5UYoI/JV/g-";
var hashString = new HMACSHA256(Encoding.ASCII.GetBytes(SHARED_SECRET));
var hashbytes = hashString.ComputeHash(Encoding.ASCII.GetBytes(data));
string digest = String.Empty;
foreach (byte b in hashbytes)
{
digest += b.ToString("x2");
}
return digest;
}
private static string getXPayToken(string resourcePath, string queryString, string requestBody)
{
string timestamp = getTimestamp();
string sourceString = timestamp + resourcePath + queryString + requestBody;
string hash = getHash(sourceString);
string token = "xv2:" + timestamp + ":" + hash;
return token;
}
I tried to use the X-Pay token for visa card eligibility service I am getting unauthorized issue,
"responseStatus": {
""status"": 401
""code"": ""9201""
""severity"": ""ERROR""
""message"": ""Token Validation Failed""
""info"": """"
}"
Solved! Go to Solution
Hi @shivang,
Thank you for your question. One of our agents will get back to you as soon as possible. In the meantime, if any community members know a solution, please reply to this thread.
Hi @shivang,
Please provide the information below for investigation of the error.
1. End Point
2. Request Header
3. Request Body
4. Response Header (include the x-correlation-id)
5. Response Body
You can find the x-correlation-id in the response header.