Удаленный сервер возвратил ошибку: (401) Несанкционированный. В Visa разработан платежный шлюз - PullRequest
1 голос
/ 07 февраля 2020

Я получаю сообщение об ошибке при реализации кибер-источника visa с использованием кода c#, и я скачал исходный код для этого после создания проекта, но при получении сообщения об ошибке x-pay-token не был сгенерирован правильно. Есть ли способ, чтобы я мог проверить свой токен или сгенерировать его с помощью любого API, передав параметр. Ниже код, я использую

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

1 Ответ

0 голосов
/ 07 февраля 2020

Это официальный способ получения визы: 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; 
}
...