Question

I have created a soap client in PHP that signs on, but for the second request I want to make I cannot seem to get the PHP to structure the request properly.

This is request that works in 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>

How would I use PHP to format the XML the same way as the working request?

Some progress has been made.

I have been able to recreate the xml up to a point now. The request looks like this:

<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>

The PHP creating that request is:

    $args0 = array(
        'sessionid'=>$session,
        'searchcriteria'=> array(array('attribute'=>'dateupdated','value'=>'01/01/2013'),array('attribute'=>'dateupdatedcompare','value'=>'1')),
        'includeimageattributes'=>0,
        'sortorder'=>'dateupdated');

$result = $client->__soapCall('searchProducts',$args0);

The error this throws is:

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.

I am still missing a portion of the envelope:

xmlns:i="http://www.w3.org/2001/XMLSchema-instance"

And I need the value tags to look like this:

<v1:value i:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">

Any ideas on how I can add those portions in?

Was it helpful?

Solution

Okay! I Finally figured this out. It is ugly but it works.

   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}";
    }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top