I am working with a home delivery service which requires me to use SOAP to create shippings within our website. I've used SOAP before in PHP and it's always been a trial and error. Most of the times, due to the lack of documentation.
The next XML is what they've sent me, this is a valid SOAP request to their server:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:imp="http://localhost:7026/ImprimirECBWebService">
<soapenv:Header/>
<soapenv:Body>
<imp:impresionIntegracionPDFConECBWS>
<imp:in0>USUARIO</imp:in0>
<imp:in1>PASWORD</imp:in1>
<imp:in2><![CDATA[<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<exp>
<bulto>
<ci>CLIENTE</ci>
<nif>NIF</nif>
<ccc>CCC SEUR</ccc>
<servicio>31</servicio>
<producto>2</producto>
<total_bultos>1</total_bultos>
<total_kilos>10</total_kilos>
<observaciones>Esto es una prueba29</observaciones>
<referencia_expedicion>115534</referencia_expedicion>
<ref_bulto>EPTTE_31</ref_bulto>
<clavePortes>F</clavePortes>
<claveReembolso/>
<valorReembolso/>
<nombre_consignatario>Xavi Lopez Gonzalez</nombre_consignatario>
<direccion_consignatario>Avd Torre Mateu n 93</direccion_consignatario>
<tipoVia_consignatario>AVD</tipoVia_consignatario>
<tNumVia_consignatario>N</tNumVia_consignatario>
<numVia_consignatario>93</numVia_consignatario>
<escalera_consignatario>.</escalera_consignatario>
<piso_consignatario>.</piso_consignatario>
<puerta_consignatario>.</puerta_consignatario>
<poblacion_consignatario>GETAFE</poblacion_consignatario>
<codPostal_consignatario>28905</codPostal_consignatario>
<pais_consignatario>ES</pais_consignatario>
<telefono_consignatario>937297800</telefono_consignatario>
<atencion_de>Xavi</atencion_de>
<test_preaviso>S</test_preaviso>
<test_reparto>N</test_reparto>
<test_email>S</test_email>
<email_consignatario>varela@trapido.e.telefonica.net</email_consignatario>
</bulto>
</exp>
</root>
]]></imp:in2>
<imp:in3>fichero.xml</imp:in3>
<imp:in4>NIF</imp:in4>
<imp:in5>54</imp:in5>
<imp:in6>-1</imp:in6>
<imp:in7>MIFARMA</imp:in7>
</imp:impresionIntegracionPDFConECBWS>
</soapenv:Body>
</soapenv:Envelope>
... and this is what I've been trying in PHP to send a successful request:
<?php
class Seur
{
public function createShipment($consignatario)
{
$data = [
'cliente' => Config::get('services.seur.client'),
'nif' => Config::get('services.seur.nif'),
'ccc' => Config::get('services.seur.ccc'),
'servicio' => '',
'producto' => '',
'total_bultos' => '',
'total_kilos' => '',
'observaciones' => '',
'referencia_expedicion' => '',
'referencia_bulto' => '',
'clave_portes' => '',
'consignatario' => $this->processCosignatario($consignatario),
];
$xml = View::make('seur.shipment', $data);
try {
$client = $this->getClient('ImprimirECBWebService?wsdl');
$client->impresionIntegracionPDFConECBWS([
'in0' => Config::get('services.seur.username'),
'in1' => Config::get('services.seur.password'),
'in2' => $xml->render(),
]);
} catch (SoapFault $e) {
File::put(storage_path('logs/soap-' . time() . '.log'), $client->__getLastRequest());
throw $e;
}
}
protected function getClient($endpoint)
{
$baseUrl = Config::get('services.seur.base_url');
$options = [
'ssl' => [
'verify_peer' => false,
'allow_self_signed' => true
],
];
$uri = $baseUrl . $endpoint;
$client = new SoapClient(null, [
'uri' => $uri,
'location' => $uri,
'cache_wsdl' => WSDL_CACHE_NONE,
'trace' => true,
'soap_version' => SOAP_1_2,
]);
return $client;
}
}
$consignatario = [
'nombre' => 'Lorem ipsum',
'direccion' => 'Test',
'tipo_via' => '',
't_numero_via' => '',
'numero_via' => 'Lorem',
'escalera' => '',
'piso' => 'Lorem',
'puerta' => '',
'poblacion' => 'Barcelona',
'codigo_postal' => '08001',
'pais' => 'ES',
'telefono' => 'Lorem Ipsum',
'email' => 'loremipsum@example.org',
];
$seur = new Seur;
$shipment = $seur->createShipment($consignatario);
The first thing I get is a 'Wrong version' exception message. I've tried switching from SOAP_1_1
to SOAP_1_2
and same thing. What I see from the dumped requests is that they don't look like the example I've been given:
SOAP_1_1
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://citpre.seur.com/CIT-war/services/ImprimirECBWebService?wsdl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:impresionIntegracionPDFConECBWS><param0 xsi:type="ns2:Map"><item><key xsi:type="xsd:string">in0</key><value xsi:type="xsd:string">wsecomm0810</value></item><item><key xsi:type="xsd:string">in1</key><value xsi:type="xsd:string">ws0810ecomm</value></item><item><key xsi:type="xsd:string">in2</key><value xsi:type="xsd:string"><?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<exp>
<bulto>
<ci>example</ci>
<nif>lorem</nif>
<ccc>ccc</ccc>
<servicio></servicio>
<producto></producto>
<total_bultos></total_bultos>
<total_kilos></total_kilos>
<observaciones></observaciones>
<referencia_expedicion></referencia_expedicion>
<ref_bulto></ref_bulto>
<clavePortes></clavePortes>
<claveReembolso/>
<valorReembolso/>
<nombre_consignatario>Lorem Ipsum</nombre_consignatario>
<direccion_consignatario>Example</direccion_consignatario>
<tipoVia_consignatario></tipoVia_consignatario>
<tNumVia_consignatario></tNumVia_consignatario>
<numVia_consignatario>X</numVia_consignatario>
<escalera_consignatario></escalera_consignatario>
<piso_consignatario>Y</piso_consignatario>
<puerta_consignatario></puerta_consignatario>
<poblacion_consignatario>Barcelona</poblacion_consignatario>
<codPostal_consignatario>08001</codPostal_consignatario>
<pais_consignatario>ES</pais_consignatario>
<telefono_consignatario>123123123</telefono_consignatario>
<atencion_de>Lorem Ipsum</atencion_de>
<test_preaviso>S</test_preaviso>
<test_reparto>N</test_reparto>
<test_email>S</test_email>
<email_consignatario>loremipsum@example.org</email_consignatario>
</bulto>
</exp>
</root>
</value></item></param0></ns1:impresionIntegracionPDFConECBWS></SOAP-ENV:Body></SOAP-ENV:Envelope>
SOAP_1_2
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://citpre.seur.com/CIT-war/services/ImprimirECBWebService?wsdl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:impresionIntegracionPDFConECBWS>
<param0 xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">in0</key>
<value xsi:type="xsd:string">USERNAME</value>
</item>
<item>
<key xsi:type="xsd:string">in1</key>
<value xsi:type="xsd:string">PASSWORD</value>
</item>
<item>
<key xsi:type="xsd:string">in2</key>
<value xsi:type="xsd:string"><?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<exp>
<bulto>
<ci>Lorem</ci>
<nif>Loprem Ipsum</nif>
<ccc>Lorem</ccc>
<servicio></servicio>
<producto></producto>
<total_bultos></total_bultos>
<total_kilos></total_kilos>
<observaciones></observaciones>
<referencia_expedicion></referencia_expedicion>
<ref_bulto></ref_bulto>
<clavePortes></clavePortes>
<claveReembolso/>
<valorReembolso/>
<nombre_consignatario>Lorem Ipsum</nombre_consignatario>
<direccion_consignatario>Lorem Ipsum</direccion_consignatario>
<tipoVia_consignatario></tipoVia_consignatario>
<tNumVia_consignatario></tNumVia_consignatario>
<numVia_consignatario>x</numVia_consignatario>
<escalera_consignatario></escalera_consignatario>
<piso_consignatario>Y</piso_consignatario>
<puerta_consignatario></puerta_consignatario>
<poblacion_consignatario>Barcleona</poblacion_consignatario>
<codPostal_consignatario>08001</codPostal_consignatario>
<pais_consignatario>ES</pais_consignatario>
<telefono_consignatario>Lorem ipsum</telefono_consignatario>
<atencion_de>Lorem ipsum</atencion_de>
<test_preaviso>S</test_preaviso>
<test_reparto>N</test_reparto>
<test_email>S</test_email>
<email_consignatario>loremipsum@example.org</email_consignatario>
</bulto>
</exp>
</root>
</value></item></param0></ns1:impresionIntegracionPDFConECBWS></SOAP-ENV:Body></SOAP-ENV:Envelope>
I'm not sure how to follow and the client doesn't have running examples on PHP. Any advice on how could I follow?
Thanks in advance!