数字签名SOAP服务参考

时间:2015-08-09 13:56:16

标签: c# soap sign service-reference

我已经用这个装了一个多星期了。我已经请了几位微软朋友的帮助,但仍然没有运气。

我们正在开发一个需要在线支付的在线会议注册门户网站。

很遗憾,除了本地(智利)支付网关(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支持部门进行了交谈,他们唯一想说的是该请求未经过数字签名。

所以现在我们需要对此请求进行数字签名,我无法在任何地方找到如何执行此操作(至少以我能理解的方式,使用清晰的代码示例)。

0 个答案:

没有答案