У меня есть SOAP Клиент, работающий в PHP 7.2, например:
$wsdl = "http://ws4.altotrack.com/WSPosiciones_WalmartMX/WSPosiciones_WalmartMX.svc?wsdl";
$this->client = new SoapClient($wsdl, [
'soap_version' => SOAP_1_1,
'exceptions' => 1,
'trace' => 1,
'encoding'=>'UTF-8',
]);
// This is generated dynamically but with the expected format and it's ok
$xml_string = '<registro><systemUser>AltoWS</systemUser><password>$Alt0WS</password><movil><proveedor><registro><systemUser>...</systemUser><password>...</password><movil><proveedor>...</proveedor><dominio>...</dominio><nroSerie>...</nroSerie><codigo>...</codigo><latitud>...</latitud><longitud>...</longitud><altitud>...</altitud><velocidad>...</velocidad><rumbo>...</rumbo> <fechaHoraEvento>...</fechaHoraEvento><fechaHoraRecepcion>...</fechaHoraRecepcion></movil></registro>';
$soapvar = new SoapVar($xml_string, XSD_STRING);
$xml_payload = ['xmlSerializado' => $soapvar];
try {
$result = $this->client->ProcessXML($xml_payload);
dump($this->client->__getLastRequest());
dump($this->client->__getLastRequestHeaders());
//dump($this->client->__getLastResponse());
//dump($this->client->__getLastResponseHeaders());
} catch (SoapFault $fault) {
dump($fault);
}
Это SOAP Запрос конверта генерируется:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/">
<SOAP-ENV:Body>
<ns1:ProcessXML>
<ns1:xmlSerializado>
<registro>
<systemUser>...</systemUser>
<password>...</password>
<movil>
<proveedor>...</proveedor>
<dominio>...</dominio>
<nroSerie>...</nroSerie>
<codigo>...</codigo>
<latitud>...</latitud>
<longitud>...</longitud>
<altitud>...</altitud>
<velocidad>...</velocidad>
<rumbo>...</rumbo>
<fechaHoraEvento>...</fechaHoraEvento>
<fechaHoraRecepcion>...</fechaHoraRecepcion>
</movil>
</registro>
</ns1:xmlSerializado>
</ns1:ProcessXML>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Это заголовок запроса:
POST /WSPosiciones_WalmartMX/WSPosiciones_WalmartMX.svc HTTP/1.1
Host: ws4.altotrack.com
Connection: Keep-Alive
User-Agent: PHP-SOAP/7.2.19-0ubuntu0.18.10.1
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/IServicePositions/ProcessXML
Результатом всегда является ошибка, а не SOAP Fault Exception, сам ответ должен быть в порядке, но я получаю ошибку:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<ProcessXMLResponse xmlns="http://tempuri.org/">
<ProcessXMLResult>Error</ProcessXMLResult>
</ProcessXMLResponse>
</s:Body>
</s:Envelope>
Я не знать, почему точно такой же код работает нормально в PHP 5.3.3, без изменений в алгоритме SOAP Client или xml, вывод запроса одинаков:
POST /WSPosiciones_WalmartMX/WSPosiciones_WalmartMX.svc HTTP/1.1
Host: ws4.altotrack.com
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.3.3
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/IServicePositions/ProcessXML
тот же запрос использование PHP 5.3 дает мне такой ответ:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<ProcessXMLResponse xmlns="http://tempuri.org/">
<ProcessXMLResult>Ok</ProcessXMLResult>
</ProcessXMLResponse>
</s:Body>
</s:Envelope>
Я не знаю почему, и я не знаю, как отладить это поведение, есть ли у кого-нибудь еще эта проблема?
Я пытался изменить контекст, используя другие опции в клиенте, с библиотекой Nu soap, используя вместо этого карту классов, но всегда получал сообщение об ошибке.
$context = stream_context_create([
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
]);
$options = [
'soap_version' => SOAP_1_1,
'exceptions' => 1,
'trace' => 1,
'encoding' =>'UTF-8',
'style' => SOAP_DOCUMENT,
'use' => SOAP_LITERAL,
'stream_context' => $context
];
Я не уверен, связано ли это с PHP или здесь происходит что-то еще, но забавный факт, что он работал до последнего PHP обновлять как неделю go или около того.
Upgrade:
....
php7.2-xmlrpc:amd64 (7.2.24-0ubuntu0.18.04.1, 7.2.24-0ubuntu0.18.04.2),
php7.2-soap:amd64 (7.2.24-0ubuntu0.18.04.1, 7.2.24-0ubuntu0.18.04.2)
End-Date: 2020-01-16 00:27:23
Любая помощь будет оценена.