2

nodejs と node-soap を使用して Web サービスと通信しています。しかし、パラメーターをサービスに渡すための構文を正しく取得できないようです。

ドキュメントには、フィールドuuidとその値を含む配列を送信する必要があると書かれています。

これは、Web サービスの所有者から例として得た PHP コードです。

$uuid = "xxxx";

    $param = array("uuid"=>new SoapVar($uuid,
    XSD_STRING,
    "string", "http://www.w3.org/2001/XMLSchema")
    )

これがノードサーバーで使用しているコードです

 function getSoapResponse()
{
    var soap = require('soap');
      var url = 'http://live.pagoagil.net/soapserver?wsdl';
      var auth = [{'uuid': 'XXXXXXXXX'}];

      soap.createClient(url, function(err, client) {
      client.ListaBancosPSE(auth, function(err, result) 
      {
          console.log(result);
          console.log(err);
      });
  });

これで私は悪いxmlエラーを取得します

var auth = [{'uuid': 'XXXXXXXXX'}];

また

var auth = [["uuid",key1],XSD_STRING,"string","http://www.w3.org/2001/XMLSchema"];

これで、「ユーザーIDが空です」という応答が返されます(uuid)

 var auth = {'uuid': 'XXXXXXXXX'};

助言がありますか?

4

3 に答える 3

3

私ができることはあまりありませんが、始めるためのヒントをいくつか紹介します。

  1. client.describe() を使用して、サービスが引数をどのように受け取るかを確認します。

アクセスしようとしているサービスの構造は次のとおりです。

{ App_SoapService: 
    { App_SoapPort: 
        { Autorizar: [Object],
          AutorizarAdvance: [Object],
          AutorizarIac: [Object],
          ListaBancosPSE: [Object],
          AutorizarPSE: [Object],
          AutorizarTuya: [Object],
          AutorizarBotonCredibanco: [Object],
          FinalizarPSE: [Object],
          FinalizarTuya: [Object],
          ConsultarReferencia: [Object] } } }

特定のメソッド ListaBancosPSE を詳しく見てみると、次の情報が得られます。

{input: { auth: 'soap-enc:Array' },
 output: { return: 'soap-enc:Array' }}

私はこれで試しました:

var soap = require('soap');

function getSoapResponse(url, auth) {
    soap.createClient(url, function(err, client) {
        console.log(client.describe());
        console.log(client.describe().App_SoapService.App_SoapPort.ListaBancosPSE);

        client.ListaBancosPSE(auth, function(err, result) {
            console.log(JSON.stringify(result));
            console.log(err);
        });
    });
}
getSoapResponse('http://live.pagoagil.net/soapserver?wsdl', {'soap-enc:Array' : {'uuid': 'XXXXXXXXX'}});

応答は同じ「Negada, Error nombre de usuario vacio, No se pudo autenticar en pagoagil.net.」です。

次のステップは、サービスが予期しているメッセージを判別することです。

次のようなものかもしれません:

<tns:ListaBancosPSE><uuid>XXXXXXXXX</uuid></tns:ListaBancosPSE>

または

<tns:ListaBancosPSE><soap-enc:Array><uuid>XXXXXXXXX</uuid></soap-enc:Array></tns:ListaBancosPSE>

それがわかったら、インストールした node-soap パッケージに console.log を追加するだけなので、node_modules がインストールされている場所に移動してファイルを開きます。

node_modules/soap/lib/client.js

メッセージが設定された直後の 187 行に console.log を追加し、

console.log("Message! ", message);

これにより、引数の形式を理解するのに十分な情報を提供するメッセージが表示されます。

于 2015-03-05T00:06:14.647 に答える