XML Soap запрос без учетных данных заголовка - PullRequest
1 голос
/ 07 февраля 2020

Итак, я знаю, что по этому поводу много вопросов, но каждый вопрос работает с заголовками. У меня SOAP запрос без заголовка:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v2="https://www.onderdelenlijn.nl/services/cars/v2.asmx">
   <soapenv:Header/>
   <soapenv:Body>
      <v2:airbags_get>
         <v2:credentials>
            <!--Optional:-->
            <v2:username>admin</v2:username>
            <!--Optional:-->
            <v2:password>adminpass</v2:password>
         </v2:credentials>
      </v2:airbags_get>
   </soapenv:Body>
</soapenv:Envelope>

Я пытаюсь использовать следующий код для аутентификации через тело:

<?php
$client = new SoapClient('https://www.onderdelenlijn.nl/services/cars/v2.asmx?wsdl');

$soapmessage = [
        'credentials' => [
            'username' => 'admin',
            'password' => 'adminpass'
        ]
];

$result = $client->airbags_get($soapmessage);
print_r($result);
?>

Чтобы быть понятным: нормальный SOAP запросы должны быть аутентифицированы в заголовке, а у меня его нет?

Ошибка: Uncaught Исключение SoapFault: [Клиент] SOAP -ERROR: Кодировка: у объекта нет свойства «параметров»

y

1 Ответ

0 голосов
/ 07 февраля 2020

В вашем сообщении soap отсутствует ожидаемое значение parameters:

$soapmessage = [
  'credentials' => [
    'username' => 'admin',
    'password' => 'adminpass'
  ],
  // Add this
  'parameters'  =>  [ 
    'culture'  =>  'en',
    'airbagid' =>  1,
  ],
];

Если вы просматриваете URL soap , вы можете увидеть пример запроса:

<soap:Body>
  <airbags_get xmlns="https://www.onderdelenlijn.nl/services/cars/v2.asmx">
    <credentials>
      <username>string</username>
      <password>string</password>
    </credentials>
    <parameters>
      <culture>nl or en or de or fr or es or pl</culture>
      <airbagid>int</airbagid>
    </parameters>
  </airbags_get>
</soap:Body>

Таким образом, ваш полный код будет выглядеть примерно так:

$client = new SoapClient('https://www.onderdelenlijn.nl/services/cars/v2.asmx?wsdl');
$soapmessage = [
  'credentials' => [
    'username' => 'admin',
    'password' => 'adminpass'
  ],
  'parameters'  =>  [
    'culture' =>  'en',
    'airbagid' =>  1,
  ],
];

$result = $client->airbags_get($soapmessage);
print_r($result);
...