Web services 从WSDL生成SOAP请求

Web services 从WSDL生成SOAP请求,web-services,soap,wsdl,Web Services,Soap,Wsdl,我需要执行一个到外部服务器的SOAP请求。我以前从未使用过SOAP,但我知道REST的基本知识。 我得到了以下和此示例查询: <Messages> <Version Ds_Version="0.0"> <Message> <Detail> <Ds_MerchantCode>999008881</Ds_MerchantCode>

我需要执行一个到外部服务器的SOAP请求。我以前从未使用过SOAP,但我知道REST的基本知识。 我得到了以下和此示例查询:

<Messages>
    <Version Ds_Version="0.0">
        <Message>
            <Detail>
                <Ds_MerchantCode>999008881</Ds_MerchantCode>
                <Ds_Terminal>1</Ds_Terminal>
                <Ds_Order>5799L</Ds_Order>
                <Ds_TransactionType>3</Ds_TransactionType>
            </Detail>
        </Message>
    </Version>
    <Signature>UfECD0KD9Wwo1iqY6PYZoJxw8KwMUz8m18bgLyH3BCI=</Signature>
    <SignatureVersion>HMAC_SHA256_V1</SignatureVersion>
</Messages>
但是,当我发送请求时,会收到以下错误消息:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Header/>
    <soapenv:Body>
        <soapenv:Fault>
            <faultcode>Server</faultcode>
            <faultstring>Internal Error</faultstring>
        </soapenv:Fault>
    </soapenv:Body>
</soapenv:Envelope>

服务器
内部错误
这是一条通用的SOAP错误消息,因此我认为问题必须与编码相关,而不是与外部服务相关


提前谢谢

在WSDL文件中,您将看到XML应作为字符串发送:

<element name="consultaOperaciones">
    <complexType>
        <sequence>
            <element name="cadenaXML" nillable="true" type="xsd:string"/>
        </sequence>
    </complexType>
</element>

因此,发送的XML应为:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservices.apl02.redsys.es">
   <soapenv:Header/>
   <soapenv:Body>
      <web:consultaOperaciones>
         <cadenaXML><![CDATA[
         <Messages>
    <Version Ds_Version="0.0">
        <Message>
            <Detail>
                <Ds_MerchantCode>999008881</Ds_MerchantCode>
                <Ds_Terminal>1</Ds_Terminal>
                <Ds_Order>5799L</Ds_Order>
                <Ds_TransactionType>3</Ds_TransactionType>
            </Detail>
        </Message>
    </Version>
    <Signature>UfECD0KD9Wwo1iqY6PYZoJxw8KwMUz8m18bgLyH3BCI=</Signature>
    <SignatureVersion>HMAC_SHA256_V1</SignatureVersion>
</Messages>
         ]]>
         </cadenaXML>
      </web:consultaOperaciones>
   </soapenv:Body>
</soapenv:Envelope>

999008881
1.
5799L
3.
UFECD0KD9WWO1IQY6PYZJXW8KWMUZ8M18BGLYH3BCI=
HMAC_SHA256_V1
]]>
请注意,我们使用CDATA是因为如上所述,XML消息应该作为基于WSDL的字符串发送。我已尝试运行它,并得到响应:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Header/>
   <soapenv:Body>
      <p259:consultaOperacionesResponse xmlns:p259="http://webservices.apl02.redsys.es">
         <consultaOperacionesReturn><![CDATA[<Messages><Version Ds_Version="0.0"><Message><ErrorMsg><Ds_ErrorCode>XML0023</Ds_ErrorCode></ErrorMsg></Message></Version></Messages>]]></consultaOperacionesReturn>
      </p259:consultaOperacionesResponse>
   </soapenv:Body>
</soapenv:Envelope>

XML0023]]>

这意味着现在正在解析您的消息,因为没有服务器错误,并且正在发送一个看起来合法的ConsultaPeracionResponse。该错误似乎与正在发送的数据有关,但总体而言,API工作正常。

在WSDL文件中,您将看到XML应作为字符串发送:

<element name="consultaOperaciones">
    <complexType>
        <sequence>
            <element name="cadenaXML" nillable="true" type="xsd:string"/>
        </sequence>
    </complexType>
</element>

因此,发送的XML应为:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservices.apl02.redsys.es">
   <soapenv:Header/>
   <soapenv:Body>
      <web:consultaOperaciones>
         <cadenaXML><![CDATA[
         <Messages>
    <Version Ds_Version="0.0">
        <Message>
            <Detail>
                <Ds_MerchantCode>999008881</Ds_MerchantCode>
                <Ds_Terminal>1</Ds_Terminal>
                <Ds_Order>5799L</Ds_Order>
                <Ds_TransactionType>3</Ds_TransactionType>
            </Detail>
        </Message>
    </Version>
    <Signature>UfECD0KD9Wwo1iqY6PYZoJxw8KwMUz8m18bgLyH3BCI=</Signature>
    <SignatureVersion>HMAC_SHA256_V1</SignatureVersion>
</Messages>
         ]]>
         </cadenaXML>
      </web:consultaOperaciones>
   </soapenv:Body>
</soapenv:Envelope>

999008881
1.
5799L
3.
UFECD0KD9WWO1IQY6PYZJXW8KWMUZ8M18BGLYH3BCI=
HMAC_SHA256_V1
]]>
请注意,我们使用CDATA是因为如上所述,XML消息应该作为基于WSDL的字符串发送。我已尝试运行它,并得到响应:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Header/>
   <soapenv:Body>
      <p259:consultaOperacionesResponse xmlns:p259="http://webservices.apl02.redsys.es">
         <consultaOperacionesReturn><![CDATA[<Messages><Version Ds_Version="0.0"><Message><ErrorMsg><Ds_ErrorCode>XML0023</Ds_ErrorCode></ErrorMsg></Message></Version></Messages>]]></consultaOperacionesReturn>
      </p259:consultaOperacionesResponse>
   </soapenv:Body>
</soapenv:Envelope>

XML0023]]>
这意味着现在正在解析您的消息,因为没有服务器错误,并且正在发送一个看起来合法的ConsultaPeracionResponse。该错误似乎与发送的数据有关,但总体而言,API工作正常