Создать массив параметров для мыльного запроса php - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу создать запрос мыла, у меня есть пример запроса xml, но созданный мной массив получает неправильную структуру.

Образец, который должен иметь мой массив, должен выглядеть следующим образом:

<soap:Envelope xmlns:xsi="XMLSchema-instance" xmlns:xsd="XMLSchema" xmlns:soap="envelope">
  <soap:Header>
    <AuthenticationSoapHeader xmlns="http://example.com/ws">
      <WSUserName>USERNAME</WSUserName>
      <WSPassword>PASSWORD</WSPassword>
    </AuthenticationSoapHeader>
  </soap:Header>
  <soap:Body>
    <SearchFlight xmlns="http://example.com/ws">
      <OTA_AirLowFareSearchRQ ProviderType="OnlyAmadeus" RefundableType="OnlyRefundable" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="0">
        <OriginDestinationInformation>
          <DepartureDateTime>2019-02-03T00:01:00</DepartureDateTime>
          <OriginLocation LocationCode="FRA" />
          <DestinationLocation LocationCode="AMS" />
        </OriginDestinationInformation>

        <TravelerInfoSummary>
          <AirTravelerAvail>
            <PassengerTypeQuantity Code="ADT" />
          </AirTravelerAvail>
        </TravelerInfoSummary>
      </OTA_AirLowFareSearchRQ>
    </SearchFlight>
  </soap:Body>
</soap:Envelope>

Я пробовал следующее:

$client = new SoapClient($soapURL,array("trace"=>1));
$auth = array(
    'WSUserName' => 'USERNAME',
    'WSPassword' => 'PASSWORD'
);
$header = new SoapHeader($location,'authentification',$auth,false);
$client->__setSoapHeaders($header);
$params = array(
    'OTA_AirLowFareSearchRQ' => array(
        '_' => array(
            'OriginDestinationInformation' => array(
                'DepartureDateTime' => '2019-02-25T00:01:00',
                'OriginLocation' => array(
                    '_' => '',
                    'LocationCode' => 'FRA'
                ),
                'DestinationLocation' => array(
                    '_' => '',
                    'LocationCode' => 'AMS'
                )
            ),
            'TravelerInfoSummary' => array(
                'AirTravelerAvail' => array(
                    'PassengerTypeQuantity' => array(
                        '_' => '',
                        'Code' => 'ADT'
                    )
                )
            )
        ),
        'ProviderType' => 'OnlyAmadeus',
        'RefundableType' => 'AllFlights'
    )
);
$searchResponse = $client->__soapCall("SearchFlight", array($params));
var_dump($client->__getLastRequest());

Но я получаю следующее, что неправильно:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.com/ws" xmlns:ns2="http://example.com/ws">
    <SOAP-ENV:Header>
        <ns2:authentification>
            <item>
                <key>WSUserName</key><value>USERNAME</value>
            </item>
            <item>
                <key>WSPassword</key><value>PASSWORD</value>
            </item>
        </ns2:authentification>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <ns1:SearchFlight>
            <ns1:OTA_AirLowFareSearchRQ RefundableType="AllFlights" ProviderType="OnlyAmadeus"/>
        </ns1:SearchFlight>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Как я могу заставить это работать, пожалуйста, рассмотритеаутентификация заголовка, как в примере

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