У меня нет опыта использования SOAP, и я везде искал решение этой проблемы.
Я пытаюсь создать запрос XML для отправки на сервер SOAP из моего PHP-кода. Это сайт, где можно получить живое предложение по страхованию автомобиля.
Ссылка WSDL: https://eins2.zurich.com.my/VIXAPI/VixService.svc?wsdl
Я протестировал использование программного обеспечения SOAPUI, и оно дало мне XML, как показано ниже, для запроса:
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem = "http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<tem:fnGetVehicleDtlsByVIX>
<!--Optional:-->
<tem:VehInputInfo>{"AgentCode":"D02940-000","ParticipantCode":"06","RequestDateTime":"2017-Mar-17 11:00:00 PM","ID":"850321-07-5179","VehNo":"WA823H","Signature":"E448A5DE70160A7C541306B38ABAE3C8826ACD262DF217F9AA8B32244374C5E2E66D26D31874BBD832E43A6A569D20F2DFE8F674AECCFD698850BEBFB13767FD"}</tem:VehInputInfo>
</tem:fnGetVehicleDtlsByVIX>
</soapenv:Body>
</soapenv:Envelope>
Элемент VehInputInfo является обязательным входным параметром и представляет собой строку в формате JSON. Ответ был правильным (через программное обеспечение SOAPUI, проверьте скриншот здесь), и следующим шагом я пытаюсь передать XML-запрос выше в своем PHP-коде.
Ниже мой PHP-код:
<?
// error reporting
error_reporting(E_ALL - E_NOTICE);
ini_set('display_errors','On');
//header('Content-type: text/xml');
$wsdl = 'https://eins2.zurich.com.my/VIXAPI/VixService.svc?wsdl';
$client = new SoapClient($wsdl, array('trace'=> 1));
$xml = '<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem = "http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<tem:fnGetVehicleDtlsByVIX>
<!--Optional:-->
<tem:VehInputInfo>{"AgentCode":"D02940-000","ParticipantCode":"06","RequestDateTime":"2017-Mar-17 11:00:00 PM","ID":"850321-07-5179","VehNo":"WA823H","Signature":"E448A5DE70160A7C541306B38ABAE3C8826ACD262DF217F9AA8B32244374C5E2E66D26D31874BBD832E43A6A569D20F2DFE8F674AECCFD698850BEBFB13767FD"}</tem:VehInputInfo>
</tem:fnGetVehicleDtlsByVIX>
</soapenv:Body>
</soapenv:Envelope>';
//echo $xml;
try
{
$result = $client-> fnGetVehicleDtlsByVIX($xml);
}
catch (Exception $e)
{
var_dump($e->getMessage());
var_dump($client->__getLastRequest());
var_dump($client->__getLastResponse());
}
Но все, что я получил, это ошибки
Не уверен, что это правильный способ создания XML или есть другой способ сделать это?
Кто-нибудь может мне помочь? Заранее спасибо.
Я получаю сообщение об ошибке "похоже, у нас нет XML-документа"
@SayedMohdAli да, клиент и сервер SOAP включены. wsdl размещен на другом сервере поставщиком услуг.
@Scuzzy, это ошибка, которую я продолжаю получать. не знаю, что я сделал неправильно
Я вижу "Наш сайт в настоящее время проходит плановое техническое обслуживание и обновление, но скоро вернется" в HTML? eins2.zurich.com.my также имеет запланированное сообщение об обслуживании.






Я решил проблему. Изменено на использование cURL, как показано ниже. Возможно, это не лучший ответ, но он решил мою проблему.
<?php
// error reporting
error_reporting(E_ALL - E_NOTICE);
ini_set('display_errors','On');
$soapUrl = "https://eins2.zurich.com.my/VIXAPI/VixService.svc?wsdl"; //URL of WSDL
// xml post structure
$xml_post_string = '<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem = "http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<tem:fnGetVehicleDtlsByVIX>
<!--Optional:-->
<tem:VehInputInfo>{"AgentCode":"D02940-000","ParticipantCode":"06","RequestDateTime":"2017-Mar-17 11:00:00 PM","ID":"850321-07-5179","VehNo":"WA823H","Signature":"E448A5DE70160A7C541306B38ABAE3C8826ACD262DF217F9AA8B32244374C5E2E66D26D31874BBD832E43A6A569D20F2DFE8F674AECCFD698850BEBFB13767FD"}</tem:VehInputInfo>
</tem:fnGetVehicleDtlsByVIX>
</soapenv:Body>
</soapenv:Envelope>';
$headers = array(
"POST: https://eins2.zurich.com.my/VIXAPI/VixService.svc HTTP/1.1",
"Content-type: text/xml;charset=\"UTF-8\"",
"Accept-Encoding: gzip,deflate",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: \"http://tempuri.org/IVixService/fnGetVehicleDtlsByVIX\"",
"Content-Length: ".strlen($xml_post_string),
"Host: eins2.zurich.com.my",
"Connection: Keep-Alive"
); //SOAPAction: your op URL
$url = $soapUrl;
//print_r($headers);
// PHP cURL for https connection with auth
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_USERPWD, $soapUser.":".$soapPassword); // username and password - declared at the top of the doc
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// converting
$response = curl_exec($ch);
curl_close($ch);
print_r($response);
У вас есть SOAP? в вашем php.ini проверьте phpinfo() и проверьте, включен ли там SOAP или нет