我对 C # 支付追踪网关有意见。下面的代码一直运行良好,直到昨天我相信他们关闭了 SSL3由于贵宾犬利用。在运行下面的代码时,我们得到了以下消息。远程服务器已强制关闭连接。在对该问题进行了一些研究之后,我们确定,由于 IIS Server 7.5被配置为仍然使用 SSL3,因此 C # 默认为 SSL3,PayTrace 将强制关闭该连接。然后,我们从服务器上删除 SSL3。然后导致以下错误:
客户端和服务器无法通信,因为它们没有通用算法
我猜测,既然 SSL3已被删除,我们需要在服务器上安装另外的 SSL 算法。我们的 IT 人员声称 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);
另外,仅供参考,这个问题也发生在我们连接到第一数据 E4网关时,所以它不仅仅是一个 PayTrace 的东西。我的猜测是,随着越来越多的网关关闭对 SSL3的访问,我们将继续遇到其他网关的问题,直到这个问题在服务器上得到解决。此外,我在网上找到了一些建议,有些建议是在发出出站请求之前正确地放置以下代码:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
不幸的是,这也不起作用,同样的错误。这就是为什么我认为需要在 IIS7.5服务器上安装一些额外的东西。我只是不确定是什么。