Jump to content

SOAP problem


Ty44ler

Recommended Posts

I'm just trying to make a SOAP call that passes one parameter (customerNumber) and prints a dropdown box, but it's giving me an error in my source code.

 

Error: Warning:  Invalid argument supplied for foreach() in webservice.php on line 23

 

<?
$client = new SoapClient("http://refrigerantcompliance/RefrigerantComplianceService/Service1.asmx?wsdl", array('cache_wsdl' => 0));
$params = array('customerNumber'=>'2'); 
$client->__soapCall("GetWorkOrders", $params); 

$array = $result->GetWorkOrdersResult->WorkOrderDAO;

print "<select name='CustomerName'><option>Please Select One</option>";
    foreach($array as $k=>$v){
        print "<option value=\"".$v->SRPWOHRID."\">".$v->SRPWOHRID."</option>";
      }
print "</select><br />";
?>

 

WSDL File:

POST /RefrigerantComplianceService/Service1.asmx HTTP/1.1
Host: refrigerantcompliance
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <GetWorkOrders xmlns="http://tempuri.org/">
      <customerNumber>string</customerNumber>
    </GetWorkOrders>
  </soap12:Body>
</soap12:Envelope>

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <GetWorkOrdersResponse xmlns="http://tempuri.org/">
      <GetWorkOrdersResult>
        <WorkOrderDAO>
          <StatusCode>string</StatusCode>
          <SRPWOHRID>int</SRPWOHRID>
          <CompanyNumber>int</CompanyNumber>
          <DivisionNumber>int</DivisionNumber>
          <CustomerNumber>int</CustomerNumber>
          <RequestNo>int</RequestNo>
          <RequestorName>string</RequestorName>
          <AreaCode>string</AreaCode>
          <PhoneNo>string</PhoneNo>
          <Address1>string</Address1>
          <Address2>string</Address2>
          <City>string</City>
          <StateCode>string</StateCode>
          <ZipCode>string</ZipCode>
          <RequestType>string</RequestType>
          <CustomerPONumber>string</CustomerPONumber>
          <Description>string</Description>
        </WorkOrderDAO>
        <WorkOrderDAO>
          <StatusCode>string</StatusCode>
          <SRPWOHRID>int</SRPWOHRID>
          <CompanyNumber>int</CompanyNumber>
          <DivisionNumber>int</DivisionNumber>
          <CustomerNumber>int</CustomerNumber>
          <RequestNo>int</RequestNo>
          <RequestorName>string</RequestorName>
          <AreaCode>string</AreaCode>
          <PhoneNo>string</PhoneNo>
          <Address1>string</Address1>
          <Address2>string</Address2>
          <City>string</City>
          <StateCode>string</StateCode>
          <ZipCode>string</ZipCode>
          <RequestType>string</RequestType>
          <CustomerPONumber>string</CustomerPONumber>
          <Description>string</Description>
        </WorkOrderDAO>
      </GetWorkOrdersResult>
    </GetWorkOrdersResponse>
  </soap12:Body>
</soap12:Envelope>

Link to comment
Share on other sites

The error you got is because $array is not an array.  I noticed that at minimum, you don't actually assign $result to anything so naturally it's not an object.

 

Also, not sure why you are calling __soapCall here, when you should be able to do:

 

$result = $client->GetWorkOrders(2);

Link to comment
Share on other sites

The error you got is because $array is not an array.  I noticed that at minimum, you don't actually assign $result to anything so naturally it's not an object.

 

Also, not sure why you are calling __soapCall here, when you should be able to do:

 

$result = $client->GetWorkOrders(2);

 

Thanks for your help Giz!

 

I noticed that nothing was assigned to $result after I posted it and couldn't edit it.

 

I should have mentioned GetWorkOrders is passed a customer number as a string from the first drop-down and then will return a list of work orders for that customer. Does it need quotes around it because its a string instead of a number?

 

Here's what it is now:

$client = new SoapClient("http://refrigerantcompliance/RefrigerantComplianceService/Service1.asmx?wsdl", array('cache_wsdl' => 0));
$result = $client->GetWorkOrders('2');

print "<select name='CustomerName'><option>Please Select One</option>";
    foreach($result as $k=>$v){
        print "<option value=\"".$v->RequestorName."\">".$v->RequestorName."</option>";
      }
print "</select><br />";

 

I don't get the errors anymore but nothing is displayed in the dropdown menu.

Link to comment
Share on other sites

PHP would typecast the 2 to a string, since that was required, but it's ok that you're making it a string AFAIK.  Try print_r($result) and see what you have.  I think there's a structure there you may have to unbundle, based on the wsdl you provided.

Link to comment
Share on other sites

I was mistaken, this is the WSDL file:

