1

I'm trying to use a simple wsdl file and make a soap call but for the life of me I can't get it to work.

Here's the wsdl file:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="urn:gnHPD_Staging_Table_Submit_Generic" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:s="urn:gnHPD_Staging_Table_Submit_Generic" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <wsdl:types>
  <xsd:schema elementFormDefault="qualified" targetNamespace="urn:gnHPD_Staging_Table_Submit_Generic">
   <xsd:element name="Submit" type="s:InputMapping"/>
   <xsd:complexType name="InputMapping">
    <xsd:sequence>
     <xsd:element name="Assigned_To_Group" type="xsd:string"/>
     <xsd:element name="AutoPush" type="s:AutoPushType"/>
     <xsd:element name="Case_Type" type="s:Case_TypeType"/>
     <xsd:element name="Category" type="xsd:string"/>
     <xsd:element name="Description" type="xsd:string"/>
     <xsd:element name="Details" type="xsd:string"/>
     <xsd:element name="Entry_Number" type="xsd:string"/>
     <xsd:element name="Integration_Application" type="xsd:string"/>
     <xsd:element name="Item" type="xsd:string"/>
     <xsd:element name="Priority" type="s:PriorityType"/>
     <xsd:element name="Source" type="s:SourceType"/>
     <xsd:element name="Submitter_UNIX" type="xsd:string"/>
     <xsd:element name="Summary" type="xsd:string"/>
     <xsd:element name="Type" type="xsd:string"/>
    </xsd:sequence>
   </xsd:complexType>
   <xsd:simpleType name="AutoPushType">
    <xsd:restriction base="xsd:string">
     <xsd:enumeration value="Auto Push"/>
    </xsd:restriction>
   </xsd:simpleType>
   <xsd:simpleType name="Case_TypeType">
    <xsd:restriction base="xsd:string">
     <xsd:enumeration value="Incident"/>
     <xsd:enumeration value="Question"/>
     <xsd:enumeration value="Request"/>
     <xsd:enumeration value="Problem"/>
    </xsd:restriction>
   </xsd:simpleType>
   <xsd:simpleType name="PriorityType">
    <xsd:restriction base="xsd:string">
     <xsd:enumeration value="4"/>
     <xsd:enumeration value="3"/>
     <xsd:enumeration value="2"/>
     <xsd:enumeration value="1"/>
    </xsd:restriction>
   </xsd:simpleType>
   <xsd:simpleType name="SourceType">
    <xsd:restriction base="xsd:string">
     <xsd:enumeration value="Phone"/>
     <xsd:enumeration value="Requester"/>
     <xsd:enumeration value="Email"/>
     <xsd:enumeration value="Web"/>
     <xsd:enumeration value="NMP"/>
    </xsd:restriction>
   </xsd:simpleType>
   <xsd:element name="SubmitResponse" type="s:OutputMapping"/>
   <xsd:complexType name="OutputMapping">
    <xsd:sequence>
     <xsd:element name="StagingTable_ID" type="xsd:string"/>
     <xsd:element name="HelpDesk_ID" type="xsd:string"/>
    </xsd:sequence>
   </xsd:complexType>
   <xsd:element name="AuthenticationInfo" type="s:AuthenticationInfo"/>
   <xsd:complexType name="AuthenticationInfo">
    <xsd:sequence>
     <xsd:element name="userName" type="xsd:string"/>
     <xsd:element name="password" type="xsd:string"/>
     <xsd:element minOccurs="0" name="authentication" type="xsd:string"/>
     <xsd:element minOccurs="0" name="locale" type="xsd:string"/>
     <xsd:element minOccurs="0" name="timeZone" type="xsd:string"/>
    </xsd:sequence>
   </xsd:complexType>
  </xsd:schema>
 </wsdl:types>
   <wsdl:message name="SubmitSoapOut">
      <wsdl:part element="s:SubmitResponse" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="SubmitSoapIn">
      <wsdl:part element="s:Submit" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="ARAuthenticate">
      <wsdl:part element="s:AuthenticationInfo" name="parameters"/>
   </wsdl:message>
   <wsdl:portType name="gnHPD_Staging_Table_Submit_GenericPortType">
      <wsdl:operation name="Submit">
         <wsdl:input message="s:SubmitSoapIn"/>
         <wsdl:output message="s:SubmitSoapOut"/>
      </wsdl:operation>
   </wsdl:portType>
   <wsdl:binding name="gnHPD_Staging_Table_Submit_GenericSoapBinding" type="s:gnHPD_Staging_Table_Submit_GenericPortType">
      <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name="Submit">
         <soap:operation soapAction="urn:gnHPD_Staging_Table_Submit_Generic/Submit" style="document"/>
         <wsdl:input>
            <soap:header message="s:ARAuthenticate" part="parameters" use="literal"></soap:header>
            <soap:body use="literal"/>
         </wsdl:input>
         <wsdl:output>
            <soap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
   </wsdl:binding>
   <wsdl:service name="gnHPD_Staging_Table_Submit_GenericService">
  <wsdl:documentation>Generic Submit for HD</wsdl:documentation>
      <wsdl:port binding="s:gnHPD_Staging_Table_Submit_GenericSoapBinding" name="gnHPD_Staging_Table_Submit_GenericSoap">
         <soap:address location="http://servename:1234/midtier/services/ARService?server=servername&amp;webService=gnHPD_Staging_Table_Submit_Generic"/>
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>

