2013-03-22 37 views
5

Tôi hiện đang cố gắng sử dụng nút-xà phòng (https://github.com/milewise/node-soap) để thực hiện cuộc gọi đến máy chủ SOAP của Authorize.net. Tuy nhiên, tôi dường như không thể nhận mã khách hàng của tôi vượt qua các thông số thích hợp. Tôi biết rằng chức năng này đang gọi máy chủ vì tôi nhận được phản hồi lỗi máy chủ.Node.js SOAP Gọi với các loại phức hợp

Khi tôi kiểm tra WSDL, tôi nhận thấy rằng cuộc gọi máy chủ yêu cầu tham số ComplexType. Có cách nào để tạo ra các ComplexTypes mà tôi cần hoặc tôi có thể chỉ sử dụng các đối tượng Javascript? Đây là mã hiện tại của tôi:

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, 
     function(err, result) { 

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

});

+0

Bạn đã bao giờ tìm thấy một giải pháp cho điều này? – tier1

+0

Thật không may, không. –

Trả lời

1

Mô-đun nút-xà phòng đang chuyển đổi đối tượng JavaScript của bạn thành XML trước khi gửi giao dịch đến máy chủ. Nó kết thúc yêu cầu trong một phần tử xml như được phác thảo bởi wsdl. Dưới đây là một ví dụ về những gì có thể được sản xuất bởi xà phòng nút khi truyền đối tượng bạn đã cung cấp (quan trọng cần lưu ý rằng phần tử bên ngoài được tạo bởi mô-đun nút xà phòng theo wsdl):

Ví dụ này đang sử dụng wsdl cho API CyberSource

<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> 

Ngoài ra, tôi không biết chính xác cách thức hoạt động api Authorize.net, nhưng có vẻ như bạn có thể muốn kiểm tra sử dụng username xác thực thẻ nếu cần thiết:

client.setSecurity(new soap.WSSecurity('username’, ‘password’)); 
Các vấn đề liên quan