2016-06-16 4 views
0

Я пытаюсь использовать RestSharp, чтобы отправить запрос на адрес Stripe API. Я строю свой запрос, но его нельзя отправить из-за ошибки аутентификации. Запрос возвращает код ошибки 0.Запрос Restsharp на Stripe дает ошибку SendFailure

Вот мой код:

var client = new RestClient("https://api.stripe.com"); 
    client.Authenticator = new HttpBasicAuthenticator (stripe_key, ""); 

    var request = new RestRequest("v1/tokens", Method.POST); 
    request.AddParameter("card[number]", card.number); 
    request.AddParameter("card[exp_month]", card.expMonth); 
    request.AddParameter("card[exp_year]", card.expYear); 
    request.AddParameter("card[cvc]", card.cvc); 

    IRestResponse response = client.Execute(request); 

    Log.trace ("Content : " + response.Content); 
    Log.trace ("Status code : " + response.StatusCode.ToString()); 
    Log.trace ("Error message : " + response.ErrorMessage); 

И мой выход:

Content : 
Status code : 0 
Error message : Error getting response stream (Write: The authentication or decryption has failed.): SendFailure 
+0

Невозможно ли использовать [Stripe.net] (https://github.com/jaymedavis/stripe.net)? – Ywain

+0

Нет, я работаю над Unity, которые поддерживают только .Net 2.0 ... –

+0

А, это слишком плохо. В соответствии с сообщением об ошибке проблема заключается в том, что ваша система не может подключиться к 'https: // api.stripe.com', потому что она не может проверить сертификат SSL, отправленный сервером API Stripe. Если возможно, попробуйте импортировать этот комплект сертификатов (из официальных привязок Ruby Ruby): https://raw.githubusercontent.com/stripe/stripe-ruby/master/lib/data/ca-certificates.crt – Ywain

ответ

0

Как я уже говорил в комментариях, я работаю на Unity 5.3, которые используют .NET 2.0. Кажется, что эта версия .NET имеет трудности с проверкой сертификатов SSL. Эта проблема запрещает SSL-соединение, поэтому у меня был статус ответа «0». Чтобы отменить эту проверку, я сделал это:

ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications); 

public bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certification, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) 
{ 
    return true; 
} 

Все сертификаты будут проверены, так что будьте осторожны ... В моем случае, я общаюсь с полоской API так, на мой взгляд, это нормально! ;)

+0

Возможно, вы захотите проверить, совместим ли это с PCI-совместимым, я предполагаю, что это потенциально не так. –