2016-03-29 3 views
0

Я использую пакет узла мыльный потреблять следующие услуги SOAP: https://paymentsuat.mppglobal.com/interface/mpp/ipaypaymentpages/ipaypaymentpages.asmx?wsdlКак выбрать операцию в WSDL-узел мыла

Для порта iPayPaymentPagesSoap, есть две операции с тем же именем, но разные параметры.

Использование функции описания node-soap показывает только последнюю операцию для каждого типа порта. Есть ли способ выбрать, какую операцию вызывать?

<wsdl:portType name="iPayPaymentPagesSoap"> 
    <wsdl:operation name="CreateSession"> 
     <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 
     Retrieves a Guid from the system populated with details. Used in conjunction with ipayment pages. 
     </wsdl:documentation> 
     <wsdl:input name="CreateSessionBySOAP" message="tns:CreateSessionBySOAPSoapIn"/> 
     <wsdl:output name="CreateSessionBySOAP" message="tns:CreateSessionBySOAPSoapOut"/> 
    </wsdl:operation> 
    <wsdl:operation name="CreateSession"> 
     <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 
     Retrieves a Guid from the system populated with user details. Used in conjunction with ipayment pages. 
     </wsdl:documentation> 
     <wsdl:input name="CreateSessionByGET" message="tns:CreateSessionByGETSoapIn"/> 
     <wsdl:output name="CreateSessionByGET" message="tns:CreateSessionByGETSoapOut"/> 
    </wsdl:operation> 
</wsdl:portType> 

воздает:

{ 
    iPayPaymentPages: { 
     iPayPaymentPagesSoap: { 
      CreateSession: { 
       input: { 
        affiliateId: "s:int", 
        password: "s:string" 
       }, 
       output: { 
        CreateSessionByGETResult: { 
         Guid: "s:string", 
         ErrorNumber: "s:int", 
         ErrorMessage: "s:string", 
         targetNSAlias: "tns", 
         targetNamespace: "https://secure1.mppglobal.com/interface/ipaypaymentpages/ipaypaymentpages.asmx" 
        } 
       } 
      } 
     } 
    } 
} 

Однако я стремлюсь использовать CreateSession с параметрами CreateSessionBySOAP, но узел-мыло по умолчанию CreateSessionByGET.

* У меня нет контроля над WSDL и я бы скорее не использовал SOAP с Node.js, но я застрял с ним в этом случае!

ответ

0

Я застреваю в том же поведении, кажется, что в node-soap/lib/client.js использует wsdl как объект или объект dom, но в wsdl: portTypes он представляет только последний элемент операции. В моем случае у меня есть 4 операции с тем же именем, вот как я ее решаю.

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

     var method = client.wsdl.definitions.services.[Service].ports.[Port].binding.methods['CreateSession']; 
     var location = client.wsdl.definitions.services.[Service].ports.[Port].location; 

     //change method $name, method input $name 
     method.$name = 'CreateSessionBySOAP'; 
     method.input.$name = 'CreateSessionBySOAP'; 

     var def= client._defineMethod(method, location); 
     //invoke the method 
     def(args, options, function(err, result) { 
      console.log(JSON.stringify(result)); 
     }); 
     console.log(client.lastMessage); 
     console.log(client.lastResponse); 
});