PHP - создание XML для запроса SOAP - PullRequest
0 голосов
/ 12 февраля 2019

У меня нулевой опыт использования 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 или есть какой-то другой способ сделать это?

Кто-нибудь может мне помочь?Заранее спасибо.

1 Ответ

0 голосов
/ 13 февраля 2019

Я решил проблему.Изменено использование 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);
...