微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Node.js具有复杂类型的SOAP调用

我目前正在尝试使用node-soap( https://github.com/milewise/node-soap)来调用Authorize.net的SOAP服务器.但是,我似乎无法让我的客户端代码传递适当的参数.我知道该函数正在调用服务器,因为我收到服务器错误响应.

当我检查WSDL时,我注意到服务器调用需要ComplexType参数.有没有办法创建我需要的ComplexTypes,或者我可以只使用Javascript对象?这是我目前的代码

var soap = require('soap');

  var url = 'https://api.authorize.net/soap/v1/Service.asmx?WSDL';

  soap.createClient(url,function(err,client) {

  var args = {
      merchantAuthentication: {
        name: '285tUPuS',transactionKey: '58JKJ4T95uee75wd'
      }
  };

  client.Service.ServiceSoap12.GetTransactionDetails(args,result) {

          if (err) {
            console.log(err);
          } else {
            console.log(result.GetTransactionDetailsResult[0].messages);
          }
      });

});

解决方法

node-soap模块在将事务发送到服务器之前将JavaScript对象转换为XML.它将请求包装在wsdl概述的xml元素中.下面是一个示例,说明node-soap在传递您提供的对象时可能产生的内容(重要的是要注意外部元素是由node-soap模块根据wsdl创建的):

此示例使用wsdl作为Cyber​​Source API

<data:requestMessage xmlns:data="urn:schemas-cybersource-com:transaction-data-1.93" xmlns="urn:schemas-cybersource-com:transaction-data-1.93">

  <data:merchantAuthentication>
    <data:name>285tUPuS</data:name>
    <data:transactionKey>58JKJ4T95uee75wd</data:transactionKey>
  </data:merchantAuthentication>

</data:requestMessage>

另外,我不确切知道Authorize.net api是如何工作的,但听起来你可能想要在必要时使用用户名令牌身份验证来检查:

client.setSecurity(new soap.WSSecurity('username’,‘password’));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