重新创建从SoapUI到PHP的工作SOAP请求

重新创建从SoapUI到PHP的工作SOAP请求,php,xml,soap,webservice-client,Php,Xml,Soap,Webservice Client,我已经用PHP创建了一个登录的soap客户端,但是对于我想要发出的第二个请求,我似乎无法让PHP正确地构造请求 这是在SoapUI中工作的请求 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://v1.productapi.gs1ca.org" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">

我已经用PHP创建了一个登录的soap客户端,但是对于我想要发出的第二个请求,我似乎无法让PHP正确地构造请求

这是在SoapUI中工作的请求

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://v1.productapi.gs1ca.org" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Header/>
   <soapenv:Body>
      <v1:searchProducts>
         <sessionId>f53c5450-392e-4ca4-b592-adbb436cfe1f</sessionId>
         <searchCriteria>
            <v1:AttributeValue>
               <v1:attribute>dateupdated</v1:attribute>
               <v1:value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">08/01/2013</v1:value>
            </v1:AttributeValue>
<v1:AttributeValue>
               <v1:attribute>dateupdatedcompare</v1:attribute>
               <v1:value  i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">1</v1:value>
            </v1:AttributeValue>
         </searchCriteria>
         <includeImageAttributes>0</includeImageAttributes>
         <sortOrder>dateupdated</sortOrder>
      </v1:searchProducts>
   </soapenv:Body>
</soapenv:Envelope>
这引发的错误是:

Error: SoapFault exception: [a:DeserializationFailed] The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://v1.productapi.gs1ca.org:searchCriteria. The InnerException message was 'Element value from namespace http://v1.productapi.gs1ca.org cannot have child contents to be deserialized as an object. Please use XmlNode[] to deserialize this pattern of XML.
我仍然缺少信封的一部分:

xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
我需要像这样的值标签:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://v1.productapi.gs1ca.org">
    <SOAP-ENV:Body>
        <ns1:searchProducts>
            <sessionId>2a7d0294-8d96-428d-abd8-08add9cfc427</sessionId>
            <searchCriteria>
                <ns1:AttributeValue>
                    <ns1:attribute>dateupdated</ns1:attribute>
                    <ns1:value>01/01/2013</ns1:value>
                </ns1:AttributeValue>
                <ns1:AttributeValue>
                    <ns1:attribute>dateupdatedcompare</ns1:attribute>
                    <ns1:value>1</ns1:value>
                </ns1:AttributeValue>
            </searchCriteria>
            <includeImageAttributes>false</includeImageAttributes>
            <sortOrder>dateupdated</sortOrder>
        </ns1:searchProducts>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<v1:value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">


关于如何添加这些部分有什么想法吗?

好的!我终于明白了。这是丑陋的,但它的工作

   try {
        $args = array(
            'sessionid'=>$session,
            'searchcriteria'=> new SoapVar('<searchCriteria><ns1:AttributeValue>
                                                <ns1:attribute>dateupdated</ns1:attribute>
                                                <ns1:value xsi:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">01/01/2013</ns1:value>
                                            </ns1:AttributeValue>
                                            <ns1:AttributeValue>
                                                <ns1:attribute>dateupdatedcompare</ns1:attribute>
                                                <ns1:value xsi:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">1</ns1:value>
                                            </ns1:AttributeValue></searchCriteria>
                                            ', XSD_ANYXML, "http://www.w3.org/2001/XMLSchema-instance"),
            'includeimageattributes'=>0,
            'sortorder'=>'dateupdated');
    $result = $client->__soapCall('searchProducts',$args);
    } catch (SoapFault $e) {
        echo "Error: {$e}";
    }
试试看{
$args=数组(
'sessionid'=>$session,
'searchcriteria'=>new SoapVar('
更新日期
01/01/2013
日期更新比较
1.
“,XSD_ANYXML,”http://www.w3.org/2001/XMLSchema-instance"),
“includeimageattributes”=>0,
'sortorder'=>'dateupdated');
$result=$client->\uu soapCall('searchProducts',$args);
}捕获(SoapFault$e){
echo“错误:{$e}”;
}

没有更好的方法来实现soapCall?当结构变得更复杂时,最好使用更模块化的东西
   try {
        $args = array(
            'sessionid'=>$session,
            'searchcriteria'=> new SoapVar('<searchCriteria><ns1:AttributeValue>
                                                <ns1:attribute>dateupdated</ns1:attribute>
                                                <ns1:value xsi:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">01/01/2013</ns1:value>
                                            </ns1:AttributeValue>
                                            <ns1:AttributeValue>
                                                <ns1:attribute>dateupdatedcompare</ns1:attribute>
                                                <ns1:value xsi:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">1</ns1:value>
                                            </ns1:AttributeValue></searchCriteria>
                                            ', XSD_ANYXML, "http://www.w3.org/2001/XMLSchema-instance"),
            'includeimageattributes'=>0,
            'sortorder'=>'dateupdated');
    $result = $client->__soapCall('searchProducts',$args);
    } catch (SoapFault $e) {
        echo "Error: {$e}";
    }