PHP SoapClient SoapParam和SoapVar

时间:2018-06-13 22:55:24

标签: php xml soap xsd soap-client

你好我有一个奇怪的问题,如果我可以这样称呼它...我想弄清楚如何发送"半逃脱" xml字符串作为参数,称为" xml"到Soap Web服务。

我需要生成的模式是这个:

<?xml version="1.0" encoding="utf-16"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
    <AuthHeader xmlns="https://url.temp/">
        <UserName>Test</UserName>
        <Password>Test</Password>
    </AuthHeader>
</soap:Header>
<soap:Body>
    <CreateTerminalSession xmlns="https://url.temp/">
        <xml>&lt;?xml version="1.0" encoding="utf-16"?&gt;
            &lt;Request&gt;
            &lt;ServiceLogin&gt;
            &lt;ServiceUserName&gt;Test&lt;/ServiceUserName&gt;
            &lt;ServicePassword&gt;Test&lt;/ServicePassword&gt;
            &lt;MCSAccountID&gt;1&lt;/MCSAccountID&gt;
            &lt;/ServiceLogin&gt;
            &lt;SaleInformation&gt;
            &lt;DeviceID&gt;2LK1234&lt;/DeviceID&gt;
            &lt;Type&gt;Sale&lt;/Type&gt;
            &lt;Amount&gt;1.00&lt;/Amount&gt;
            &lt;TipAmount&gt;-1&lt;/TipAmount&gt;
            &lt;AutoTransmit&gt;1&lt;/AutoTransmit&gt;
            &lt;GatewayID&gt;1&lt;/GatewayID&gt;
            &lt;/SaleInformation&gt;
            &lt;/Request&gt;</xml>
    </CreateTerminalSession>
</soap:Body>
</soap:Envelope>

我使用此代码生成的架构是

"""
<?xml version="1.0" encoding="UTF-8"?>\n
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https:/url.temp/"><SOAP-ENV:Header><ns1:AuthHeader><ns1:UserN ▶
&amp;lt;Request&amp;gt;\n
  &amp;lt;ServiceLogin&amp;gt;\n
    &amp;lt;ServiceUserName&amp;gt;userxxx&amp;lt;/ServiceUserName&amp;gt;\n
    &amp;lt;ServicePassword&amp;gt;xxx&amp;lt;/ServicePassword&amp;gt;\n
    &amp;lt;MSCSAccountID&amp;gt;xxx8&amp;lt;/MSCSAccountID&amp;gt;\n
  &amp;lt;/ServiceLogin&amp;gt;\n
  &amp;lt;SaleInformation&amp;gt;\n
    &amp;lt;DeviceID&amp;gt;2LK1234&amp;lt;/DeviceID&amp;gt;\n
    &amp;lt;Type&amp;gt;Sale&amp;lt;/Type&amp;gt;\n
    &amp;lt;Amount&amp;gt;1.00&amp;lt;/Amount&amp;gt;\n
    &amp;lt;TipAmount&amp;gt;-1&amp;lt;/TipAmount&amp;gt;\n
    &amp;lt;AutoTransmit&amp;gt;1&amp;lt;/AutoTransmit&amp;gt;\n
    &amp;lt;GatewayID&amp;gt;1&amp;lt;/GatewayID&amp;gt;\n
  &amp;lt;/SaleInformation&amp;gt;\n
&amp;lt;/Request&amp;gt;\n
</ns1:xml></ns1:CreateTerminalSession></SOAP-ENV:Body></SOAP-ENV:Envelope>\n
"""

用于生成上述响应的代码:

    $response = $client->__soapCall('CreateTerminalSession', [['xml' => $correctString]]);

这里的错误是XmlWriter逃脱&#34;&amp;&#34;使用&amp; amp在我的情况下无效,webservice拒绝这种格式...

我尝试的解决方案是:

$params = array(
           new \SoapParam(new \SoapVar($correctString, XSD_ANYXML), 'xml')
        );
            $response = $client->__soapCall('CreateTerminalSession', $params);

导致了这种反应。字符串在webservice期望的情况下被正确转义,但是没有命令名称&#34; CreateTerminalSession&#34;既不是param name&#34;&#34;:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://temp.url/">
<SOAP-ENV:Header>
    <ns1:AuthHeader>
        <ns1:UserName>testurs</ns1:UserName>
        <ns1:Password>testww</ns1:Password>
    </ns1:AuthHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
    &lt;Request&gt;
    &lt;ServiceLogin&gt;
    &lt;ServiceUserName&gt;paramservice&lt;/ServiceUserName&gt;
    &lt;ServicePassword&gt;parampass&lt;/ServicePassword&gt;
    &lt;MSCSAccountID&gt;paramsscsa&lt;/MSCSAccountID&gt;
    &lt;/ServiceLogin&gt;
    &lt;SaleInformation&gt;
    &lt;DeviceID&gt;2LK1234&lt;/DeviceID&gt;
    &lt;Type&gt;Sale&lt;/Type&gt;
    &lt;Amount&gt;1.00&lt;/Amount&gt;
    &lt;TipAmount&gt;-1&lt;/TipAmount&gt;
    &lt;AutoTransmit&gt;1&lt;/AutoTransmit&gt;
    &lt;GatewayID&gt;1&lt;/GatewayID&gt;
    &lt;/SaleInformation&gt;
    &lt;/Request&gt;
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

导致服务器出现此错误

Server was unable to process request. ---> Value cannot be null.\n
    Parameter name: s

所以我的问题是如何使这个正确转义的主体在我的情况下具有命令名称和参数名称&#34; CreateTerminalSession&#34;和&#34; xml&#34;。任何帮助都会非常感激。提前致谢

0 个答案:

没有答案