我已经用这个装了一个多星期了。我已经请了几位微软朋友的帮助,但仍然没有运气。
我们正在开发一个需要在线支付的在线会议注册门户网站。
很遗憾,除了本地(智利)支付网关(Transbank的WebPay Plus)之外,我们的客户不接受任何其他付款方式。
我们试图让他们加入PayPal和其他几个,但他们不会接受几个原因。所以...我们坚持使用WebPay Plus(WPP)。
WPP接受SOAP请求以启动事务。 但请求必须经过数字签名。
我们已经创建了网络参考,我们可以到达服务器端,但我们还没有想出如何对请求进行数字签名。
WPP要求我们使用OpenSSL创建证书(我们这样做)(oneclick.crt)。
这是我们的代码:
System.ServiceModel.Channels.Binding _binding = new BasicHttpBinding();
EndpointAddress _endpointAddress = new EndpointAddress("http://201.238.207.131:7003/WSWebpayTransaction/cxf/WSWebpayService");
ServiceReference3.WSWebpayServiceClient ws3 = new ServiceReference3.WSWebpayServiceClient(_binding, _endpointAddress);
ws3.Endpoint.Behaviors.Add(new CustomEndpointBehavior());
var _certificatePath = "~/oneclick.crt".ToAbsolutePath();
System.Security.Cryptography.X509Certificates.X509Certificate2 cert = new System.Security.Cryptography.X509Certificates.X509Certificate2(_certificatePath);
apiTransbank.ClientCertificates.Add(cert);
ws3.ClientCredentials.ClientCertificate.Certificate = cert;
var tI = new ServiceReference3.wsInitTransactionInput();
tI.wSTransactionType = ServiceReference3.wsTransactionType.TR_NORMAL_WS;
tI.sessionId = "xmsbs_calculate";
tI.returnURL = "http://www.test.cl";
tI.finalURL = "http://www.test.cl/final";
tI.transactionDetails = new[] {
new ServiceReference3.wsTransactionDetail()
{
amount = 1,
commerceCode = "XXXXXXXXXX",
buyOrder = "1000"
}
};
var _output = ws3.initTransaction(tI);
此请求给出了以下响应:“处理标题时发现错误。”
我已经与WPP支持部门进行了交谈,他们唯一想说的是该请求未经过数字签名。
所以现在我们需要对此请求进行数字签名,我无法在任何地方找到如何执行此操作(至少以我能理解的方式,使用清晰的代码示例)。