У меня проблема с С# PayTrace Gateway. Следующий код работал нормально до вчерашнего дня, когда я полагаю, что они отключили SSL3 из-за использования Poodle Exploit. При запуске кода ниже мы получили следующее сообщение. Удаленный сервер принудительно закрыл соединение. Проведя некоторое исследование проблемы, мы определили, что, поскольку наш IIS Server 7.5 был настроен на использование SSL3, С# по умолчанию был SSL3, который PayTrace принудительно завершил бы соединение. Затем мы удалили SSL3 с сервера. Это приводит к следующей ошибке:
Клиент и сервер не могут общаться, потому что они не имеют общего алгоритма.
Я предполагаю, что есть дополнительный алгоритм SSL, который нам нужно установить на сервере, теперь, когда SSL 3 удаляется. Наши ИТ-специалисты утверждают, что TLS 1.1 и TLS 1.2 работают, и что ASP.NET теперь не выполняет свои обязательства. Но я чувствую, что все еще должно быть что-то еще, что нам нужно установить на сервер, я не знаю SSL-алгоритмов, поэтому я понятия не имею, с чего начать.
var postUrl = new StringBuilder();
//Initialize url with configuration and parameter values...
postUrl.AppendFormat("UN~{0}|", this.MerchantLoginID);
postUrl.AppendFormat("PSWD~{0}|", this.MerchantTransactionKey);
postUrl.Append("TERMS~Y|METHOD~ProcessTranx|TRANXTYPE~Sale|");
postUrl.AppendFormat("CC~{0}|", cardNumber);
postUrl.AppendFormat("EXPMNTH~{0}|", expirationMonth.PadLeft(2, '0'));
postUrl.AppendFormat("EXPYR~{0}|", expirationYear);
postUrl.AppendFormat("AMOUNT~{0}|", transactionAmount);
postUrl.AppendFormat("BADDRESS~{0}|", this.AddressLine1);
postUrl.AppendFormat("BADDRESS2~{0}|", this.AddressLine2);
postUrl.AppendFormat("BCITY~{0}|", this.City);
postUrl.AppendFormat("BSTATE~{0}|", this.State);
postUrl.AppendFormat("BZIP~{0}|", this.Zip);
postUrl.AppendFormat("SADDRESS~{0}|", this.AddressLine1);
postUrl.AppendFormat("SADDRESS2~{0}|", this.AddressLine2);
postUrl.AppendFormat("SCITY~{0}|", this.City);
postUrl.AppendFormat("SSTATE~{0}|", this.State);
postUrl.AppendFormat("SZIP~{0}|", this.Zip);
if (!String.IsNullOrEmpty(this.Country))
{
postUrl.AppendFormat("BCOUNTRY~{0}|", this.Country);
}
if (!String.IsNullOrEmpty(this.Description))
{
postUrl.AppendFormat("DESCRIPTION~{0}|", this.Description);
}
if (!String.IsNullOrEmpty(this.InvoiceNumber))
{
postUrl.AppendFormat("INVOICE~{0}|", this.InvoiceNumber);
}
if (this.IsTestMode)
{
postUrl.AppendFormat("TEST~Y|");
}
//postUrl.Append();
WebClient wClient = new WebClient();
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
String sRequest = "PARMLIST=" + Url.Encode(postUrl.ToString());
wClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
string sResponse = "";
sResponse = wClient.UploadString(PayTraceUrl, sRequest);
Кроме того, только FYI, эта проблема также возникает, когда мы подключаемся к First Data E4 gateway, поэтому это не просто вещь PayTrace. Я предполагаю, что по мере того, как больше шлюзов отключит доступ к SSL3, мы продолжим сталкиваться с проблемами с другими шлюзами, пока это не будет разрешено на сервере. Кроме того, я нашел несколько предложений в Интернете, некоторые предложили поставить следующий код непосредственно перед тем, как сделать исходящий запрос:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
К сожалению, это тоже не сработало, такая же ошибка. Именно поэтому я думаю, что на сервере IIS7.5 необходимо установить дополнительные функции. Я просто не знаю, что.