Here's my php code:

$params = array( 
  "Submitter_UNIX"=>'myunix', 
  "Source"=>'Web', 
  "Summary"=>'Test1', 
  "Description"=>'Test1', 
  "Category"=>'test services', 
  "Type"=>'test s', 
  "Item"=>'Problem', 
  "Assigned_To_Group"=>'test s', 
  "Case_Type"=>'Problem', 
  "Priority"=>'4', 
  "AutoPush" => 'Auto Push', 
  "Details"=>'Test Details', 
  "Entry_Number"=>'', 
  "Integration_Application"=>'MyDev' 
); 

$client = new SoapClient('http://servername:1234/midtier/WSDL/servername/gnHPD_Staging_Table_Submit_Generic',array('trace' => 1 )); 


$result = $client->Submit($params);  

But I don't know how to set the authentication headers for the soap call. any assistance is greatly appreciated.

2 Answers 2

2

There's some good authentication examples on the PHP manual page for SoapClient (under the 'options' parameter info). For example, if you need to do basic HTTP authentication then you'd write something like this:

$url = "http://servername:1234/midtier/WSDL/servername/gnHPD_Staging_Table_Submit_Generic";

$params = array(
    'trace' => 1,
    'login' => "some_name",
    'password' => "some_password"
);

$client = new SoapClient($url, $params);

If you aren't able to authenticate through one of the standard mechanisms, then perhaps it can be done through the service (without some documentation it's hard to tell). There's an AuthenticationInfo entry which may serve that purpose - in which case you'd do something like:

$params = array('userName' => 'username', 'password' => 'password');
$client->AuthenticationInfo($params);
Sign up to request clarification or add additional context in comments.

3 Comments

I guess my problem is that i don't understand how to read/interpret and use the darn wsdl file.
Hmm.. the best thing to do in that case would be to read around the topic. Sometimes you can authenticate through the service; I've added to my original answer with a possible solution for that case. What makes you think you need to provide headers - do you get any error messages from the service?
That seems like an error on the server side; it doesn't necessarily mean that there's something wrong with your authentication request. Maybe you could contact the service provider and ask if they can track down where that exception's being thrown? Perhaps it's expecting something set in your headers that's missing, like the 'authentication' field?
1

Is your WSDL file also password protected?

See https://bugs.php.net/bug.php?id=27777

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.