简体   繁体   中英

The remote server returned an error: (401) Unauthorized. In Visa develope payment Gateway

I am getting an error while implementing visa cyber source using c# code and I have downloaded source code for that after creating a project but getting error may be x-pay-token was not generating correctly. Is there any way so I can verify my token or generate it with any API by passing parameter. Below code, I am using

string baseUri = "cybersource/";
string resourcePath = "v2/payments";

string xPayToken = GetXPayToken(resourcePath, "apikey=" + apikey, requestBodyString);static string GetXPayToken(string apiNameURI, string queryString, string requestBody)
{
    string timestamp = GetTimestamp();
    string sourceString = timestamp + apiNameURI + queryString + requestBody;
    string hash = GetHash(sourceString);
    string token = "xv2:" + timestamp + ":" + hash;
    return token;
} 

private static string GetHash(string data)
{
    string sharedSecret = ConfigurationManager.AppSettings["VisaPaySharedSecret"];
    var hashString = new HMACSHA256(Encoding.ASCII.GetBytes(sharedSecret));
    var hashbytes = hashString.ComputeHash(Encoding.ASCII.GetBytes(data));
    string digest = String.Empty;

    foreach (byte b in hashbytes)
    {

    }

    return digest;
}

This Iis the official Visa way to do it: https://developer.visa.com/pages/working-with-visa-apis/x-pay-token#sample_code_for_api_key__shared_secret_xpaytoken

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 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; 
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM