SOAP не проходит через многомерный массив - PullRequest
1 голос
/ 26 октября 2010

У меня есть многомерный массив, например:

$array = array(
    'a' => 1,
    'b' => 2,
    'c' => array('42'=>'foo', '43'=>'bar'),
    'd' => 4
)

Я пытаюсь передать его в вызов SOAP следующим образом:

$response = $client->SomeFunction($array);

Произведенный XML-запрос игнорирует 'с».Почему?

Ответы [ 2 ]

0 голосов
/ 26 октября 2010

У меня тоже есть эта проблема. Это выдаст мне и ошибку "Сервис недоступен". Я сделал то, что ты сделал, но все равно ошибка.

Это мой запрос:

POST /webservice/User.asmx HTTP / 1.1 Хост: www.sample.com.au Content-Type: text / xml; кодировка = UTF-8 Длина контента: длина SOAPAction: "http://www.sample.com.au/UpdateUserBatch"

<UpdateUserBatch xmlns="http://www.sample.com.au/">
  <auth>
    <Username>string</Username>
    <Password>string</Password>
  </auth>
  <request>
    <CreateIfNotExist>boolean</CreateIfNotExist>
    <UpdateIfExists>boolean</UpdateIfExists>
    <UserProfile>
        <UserID>string</UserID>
        <BusinessID>string</BusinessID>
        <ExternalID>string</ExternalID>
        <Username>string</Username>
        <Password>string</Password>
        <Addresses xsi:nil="true" />
        <Demographics xsi:nil="true" />
        <Roles xsi:nil="true" />
      </UserProfile>
      <UserProfile>
        <UserID>string</UserID>
        <BusinessID>string</BusinessID>
        <ExternalID>string</ExternalID>
        <Username>string</Username>
        <Password>string</Password>
        <Addresses xsi:nil="true" />
        <Demographics xsi:nil="true" />
        <Roles xsi:nil="true" />
      </UserProfile>
    </Users>
  </request>
</UpdateUserBatch>

И это мой способ передачи его параметра:

$param = array('username' => 'username', 'password' => 'password', 'request'=>array('CreateIfNotExist' => TRUE, 'UpdateIfExists' => FALSE), 'Users' => array('UserProfile'=> array('UserID' => 'usr123',
'BusinessID' => 'bus123',
'ExternalID' => 'ext123',
'Username' => 'test',
'Password' => 'testing'
)));
0 голосов
/ 26 октября 2010

Я выяснил причину, но изначально она не была для меня очевидной.

Если массив не совсем соответствует тому, что ожидает сервер, он не будет помещен в XML.

Например, из приведенного выше примера, если бы сервер ожидал a, b и d, но не c, c был бы просто проигнорирован и не отображался бы.в XML.Это то поведение, которое сбивало с толку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...