PHP для вызова веб-службы SOAP - PullRequest
0 голосов
/ 25 октября 2018

Мне нужна помощь, пожалуйста.

Я пытаюсь вызвать веб-сервис с использованием PHP, и у меня возникают проблемы с сообщениями различного типа.

WSDL: "http://195.144.16.7/ElastrakEDI/ElastrakEDI.asmx?WSDL", а веб-служба называется GetPartMaster. Сначала имя пользователя и пароль - и TESTUID, и TESTPWD (для целей тестирования).

Ниже приведен XML-запрос

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:edi="http://elastrak.gr/edi/">
   <soap:Header>
      <edi:AuthHeader>
         <!--Optional:-->
         <edi:Username>TESTUID</edi:Username>
         <!--Optional:-->
         <edi:Password>TESTPWD</edi:Password>
      </edi:AuthHeader>
   </soap:Header>
   <soap:Body>
      <edi:GetPartMaster/>
   </soap:Body>
</soap:Envelope>

Этот XMLэто ответ

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Header>
      <AuthHeader xmlns="http://elastrak.gr/edi/">
         <Username>TESTUID</Username>
         <Password>TESTPWD</Password>
      </AuthHeader>
   </soap:Header>
   <soap:Body>
      <GetPartMasterResponse xmlns="http://elastrak.gr/edi/">
         <GetPartMasterResult>
            <elastrakPartMasterFile xmlns="">
               <PartMasterURL>http://195.144.16.7/elastrakEDI/Temp/Parts/OTWKOJL4.txt</PartMasterURL>
               <ErrorCode/>
               <ErrorDescription/>
            </elastrakPartMasterFile>
         </GetPartMasterResult>
      </GetPartMasterResponse>
   </soap:Body>
</soap:Envelope>

Я попробовал приведенный ниже код php, но все еще не могу заставить его работать

<?php

$wsdl = 'http://195.144.16.7/ElastrakEDI/ElastrakEDI.asmx?WSDL';

$trace = true;
$exceptions = true;

$xml_array['Username'] = 'TESTUID';
$xml_array['Password'] = 'TESTPWD';

$client = new SoapClient($wsdl, array('trace' => $trace, 'exceptions' => $exceptions));
$client = new SoapClient($wsdl);
$response = $client->GetPartMaster($xml_array);

try
{
   $client = new SoapClient($wsdl, array('trace' => $trace, 'exceptions' => $exceptions));
   $response = $client->GetPartMaster($xml_array);
}

catch (Exception $e)
{
   echo "Error!";
   echo $e -> getMessage ();
   echo 'Last response: '. $client->__getLastResponse();
}

$response = $response->GetPartMaster->PartMasterURL;

var_dump($response);

?>

Еще раз спасибо за ваше время и помощь.

1 Ответ

0 голосов
/ 27 октября 2018

Ваш запрос в настоящее время неправильно составлен, так как вы должны принять во внимание, что в действительности в запросе есть следующие части:

  • заголовок SOAP, содержащий имя пользователя и пароль
  • Тело SOAP, содержащее элемент GetPartMaster

Взгляните на класс SoapClient и метод __setSoapHeaders .

Вот почему яНастоятельно советуем вам использовать генератор WSDL to PHP для отправки SOAP-запроса, поскольку это позволит вам легко сконструировать запрос и затем обработать ответ, используя подход ООП и не задаваясь вопросом, как отправить параметры.Используя сгенерированный PHP SDK и хорошую IDE, такую ​​как PhpStorm, или любую IDE на основе Eclipse с автозаполнением, вам будет легко найти свой путь.Попробуйте PackageGenerator проект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...