<wsdl:definitions targetNamespace="http://tempuri.org/">
−
<wsdl:types>
−
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
−
<s:element name="HelloWorld">
<s:complexType/>
</s:element>
−
<s:element name="HelloWorldResponse">
−
<s:complexType>
−
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
−
<s:element name="GetCustomers">
<s:complexType/>
</s:element>
−
<s:element name="GetCustomersResponse">
−
<s:complexType>
−
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetCustomersResult" type="tns:ArrayOfCustomerDAO"/>
</s:sequence>
</s:complexType>
</s:element>
−
<s:complexType name="ArrayOfCustomerDAO">
−
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="CustomerDAO" nillable="true" type="tns:CustomerDAO"/>
</s:sequence>
</s:complexType>
−
<s:complexType name="CustomerDAO">
−
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="StatusCode" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="CompanyNumber" type="s:int"/>
<s:element minOccurs="1" maxOccurs="1" name="DivisionNumber" type="s:int"/>
<s:element minOccurs="1" maxOccurs="1" name="CustomerNumber" type="s:int"/>
<s:element minOccurs="0" maxOccurs="1" name="CustomerName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="Address1" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="Address2" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="City" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="StateCode" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="ZipCode" type="s:string"/>
</s:sequence>
</s:complexType>
−
<s:element name="GetWorkOrders">
−
<s:complexType>
−
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="customerNumber" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
−
<s:element name="GetWorkOrdersResponse">
−
<s:complexType>
−
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetWorkOrdersResult" type="tns:ArrayOfWorkOrderDAO"/>
</s:sequence>
</s:complexType>
</s:element>
−
<s:complexType name="ArrayOfWorkOrderDAO">
−
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="WorkOrderDAO" nillable="true" type="tns:WorkOrderDAO"/>
</s:sequence>
</s:complexType>
−
<s:complexType name="WorkOrderDAO">
−
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="StatusCode" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="SRPWOHRID" type="s:int"/>
<s:element minOccurs="1" maxOccurs="1" name="CompanyNumber" type="s:int"/>
<s:element minOccurs="1" maxOccurs="1" name="DivisionNumber" type="s:int"/>
<s:element minOccurs="1" maxOccurs="1" name="CustomerNumber" type="s:int"/>
<s:element minOccurs="1" maxOccurs="1" name="RequestNo" type="s:int"/>
<s:element minOccurs="0" maxOccurs="1" name="RequestorName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="AreaCode" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="PhoneNo" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="Address1" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="Address2" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="City" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="StateCode" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="ZipCode" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="RequestType" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="CustomerPONumber" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="Description" type="s:string"/>
</s:sequence>
</s:complexType>
</s:schema>
</wsdl:types>
−
<wsdl:message name="HelloWorldSoapIn">
<wsdl:part name="parameters" element="tns:HelloWorld"/>
</wsdl:message>
−
<wsdl:message name="HelloWorldSoapOut">
<wsdl:part name="parameters" element="tns:HelloWorldResponse"/>
</wsdl:message>
−
<wsdl:message name="GetCustomersSoapIn">
<wsdl:part name="parameters" element="tns:GetCustomers"/>
</wsdl:message>
−
<wsdl:message name="GetCustomersSoapOut">
<wsdl:part name="parameters" element="tns:GetCustomersResponse"/>
</wsdl:message>
−
<wsdl:message name="GetWorkOrdersSoapIn">
<wsdl:part name="parameters" element="tns:GetWorkOrders"/>
</wsdl:message>
−
<wsdl:message name="GetWorkOrdersSoapOut">
<wsdl:part name="parameters" element="tns:GetWorkOrdersResponse"/>
</wsdl:message>
−
<wsdl:portType name="Service1Soap">
−
<wsdl:operation name="HelloWorld">
<wsdl:input message="tns:HelloWorldSoapIn"/>
<wsdl:output message="tns:HelloWorldSoapOut"/>
</wsdl:operation>
−
<wsdl:operation name="GetCustomers">
<wsdl:input message="tns:GetCustomersSoapIn"/>
<wsdl:output message="tns:GetCustomersSoapOut"/>
</wsdl:operation>
−
<wsdl:operation name="GetWorkOrders">
<wsdl:input message="tns:GetWorkOrdersSoapIn"/>
<wsdl:output message="tns:GetWorkOrdersSoapOut"/>
</wsdl:operation>
</wsdl:portType>
−
<wsdl:binding name="Service1Soap" type="tns:Service1Soap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
−
<wsdl:operation name="HelloWorld">
<soap:operation soapAction="http://tempuri.org/HelloWorld" style="document"/>
−
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
−
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
−
<wsdl:operation name="GetCustomers">
<soap:operation soapAction="http://tempuri.org/GetCustomers" style="document"/>
−
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
−
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
−
<wsdl:operation name="GetWorkOrders">
<soap:operation soapAction="http://tempuri.org/GetWorkOrders" style="document"/>
−
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
−
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
−
<wsdl:binding name="Service1Soap12" type="tns:Service1Soap">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
−
<wsdl:operation name="HelloWorld">
<soap12:operation soapAction="http://tempuri.org/HelloWorld" style="document"/>
−
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
−
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
−
<wsdl:operation name="GetCustomers">
<soap12:operation soapAction="http://tempuri.org/GetCustomers" style="document"/>
−
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
−
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
−
<wsdl:operation name="GetWorkOrders">
<soap12:operation soapAction="http://tempuri.org/GetWorkOrders" style="document"/>
−
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
−
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
−
<wsdl:service name="Service1">
−
<wsdl:port name="Service1Soap" binding="tns:Service1Soap">
<soap:address location="http://refrigerantcompliance/RefrigerantComplianceService/Service1.asmx"/>
</wsdl:port>
−
<wsdl:port name="Service1Soap12" binding="tns:Service1Soap12">
<soap12:address location="http://refrigerantcompliance/RefrigerantComplianceService/Service1.asmx"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

 

The other was the asmx web page that the GetWorkOrder function has.

Link to comment
Share on other sites

Got it figured out. Thanks for your help Gizmola!

$client = new SoapClient("http://refrigerantcompliance/RefrigerantComplianceService/Service1.asmx?wsdl", array('cache_wsdl' => 0, 'trace' => 1));
$result = $client->GetWorkOrders(array("customerNumber" => "31150"));
$orders = $result->GetWorkOrdersResult->WorkOrderDAO;

print "<select name='workorder'><option>Please Select One</option>";
    foreach($orders as $k=>$v){
        print "<option value=\"".$v->SRPWOHRID."\">".$v->SRPWOHRID." - ".$v->Description."</option>";
      }
print "</select><br />";

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.