Okay, I have this SOAP server running in ASP already. We are getting rid of our windows server, so, moving our applications over to PHP.

I have three files, clienttest.php, server.php, and the TEST.wsdl. With my files, I can begin a SOAP session from clienttest.php, and I am returned my successful string in the WSDL defined "SendTicketResult"

My problem is, is that in the server.php, inside the SendTicket function, I am not getting any data from the client. I have tried our existing program, to send a real ticket to the php server, and I get the success response back perfectly, but I am not getting the ticket data anywhere.

Can anyone help me know what I am doing wrong 🙂 And how to get the ticket from the client.

I also have a dataset that our clients use to format the data, I don't think that will help, but if I am wrong, tell me and I will upload that as well.

clienttest.php

<?php
	//clienttest.php

ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache

//Load the client with wsdl definition. NOTE: Setup the WSDL url
$client = new SoapClient("TEST.wsdl");

$data1 = array(
	'One_Call_Center' => 'UFPO',
	'Ticket_Number' => '03192-000-001',
	'Primary_CDC' => array(
		'CDC' => 'NIMO / WEST',
		'Sequence_Number' => 1,
	),

	/*........ and all complex Type defined on TEST.wsdl and TicketDataSet.xsd*/
);

//Call function SendTicket and pass the params
$rsl = $client->SendTicket($data1);

//Print the results
echo '<pre>';
print_r($rsl);
echo '</pre>';

?>

server.php

<?php
function SendTicket($parameter){

//server.php

//This following part is just to see what I am getting sent because I am not getting anything
$arrayObj = new ArrayObject(get_defined_vars());

	$file1=fopen("test.txt","w");

		for($iterator = $arrayObj->getIterator(); $iterator->valid(); $iterator->next()) {
			fwrite($file1, $iterator->key() . ' => ' . $iterator->current() );
		}		

	fclose($file1);


 //parameters, sendtickets, etc are all empty strings from the client. change top $parameter to anything else, still shows parameter as my only empty variable


$result = array(
    'SendTicketResult' => 'successful',
);

//The results	
return $result;

}	

ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
$server = new SoapServer("TEST.wsdl"); //NOTE: on TEST.wsdl configure the server's url. File lines: 65, 69 and 72
$server->addFunction("SendTicket");
$server->handle();
?>

and the TEST.wsdl

<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://tempuri.org/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://tempuri.org/" xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
      <s:element name="SendTicket">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="xmlTicket">
              <s:complexType mixed="true">
                <s:sequence>
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="SendTicketResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="SendTicketResult" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="SendAudit">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="xmlAudit">
              <s:complexType mixed="true">
                <s:sequence>
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="SendAuditResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="SendAuditResult" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="SendMessage">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="xmlMessage">
              <s:complexType mixed="true">
                <s:sequence>
                  <s:any />
                </s:sequence>
              </s:complexType>
            </s:element>
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="SendMessageResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="SendMessageResult" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
    </s:schema>
  </types>
  <message name="SendTicketSoapIn">
    <part name="parameters" element="s0:SendTicket" />
  </message>
  <message name="SendTicketSoapOut">
    <part name="parameters" element="s0:SendTicketResponse" />
  </message>
  <message name="SendAuditSoapIn">
    <part name="parameters" element="s0:SendAudit" />
  </message>
  <message name="SendAuditSoapOut">
    <part name="parameters" element="s0:SendAuditResponse" />
  </message>
  <message name="SendMessageSoapIn">
    <part name="parameters" element="s0:SendMessage" />
  </message>
  <message name="SendMessageSoapOut">
    <part name="parameters" element="s0:SendMessageResponse" />
  </message>
  <portType name="TESTWebServiceSoap">
    <operation name="SendTicket">
      <input message="s0:SendTicketSoapIn" />
      <output message="s0:SendTicketSoapOut" />
    </operation>
    <operation name="SendAudit">
      <input message="s0:SendAuditSoapIn" />
      <output message="s0:SendAuditSoapOut" />
    </operation>
    <operation name="SendMessage">
      <input message="s0:SendMessageSoapIn" />
      <output message="s0:SendMessageSoapOut" />
    </operation>
  </portType>
  <portType name="TESTWebServiceHttpGet" />
  <portType name="TESTWebServiceHttpPost" />
  <binding name="TESTWebServiceSoap" type="s0:TESTWebServiceSoap">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
    <operation name="SendTicket">
      <soap:operation soapAction="http://tempuri.org/SendTicket" style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="SendAudit">
      <soap:operation soapAction="http://tempuri.org/SendAudit" style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
    <operation name="SendMessage">
      <soap:operation soapAction="http://tempuri.org/SendMessage" style="document" />
      <input>
        <soap:body use="literal" />
      </input>
      <output>
        <soap:body use="literal" />
      </output>
    </operation>
  </binding>
  <binding name="TESTWebServiceHttpGet" type="s0:TESTWebServiceHttpGet">
    <http:binding verb="GET" />
  </binding>
  <binding name="TESTWebServiceHttpPost" type="s0:TESTWebServiceHttpPost">
    <http:binding verb="POST" />
  </binding>
    <service name="TESTWebService">
        <port name="TESTWebServiceSoap" binding="s0:TESTWebServiceSoap">
            <soap:address location="server.php"/>
        </port>
    <port name="TESTWebServiceHttpGet" binding="s0:TESTWebServiceHttpGet">
      <http:address location="server.php" />
    </port>
    <port name="TESTWebServiceHttpPost" binding="s0:TESTWebServiceHttpPost">
      <http:address location="server.php" />
    </port>
    </service>
</definitions>
    2 months later

    I think SoapServer doesn't support literal encoded style. I using RPC literal and works fine, but literal not and empty response is given...

      Correct: "RPC literal" = "document/rpc". Where is edit option??

        Write a Reply...