объект — PHP Soap клиент со сложными типами

Я пытаюсь получить запрос с этой структурой:

<SOAP-ENV:Body>
<ns1:getCreditReportTypes>
<reportTypeRequest>
<reportParams xsi:type="ns1:personCreditReportParams">
<personId>4</personId>
<consentConfirmed>true</consentConfirmed>
</reportParams>
</reportTypeRequest>
</ns1:getCreditReportTypes>
</SOAP-ENV:Body>

Вот мой php-код:

$obj = new \stdClass();
$obj->personId = 4;
$obj->consentConfirmed = true;
$data = new \SoapVar($obj, SOAP_ENC_OBJECT, "personCreditReportParams", $namespace, "reportParams");
$res = $this->client->getCreditReportTypes(new \SoapParam($data,"reportTypeRequest"));

Тем не менее, PHP генерирует недопустимый XML:

<SOAP-ENV:Body>
<ns1:getCreditReportTypes xsi:type="ns1:personCreditReportParams">
<consentConfirmed>true</consentConfirmed>
<personId>4</personId>
</ns1:getCreditReportTypes>
</SOAP-ENV:Body>

Как я могу сделать правильный XML с объектным способом?

0

Решение

Для тех, кто получит такую ​​же проблему.
Мое решение состоит в том, чтобы использовать nusoap (https://github.com/yaim/nusoap-php7). Эта библиотека позволяет делать сложные запросы, в том числе SWA (SOAP с вложениями).
Вот рабочий код для моего вопроса:

$person = array("personId"=>$id, "consentConfirmed"=>$confirmed);
$data = array(
"reportParams"=>new soapval("reportParams", "personCreditReportParams", $person, false, $namespace)
);
$result = $client->call("getCreditReportTypes", $data, $namespace);

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

1

Другие решения

Вы должны окончательно использовать WSDL для генератора php, таких как PackageGenerator.

Это облегчит вам построение запроса, обработку ответа.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector