Я пытаюсь вернуть значения в том виде, в каком они отправляются на мой сервер мыла, чтобы они имели одинаковую структуру XML.
Вот пример запроса для нескольких политик с различными атрибутами.
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdl = "https://customer-soap.example.com/?WSDL">
<soapenv:Header/>
<soapenv:Body>
<wsdl:SendPoliciesRequestInput>
<sesid>someid</sesid>
<!--Optional:-->
<policy product = "product1" company = "ges1" polizzenNr = "pol1" premium = "1" expiry = "01.01.2000" info = "blabla1"/>
<policy product = "product2" company = "ges2" polizzenNr = "pol2" premium = "2" expiry = "02.01.2000" info = "blabla2"/>
</wsdl:SendPoliciesRequestInput>
</soapenv:Body>
</soapenv:Envelope>
В моем php-коде это переводится в объект, содержащий sesid и массив элементов policy, например: (print_r($request))
stdClass Object
(
[sesid] => someid
[policy] => Array
(
[0] => stdClass Object
(
[product] => product1
[company] => ges1
[Nr] => pol1
[premium] => 1
[expiry] => 01.01.2000
[info] => blabla1
)
[1] => stdClass Object
(
[product] => product2
[company] => ges2
[Nr] => pol2
[premium] => 2
[expiry] => 02.01.2000
[info] => blabla2
)
При попытке вернуть именно этот объект вызывающей стороне следующий код
<php
class Example
{
public function SendPolicies($request)
{
return $request;
}
}
такие выходы:
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdl = "https://customer-soap.example.com/?WSDL">
<soapenv:Header/>
<soapenv:Body>
<wsdl:SendPoliciesRequestOutput>
<sesid>someid</sesid>
<!--Optional:-->
<policy />
</wsdl:SendPoliciesRequestOutput>
</soapenv:Body>
</soapenv:Envelope>
Я пробовал несколько подходов, включая создание SoapVar, но это только реструктурировало бы объекты, а не создавало вывод, точно такой же, как ввод.
Мы очень ценим любую помощь.






В итоге я использовал решение горожане: https://stackoverflow.com/a/24894102/8247069
So not ideal. Another way to do it would be to write the XML yourself:
$soap->param = new SoapVar("<param attrName='attributeName'>value</param>", XSD_ANYXML);I don't like either way, but when you've got a deadline, you go with what works.
Проблема, похоже, в том, что мой код находится на стороне сервера, поэтому (насколько мне удалось выяснить во время моего исследования) я не могу переключиться в режим WSDL, хотя мой сервер запущен с использованием WSDL.