我正在使用送货上门服务,要求我使用SOAP在我们的网站内创建送货。我之前在PHP中使用过SOAP,它总是一次试错。大多数时候,由于缺乏文档。
下一个XML是他们发给我的,这是对他们服务器的有效SOAP请求:
<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>
...这就是我在PHP中尝试发送成功请求的原因:
<?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);
我得到的第一件事是错误的版本&#39;异常消息。我尝试过从SOAP_1_1
切换到SOAP_1_2
同样的事情。我从倾销的请求中看到的是,他们看起来并不像我给出的例子:
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>
我不确定如何关注,客户端没有在PHP上运行示例。有关如何遵循的任何建议?
提前致谢!
答案 0 :(得分:0)
测试你的肥皂要求:
<?php
if(isset($_POST['request'])){
$XML = $_POST['request'];
$URL = $_POST['url'];
$ch = curl_init("$URL");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_TIMEOUT, 60);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch,CURLOPT_POSTFIELDS,$XML);
$result=curl_exec ($ch);
curl_close($ch);
}
?>
<form method="post" style="margin: 0; padding: 0;">
<input name='url' type="text" placeholder="URL here" value="<?php if(isset($_POST['url'])) echo $_POST['url']; ?>" style="height: 10%; width:90%">
<button style="width: 9%; height: 10%;">LOAD SOAP</button>
<div style="width: 49%; float:left;">
<textarea style="width: 100%; height:89%;" placeholder='REQUEST HERE' name="request"><?php if(isset($_POST['request'])) echo $_POST['request']; ?></textarea>
</div>
<div style="width: 50%; display: inline;">
<textarea placeholder="RESPONSE HERE" disabled="true" style="width: 50%; height: 40%;"><?php if(isset($result)) echo strtok($result, '<'); ?></textarea>
<textarea placeholder="RESPONSE HERE" disabled="true" style="width: 50%; height: 49%;"><?php if(isset($result)) $config = array('indent'=>true,'output-xml'=>true,'input-xml'=> true); $tidyxml = new tidy; $tidyxml->parseString(strstr($result, '<'), $config, 'utf8'); echo $tidyxml;?></textarea>
</div>
</form>