Prova a usare le nusoaplib al posto delle standard di PHP: http://sourceforge.net/projects/nusoap/
Io mi ci trovo benissimo e le chiamate sono davvero banali, del tipo
codice:
$soap_client = new nusoap_client($wsdl_path."nome_file_definizioni.wsdl", true, null, null, null, null);
$err = $soap_client->getError();
if ($err) {
echo $err;
die();
}
$param = array("Tipo" => "cane", "Taglia" => "media", "Peso" => 15);
$result = $soap_client->call("metodo_wsdl_pubblico", $param, "", "", "");
Ovviamente queste lib presuppongono l'esistenza di un file wsdl fornito dal server soap (quindi i colleghi javisti) che ha una sua struttura del tipo
codice:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://soap.service.acme.com" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://soap.service.acme.com" xmlns:intf="http://soap.service.acme.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<schema elementFormDefault="qualified" targetNamespace="http://soap.service.acme.com" xmlns="http://www.w3.org/2001/XMLSchema">
<element name="metodo_wsdl_pubblico">
<complexType>
<sequence>
<element name="Tipo" type="xsd:string"/>
<element name="Taglia" type="xsd:string"/>
<element name="Peso" nillable="true" type="xsd:int"/>
</sequence>
</complexType>
</element>
<element name="metodo_wsdl_pubblico_response">
<complexType>
<sequence>
<element maxOccurs="unbounded" name="metodo_wsdl_pubblico_response" type="impl:metodo_wsdl_pubblico_ritorno"/>
</sequence>
</complexType>
</element>
<complexType name="metodo_wsdl_pubblico_ritorno">
<sequence>
<element name="codice_ritorno" nillable="true" type="xsd:string"/>
<element name="esito" nillable="true" type="xsd:string"/>
<element name="messaggio" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
</schema>
</wsdl:types>
<wsdl:message name="metodo_wsdl_pubblico_richiesta">
<wsdl:part element="impl:metodo_wsdl_pubblico" name="parameters"/>
</wsdl:message>
<wsdl:message name="metodo_wsdl_pubblico_ritorno">
<wsdl:part element="impl:metodo_wsdl_pubblico_ritorno" name="parameters"/>
</wsdl:message>
<wsdl:portType name="metodo_wsdl_pubblicoServicePortType">
<wsdl:operation name="metodo_wsdl_pubblico">
<wsdl:input message="impl:metodo_wsdl_pubblico_richiesta" name="metodo_wsdl_pubblico_richiesta"/>
<wsdl:output message="impl:metodo_wsdl_pubblico_ritorno" name="metodo_wsdl_pubblico_ritorno"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="metodo_wsdl_pubblicoServiceBinding" type="impl:metodo_wsdl_pubblicoServicePortType">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="metodo_wsdl_pubblico">
<wsdlsoap:operation soapAction="metodo_wsdl_pubblico"/>
<wsdl:input name="metodo_wsdl_pubblico_richiesta">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="metodo_wsdl_pubblico_ritorno">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="metodo_wsdl_pubblico_Service">
<wsdl:port binding="impl:metodo_wsdl_pubblicoServiceBinding" name="metodo_wsdl_pubblicoServicePort">
<wsdlsoap:address location="http://xxx.xxx.xxx.xxx/cgi-bin/applet?wsabbi"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Non spaventarti, la struttura può essere anche molto più semplice!)
I tuoi colleghi comunque han ragione quando dicono:
non devo far cosí, ma che devo passare un XML che rappresenta un insieme di parametri!!
perchè loro in ingresso si aspettano un XML. Tu però, lato php, devi passare un array alle funzioni di chiamata soap, è poi la classe soap che converte tutto in xml e lo "sputa" al server di destinazione