SoapClient. Как передать xml данные?

EMDM

Новичок
Добрый день! Разрабатываю модуль для передачи данных с сайта в систему FastOperator (fast-operator.ru).
PHP:
$wdsl = 'http://212.44.134.166:2001/FastOperator.asmx?WSDL';
$client = new SoapClient($wdsl, array(
    'trace'       => true
    ,'exceptions'  => true
));
//второй параметр просто комментарий к заказу
$result = $client->addOrder($xml, 'test');
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Order DiscountPercent="0" PayMethod="Наличные" OrderId="19594" Type="Доставка" DeliveryPrice="0" RemarkMoney="4000" Department="0" TimePlan="">
    <Customer Login="" Name="Тестович" FIO="Тестович"></Customer>
    <Phone Code="955" Number="7230067" Remark=""></Phone>
    <Remark><![CDATA[Сдача с 4000]]></Remark>
    <Address CityName="Москва" StationName="КАЛУЖСКАЯ" StreetName="ВОРОНЦОВСКИЕ ПРУДЫ" House="3" Corpus="" Building="" Floor="19" Flat="54" Porch="5" DoorCode="" RoomType="квартира">
        <Remark><![CDATA[доставка желательна к 14]]></Remark>
    </Address>
    <Products>
        <Product DiscountPercent="0" Code="804" Price="800" Qty="2">
            <Remark><![CDATA[]]></Remark>
        </Product>
        <Product DiscountPercent="0" Code="717" Price="500" Qty="1">
            <Remark><![CDATA[]]></Remark>
        </Product>
        <Product DiscountPercent="0" Code="721" Price="750" Qty="1">
            <Remark><![CDATA[]]></Remark>
        </Product>
        <Product DiscountPercent="0" Code="700" Price="880" Qty="1">
            <Remark><![CDATA[]]></Remark>
        </Product>
    </Products>
</Order>
В ответ пустота. Если посмотреть на сформированный запрос в виде xml, то он формируется не корректно почему-то. А точнее там не передается $xml.
С SOAP-сервисами знаком неделю. Не знаю какие еще данные указать. В какую строну копать? Помогите, пожалуйста.
Request Headers
POST / HTTP/1.1
Host: 212.44.134.166:2001
Connection: Keep-Alive
User-Agent: PHP-SOAP/7.1.30
Content-Type: text/xml; charset=utf-8
SOAPAction: "www.fast-operator.ru/AddOrder"
Content-Length: 240

Response Headers
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Tue, 24 Sep 2019 16:41:44 GMT
Content-Length: 330
LastRequest:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="www.fast-operator.ru">
    <SOAP-ENV:Body>
        <ns1:AddOrder/><!-- по-идеи тут должен передаваться $xml как-то -->
        <param1>Test 1</param1>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
LastResponse:
XML:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <AddOrderResponse xmlns="www.fast-operator.ru">
            <AddOrderResult /><!-- здесь по-идеи ответ должен быть, но т.к. ничего не передалось, ничего и не вернулось -->
        </AddOrderResponse>
    </soap:Body>
</soap:Envelope>
 

WMix

герр M:)ller
Партнер клуба
Его же передаю в SoapClient первым параметром.
я было подумал что это локальная сеть


чтото мне подсказывает что addOrder принимает 1 аргумент
PHP:
var_dump($client->__getFunctions());

// >>> AddOrderResponse AddOrder(AddOrder $parameters)

var_dump($client->__getTypes());

// >>> struct AddOrder {
// >>>  string Order;
// >>>  string OrderText;
// >>> }
я уже забыл немного но вроде должно быть так
PHP:
var_dump($client->addOrder(['Order' => $xml, 'OrderText' => 'test']));
//php shell code:1:
//class stdClass#1 (1) {
//  public $AddOrderResult =>
//  string(73) "<Order Code="000008" ID="8" GUID="1B5309CD-EAEE-471D-8F96-727EC74B9925"/>"
//}
 
Последнее редактирование:
  • Like
Реакции: EMDM

EMDM

Новичок
я уже забыл немного но вроде должно быть так
Спасибо большое!
Т.е. получается передавать массивом данные нужно? Действительно, сейчас попробовал, в ответ пришел XML вида
XML:
<Order Code="000008" ID="8" GUID="1B5309CD-EAEE-471D-8F96-727EC74B9925"/>
А как дальше работать с этим XML ? Через встроенные в php классы для работы с XML ? или как-то прям из SoapClient можно данные в нормальном виде получить?
 

WMix

герр M:)ller
Партнер клуба
Т.е. получается передавать массивом данные нужно?
можно и обьект, но php позволяет любое г...о
А как дальше работать с этим XML ?
тебе не повезло, API ужасное, все делать ручками
Через встроенные в php классы для работы с XML
Код:
var_dump(
    (string)simplexml_load_string(
        $client->addOrder(['Order' => $xml, 'OrderText' => 'test'])->AddOrderResult
    )->attributes()->GUID
);
 
  • Like
Реакции: EMDM
Сверху