Подтвердить что ты не робот

PayPal.ConnectionException: неверный ответ HTTP: запрос был прерван: не удалось создать безопасный канал SSL/TLS

У меня проблема с PayPal REST Api, иногда она работает нормально! (а на песочнице он работает на 100%). Но на живой системе при подключении к живой системе PayPal. Иногда я получаю следующую ошибку.

PayPal.ConnectionException: Invalid HTTP response: The request was aborted: Could not create SSL/TLS secure channel. at 
PayPal.Api.HttpConnection.Execute(String payLoad, HttpWebRequest 
    httpRequest) at PayPal.Api.PayPalResource.ConfigureAndExecute[T]
    (APIContext apiContext, HttpMethod httpMethod, String resource, String 
    payload, String endpoint, Boolean setAuthorizationHeader) at 
    PayPal.Api.OAuthTokenCredential.GenerateOAuthToken() at 
    PayPal.Api.OAuthTokenCredential.GetAccessToken()

В основном просто сбой при попытке получить токен доступа из PayPal

Я обновил SDK до последней версии, и код был счастливо работает в течение +3 месяцев.

4b9b3361

Ответ 1

Похоже, что в некоторых случаях соединение PayPal по какой-то причине не выпущено. это создает ошибку, так как существует ограничение в .Net на количество параллельных веб-подключений к одному хосту, этот предел равен 2.

Добавьте это, прежде чем пытаться подключиться к PayPal, помните, что он должен идти перед каждым подключением, например, если вы используете SDK и экспресс-заказ.

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.DefaultConnectionLimit = 9999;

//PayPay SDK connection
var apiContext = Configuration.GetAPIContext();

Ответ 2

Эта ошибка возникает из-за того, что PayPal начал отказываться от поддержки SSLv3. Что касается принятого ответа, для возобновления работы соединения PayPal требуется только параметр Tls12.

Мне не нужно было выполнять эту настройку по всему моему коду. Я обнаружил, что установка этого параметра в методе Application_Start() моего файла global.asax была лучшим решением.

Кроме того, моя версия 4.0 NET framework не позволяла мне использовать флаг SecurityProtocolType.Tls12 - но она работает, если я произведу ее следующим образом:

protected void Application_Start()
{
    ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // This is equivalent to SecurityProtocolType.Tls12
}

Ответ 3

У меня есть аналогичная проблема с тестовой учетной записью Paypal и для ее исправления достаточно только одной строки из предыдущего ответа:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Ответ 4

В моем первом ответе я рекомендовал добавить

ServicePointManager.SecurityProtocol =  SecurityProtocolType.Tls12;

Но мой проект также использует сервис Amazon, и он не работает с TLS12. Он отлично работает, когда я заменяю его на пакет протоколов:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;