2014-12-18 2 views
4

Я знаю, что этот тип вопроса задавался несколько раз. Я потратил несколько часов на чтение и тестирование предлагаемых решений, но никто не работает для моей ситуации.Несколько элементов с тем же именем в PHP SOAP Call

Мне нужно отправить запрос SOAP к API, который может содержать элемент, который повторяется примерно так:

<operationNumbers> 
    <operationNumber>1234</operationNumber> 
    <operationNumber>1235</operationNumber> 
    <operationNumber>1236</operationNumber> 
    <operationNumber>1237</operationNumber> 
</operationNumbers> 

я прочитал, что, возможно, я мог бы сделать это:

$buildRequest = Array(
     'myheader' => Array(
     'date' => MY_DATE, 
     'id' => Array(
      'client' => CLIENT, 
      'clientRef' => MYREF 
     ) 
    ), 
     'operationNumbers' => Array (
      Array('operationNumber' => '1234'), 
      Array('operationNumber' => '1235') 
    ) 
    ); 

    $request = $client->__soapCall('getMultiOpDets', array($buildRequest)); 

К сожалению, это не работает и приводит к «неверному запросу», если я отправляю один номер операции, например:

... 
    'operationNumbers' => Array (
     'operationNumber' => '1234' 
    ) 
... 

Re: квест успешно. Я пробовал soapVars/soapParams, но не могу заставить его работать с использованием этого подхода. Любые подсказки/советы/помощь приветствуются.

+0

Вы пытались преобразовать $ buildRequest к объекту? '$ request = $ client -> __ soapCall ('getMultiOpDets', array ((object) $ buildRequest));' – DanielO

ответ

5

Итак, я решил.

$operationNumbersArray = array('1234','1235'); 

... 

     'operationNumbers' => array(
      'operationNumber' => $operationNumbersArray 
     ) 

Во время моего тестирования и возиться, я случайно удалил другое значение, которое было обязательным. API не дал предупреждения о его упущении (к сожалению).

-1

Для повторяющихся структурных элементов, увидеть этот пост: PHP SOAP Repeated Element Name

+0

URL может умереть. Опубликуйте его как ссылку, но всегда описывайте фактическое решение. – cprn

3

Вот код, я использую:

$wsdl = 'https://your.api/path?wsdl'; 
$client = new SoapClient($wsdl); 
$multipleSearchValues = [1, 2, 3, 4]; 
$queryData = ['yourFieldName' => $multipleSearchValues]; 
$results = $client->YourApiMethod($queryData); 
print_r($results); 
Смежные вопросы