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 месяцев.
Ответы
Ответ 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;