Я интегрирую кассу PayPal в наш текущий сайт электронной коммерции. На моем локальном компьютере все работает, как ожидалось, но в промежуточной среде соединение выдает следующую ошибку:
System.Net.WebException: базовое соединение было закрыто: при получении произошла непредвиденная ошибка. ---> System.ComponentModel.Win32Exception: Клиент и сервер не могут взаимодействовать, поскольку у них нет общего алгоритма
Поскольку в документации PayPal указано, что это необходимо, мы поддерживаем SHA-256, и на сервере установлен корневой сертификат G5 (https://www.paypal-knowledge.com/infocenter/index?page=content&widgetview=true&id=FAQ1766&viewlocale=en_US&direct=en).
Сервер работает под управлением Windows Server 2008 R2, а поддерживаемые шифры - Triple DES 168, AES 128/128 и AES 256/256. Если Tls12 не запрограммирован жестко (см. Ниже), он выдает другую ошибку: «Не удалось создать безопасный канал SSL / TLS».
Буду признателен, если кто-нибудь сможет помочь в этом. Спасибо!
public string SendRequest(string url, string postData) {
var uri = new Uri(url);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var request = WebRequest.Create(uri);
var encoding = new UTF8Encoding();
var requestData = encoding.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
request.Timeout = (300*1000); //TODO: Move timeout to config
request.ContentLength = requestData.Length;
using (var stream = request.GetRequestStream()) {
stream.Write(requestData, 0, requestData.Length);
}
var response = request.GetResponse();
string result;
using (var reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII)) {
result = reader.ReadToEnd();
}
return result;
}