Отправка XML-запроса с помощью SOAP в PHP - PullRequest
1 голос
/ 08 сентября 2011

Я пытаюсь создать веб-службу UPS Freight Rating, используя PHP и SOAP.UPS предоставляет WSDL для клиента SOAP (важная часть которого я вставила ниже).

Мой вопрос: как мне создать XML-документ для отправки с использованием клиента SOAP?Я видел противоречивые сообщения о том, нужно ли форматировать мой запрос как массив PHP или гигантскую строку.Когда этот документ создан, как должен быть выполнен запрос через клиент SOAP, который я создал в PHP?

Часть WSDL:

<wsdl:binding name="FreightRateBinding" type="tns:FreightRatePortType">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="ProcessFreightRate">
            <soap:operation soapAction="http://onlinetools.ups.com/webservices/FreightRateBinding/v1.0" style="document"/>
            <wsdl:input name="RateRequest">
                <soap:body parts="Body" use="literal"/>
                <soap:header message="tns:RateRequestMessage" part="UPSSecurity" use="literal">
                    <soap:headerfault message="tns:RateErrorMessage" part="RateError" use="literal"/>
                </soap:header>
            </wsdl:input>
            <wsdl:output name="RateResponse">
                <soap:body parts="Body" use="literal"/>
            </wsdl:output>
            <wsdl:fault name="RateError">
                <soap:fault name="RateError" use="literal"/>
            </wsdl:fault>
        </wsdl:operation>
    </wsdl:binding>

Часть моего XML-документа,Far:

<?xml version="1.0" ?>
<FreightRateRequest>
    <Request>
        <RequestOption>1</RequestOption>
    </Request>
    <ShipFrom>
        <Address>
            <Name>Test</Name>
            <AddressLine1>17 MacDade Blvd</AddressLine1>
            <City>Collingdale</City>
            <PostalCode>19023</PostalCode>
            <CountryCode>US</CountryCode>
            <Phone>
                <Number>1-800-249-0011</Number>
            </Phone>
        </Address>
    </ShipFrom>
    <ShipperNumber>21W17V</ShipperNumber>
    <ShipTo>
        <Name>Test</Name>
        <AddressLine1>14908 Sandy Lane</AddressLine1>
        <City>San Jose</City>
        <PostalCode>95124</PostalCode>
        <CountryCode>US</CountryCode>
    </ShipTo>

PHP, пока:

$mySOAP = new SoapClient("FreightRate.wsdl", $myOptionsArray);

Любая помощь будет принята с благодарностью.Я также отвечу с любой дополнительной информацией, если это необходимо.

1 Ответ

2 голосов
/ 08 сентября 2011

XML является серьезной болью для генерации с использованием операций DOM.Вы сэкономите кучу волос, просто рассматривая их как гигантскую строку и вставляя соответствующие значения напрямую:

$xml = <<<EOL
<?xml blah blah blah
<root>
   <tag>$some_value</tag>
   <othertag>$different_value</othertag>
</root>
EOL;

Пока вы принимаете меры предосторожности, чтобы содержимое переменныхдействительный XML, это, безусловно, самый простой метод.Это означает, что необходимо преобразовать любые символьные сущности HTML, которые не принимаются в 5 XML (<>"'&), в их необработанный символьный формат и экранировать эти 5 символов в эквивалентную сущность.

...