Передача xml через soap

kimisa

Новичок
Пытаюсь создать нужный xml файл для отправки запроса. Основное все в норме, но есть пара ньюансов, которые ни как не соображу как добавить.
Привожу проблемный клочок xml файла
Код:
<PaymentId>long</PaymentId>
<Params>
        <ScalarParam FieldId="string">
          <Value xmlns="Payment.WebService">string</Value>
        </ScalarParam>
 </Params>
Эту структуру я получаю https://img.w1.ru/4so19r
Но вот проблема идет с атрибутами.
Массив я создаю такой:
PHP:
Array
(
    [PaymentId] => 26
    [Params] => Array
        (
            [ScalarParam] => Array
                (
                    [Value] => *****
                )

        )

)
И затем уже
PHP:
$client = new  \SoapClient($this->apiurl, array('trace'   => 1, 'use' => SOAP_LITERAL));  
$header = new \SOAPHeader('*', '*', $headerbody);       
$client->__setSoapHeaders($header);
$objResponse = call_user_func_array([$client, $method], [$body]);
(вывод $body идет выше)
Реально ли задать атрибуты для такого построения отправки? Т.е. без постройки всего xml файла в ручную?
 

MiksIr

miksir@home:~$
В этом посте я вообще вопроса не вижу. Да, при SOAP запросе через SoapClient передается массив, это можно увидеть в любом примере.
Хотите пример запроса - дайте ссылку на wsdl или приведите его содержимое и скажите, какой метод вызываете.
Учитесь формулировать вопросы максимально полно, пока не хватает квалификации детектировать проблему и задать конкретный вопрос.
 

kimisa

Новичок
Я привела часть этого xml файла.
Код:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header><!—В примерах значение заголовка опущено--></soap:Header> 
<soap:Body>
    <Payment xmlns="***.WebService">
      <UserId>long</UserId>
      <PaymentId>long</PaymentId>
      <Params>
        <ScalarParam FieldId="string">
          <Value xmlns="*****.WebService">string</Value>
        </ScalarParam>
      </Params>
    </Payment>
  </soap:Body>
</soap:Envelope>
Часть полей я убрала. Они простые и к ним нет претензий.
 

MiksIr

miksir@home:~$
Попробуйте просто ["ScalarParam"]["FieldId"]
Даже если результатирующий xml будет выглядеть иначе - другая сторона может его скушать.
А лучше покажите wsdl (то, что выдается по адресу $this->apiurl)
 

kimisa

Новичок
Да, уже дошло как делать. Просто не до конца понимала как это делается. А тут получается просто правильно в массиве подай и он как надо тебе сделает.
 

MiksIr

miksir@home:~$
Для этого wsdl и нужен - там описана структура xml-я, который должен получится. На его основе SoapClient и создает из массива готовый XML. Читая WSDL всегда можно понять и проверить какие параметры с какими названиями передать, т.е. фактически это мини-документация по API.
 
Сверху