Pin Payments API — «Ошибка аутентификации, поскольку удаленная сторона закрыла транспортный поток»

#c# #asp.net-mvc #api #ssl #payment-gateway

#c# #asp.net-mvc #API #ssl #платежный шлюз

Вопрос:

Я пытаюсь добавить платежи на свой веб-сайт, используя платежный шлюз Pin Payments. Мой сайт разрабатывается на MVC, и я использую библиотеку PinPayments C #, которая предлагается в документации API.

Я читал, что документация api, в которой указано, принимает только безопасные соединения. Поэтому я включил SSL в своем решении. Затем я убедился, что самозаверяющий сертификат, который генерирует IIS Express, добавлен к моим доверенным сертификатам. Это сработало один раз после того, как я доверял сертификату. Но с тех пор он продолжал терпеть неудачу. И он чередуется со следующими сообщениями об ошибках. Без внесения каких-либо изменений в код.

Существующее соединение было принудительно закрыто удаленным хостом

и

Сбой аутентификации, поскольку удаленная сторона закрыла транспортный поток.

Вот мой код, который выполняет запрос. Карта и плата создаются без ошибок, и затем выполняется строка ChargeResponse response = ps.Charge(зарядка);. Затем он переходит к коду запроса библиотеки pinpayments (ниже).

 [HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreditCard (CreditCardPayment model)
{
    if (ModelState.IsValid)
    {
        // get application
        Application application = db.Applications.Find(model.ApplicationdId);

        if (application != null)
        {
            PinService ps = new PinService(ConfigurationManager.AppSettings["Secret_API"]);

            var card = new Card();
            card.CardNumber = model.Number;
            card.CVC = model.Cvn;
            card.ExpiryMonth = model.ExpiryMonth;
            card.ExpiryYear = model.ExpiryYear;
            card.Name = model.Name;
            card.Address1 = model.AddressLine1;
            card.City = model.City;
            card.Country = model.Country;

            var charge = new PostCharge();
            charge.Description = "Visa Application "   application.Destination;
            charge.Amount = Convert.ToInt64(application.Total) * 100;  // Pin payments requires the value in cents
            charge.Card = card;
            charge.Currency = application.CurrencyCode;
            charge.Email = application.Customer.Email;
            charge.IPAddress = "127:0:0:1"; //Request.UserHostAddress; 

            ChargeResponse response = ps.Charge(charge);

            if (response.Charge != null amp;amp; response.Charge.Success)
            {
                // Update application with payment details.
            }
            else
            {
                // Do error stuff
            }
        }
    }

    return View(model);
}
  

Вот код, который находится в библиотеке Pin Payments, по которому запрос не выполняется. Он переходит к запуску первой строки, но затем переходит к строке var requestStream = request.GetRequestStream(); с сообщением об ошибке.

 private static WebRequest GetWebRequest(string url, string method, string postData)
{
    var request = HttpWebRequest.Create(url) as HttpWebRequest;
    request.Method = method;
    request.ContentType = "application/x-www-form-urlencoded";
    request.UserAgent = "C# API Wrapper v001";

    string apiKey = PinPaymentsConfig.GetApiKey();
    request.Headers["Authorization"] = "Basic "   Convert.ToBase64String(Encoding.Default.GetBytes(apiKey   ":"));

    if (postData != "")
    {
        var paramBytes = Encoding.UTF8.GetBytes(postData);
        request.ContentLength = paramBytes.Length;

        var requestStream = request.GetRequestStream();
        requestStream.Write(paramBytes, 0, paramBytes.Length);
    }
    return request;
}
  

Ответ №1:

Pin Payments прекратили поддержку TLS 1.0 в своем тестовом API и добавят его в свой живой API в январе 2017 года. Можете ли вы подтвердить, что вы подключаетесь через TLS 1.1 или выше?

Обратите внимание, поддержка TLS 1.1 и 1.2 была добавлена только в .NET 4.5.

Не стесняйтесь обращаться к нам по адресу support@pin.net.au для дальнейшей поддержки.

Комментарии:

1. Спасибо Pin-платежам. Это была проблема. Мне пришлось перестроить библиотеку как .net 4.5 и принудительно использовать метод GetWebRequest для использования TLS 1.2