Многомерный массив с клиентом PHP Soap - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь создать SOAP Клиент, но мне нужно отправить многомерный массив (я думаю), как требуется в документации, пример ниже:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.senior.com.br">
  <soapenv:Body>
    <ser:ColaboradoresAdmitidos>
      <user>String</user>
      <password>String</password>
      <encryption>Integer</encryption>
      <parameters>
        <NumEmp>Integer</NumEmp>
        <AbrTipCol>String</AbrTipCol>
        <IniPer>DateTime</IniPer>
        <FimPer>DateTime</FimPer>
      </parameters>
    </ser:ColaboradoresAdmitidos>
  </soapenv:Body>
</soapenv:Envelope>

Я создаю массив выглядит так:

$arguments = [
    'user' => 'xxxxx',
    'password' => 'xxxxxxxxxx',
    'encryption' => 0,
    'parameters' => array(
        'NumEmp' => 1, 
        'AbrTipCol' => '1', 
        'IniPer' => '01/01/2019', 
        'FimPer' => null
    ),
];

$client = new SoapClient($url, array('trace' => 1));
dd($arguments, $client->__soapCall("colaboradoresAdmitidos", $arguments), $client->__getLastRequest());

Однако в запросе кажется, что он не принимает массив, на самом деле я провел несколько тестов, и в дополнение к первым 3 параметрам, но ни один из них не входит в сгенерированный XML.

Я уже сделал массив по-разному и изменил значение параметра, но он всегда возвращает, как показано ниже:

<?xml version="1.0" encoding="UTF-8"?>\n
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://services.senior.com.br">
    <SOAP-ENV:Body> 
        <ns1:ColaboradoresAdmitidos>
            <user>xxxxxxx</user>
            <password>xxxxxxxxx</password>
            <encryption>0</encryption>
            <parameters/>
        </ns1:ColaboradoresAdmitidos>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Кто-то может мне помочь, потому что сервер понимает, что параметр отсутствует, поэтому я не могу выполнить запрос.

1 Ответ

0 голосов
/ 28 февраля 2020

В поисках inte rnet я обнаружил множество людей с этой проблемой, которые не смогли ее решить. Я обнаружил ошибку. Это происходит, когда параметры не соответствуют зарегистрированным в WSDL. в моем случае: в документации упоминаются параметры с заглавной буквой, однако мне пришлось использовать их с маленькой буквой.

Кажется, что ключ параметра должен быть того же значения, что и зарегистрированный в wsdl , например:

$arguments = [
'user' => 'xxxxx',
'password' => 'xxxxxxxxxx',
'encryption' => 0,
'parameters' => array(
    'numEmp' => 1, 
    'abrTipCol' => '1', 
    'iniPer' => '01/01/2019', 
    'fimPer' => null
)];
...