'Sending soap request with attributes using PHP SoapClient

I`m having remote wsdl API that requires some xml attributes in request. Integration of this API must be made usind PHP (and possibly SoapClient).

I`m creating SimpleXMLElement() object like

<?xml version="1.0" encoding="UTF-8"?>
<Body>
    <FlightMatrixRequest xmlns="http://www.somesite.com/webservices">
        <flightMatrixRQ Target="Test" Version="1.0">
            <AirItinerary DirectionInd="OneWay">
                <OriginDestinationOptions>
                    <OriginDestinationOption>
                        <FlightSegment DepartureDateTime="2022-05-30T00:00:00+11:00"
                                       ArrivalDateTime="2022-05-30T00:00:00+11:00" RPH="1">
                            <DepartureAirport LocationCode="BKK"/>
                            <ArrivalAirport LocationCode="CNX"/>
                            <MarketingAirline Code="SL"/>
                        </FlightSegment>
                    </OriginDestinationOption>
                </OriginDestinationOptions>
            </AirItinerary>
            <TravelerInfoSummary>
                <AirTravelerAvail>
                    <AirTraveler>
                        <PassengerTypeQuantity Code="ADT" Quantity="1"/>
                    </AirTraveler>
                </AirTravelerAvail>
                <AirTravelerAvail>
                    <AirTraveler>
                        <PassengerTypeQuantity Code="CNN" Quantity="1"/>
                    </AirTraveler>
                </AirTravelerAvail>
                <AirTravelerAvail>
                    <AirTraveler>
                        <PassengerTypeQuantity Code="INF" Quantity="1"/>
                    </AirTraveler>
                </AirTravelerAvail>
            </TravelerInfoSummary>
        </flightMatrixRQ>
    </FlightMatrixRequest>
</Body>

Converting it to array using $array = json_decode(json_encode($xml), true);

Then requesting $soapClient->__soapCall($method, $array) And getting errors from API

$soapClient->__getLastRequest() returns

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://www.somesite.com/webservices"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    <env:Body>
        <ns1:FlightMatrixRequest>
            <ns1:flightMatrixRQ>
                <ns1:AirItinerary>
                    <ns1:OriginDestinationOptions>
                        <ns1:OriginDestinationOption>
                            <ns1:FlightSegment>
                                <ns1:DepartureAirport/>
                                <ns1:ArrivalAirport/>
                                <ns1:MarketingAirline/>
                            </ns1:FlightSegment>
                        </ns1:OriginDestinationOption>
                    </ns1:OriginDestinationOptions>
                </ns1:AirItinerary>
                <ns1:TravelerInfoSummary>
                    <ns1:AirTravelerAvail>
                        <ns1:AirTraveler>
                            <ns1:PassengerTypeQuantity/>
                            <ns1:PassengerIdentificationDocument xsi:nil="true"/>
                        </ns1:AirTraveler>
                    </ns1:AirTravelerAvail>
                    <ns1:AirTravelerAvail>
                        <ns1:AirTraveler>
                            <ns1:PassengerTypeQuantity/>
                            <ns1:PassengerIdentificationDocument xsi:nil="true"/>
                        </ns1:AirTraveler>
                    </ns1:AirTravelerAvail>
                    <ns1:AirTravelerAvail>
                        <ns1:AirTraveler>
                            <ns1:PassengerTypeQuantity/>
                            <ns1:PassengerIdentificationDocument xsi:nil="true"/>
                        </ns1:AirTraveler>
                    </ns1:AirTravelerAvail>
                </ns1:TravelerInfoSummary>
            </ns1:flightMatrixRQ>
        </ns1:FlightMatrixRequest>
    </env:Body>
</env:Envelope>

As you may see there is no attribute`s data, like DepartureDateTime/LocationCode etc. Could not find any solution for this case. Possible it may be fixed by using regular curl request with prepared body/headers but it does not look like a good idea.

Any ideas?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source