PHP SoapClient具有相同名称的多个参数?

时间:2014-07-21 18:25:21

标签: php arrays xml soap wsdl

我试图在PHP中进行SOAP调用,它正常工作,但我有一个疑问:我如何根据一系列产品将参数传递给XML创建新节点&#39数量?看到这个......

这是我在SoapUI中的XML(包含重要的部分:ITEMSITM> TITEMSITM。第一个TITEMSITM是字段,其他是同一个东西):

   <soapenv:Header/>
   <soapenv:Body>
      <ns:MANUTENCAOSITM>
         <ns:SITM>
            <ns:CABECALHOSITM>
               ...
            </ns:CABECALHOSITM>
            <ns:ITEMSITM>
               <!--Zero or more repetitions:-->
               <ns:TITEMSITM>
                  <ns:CODIGOPRODUTO>0000265</ns:CODIGOPRODUTO>
                  <ns:DESCRICAOPRODUTO>REQ.CAT.0,410 POLI (PL10)</ns:DESCRICAOPRODUTO>
                  <ns:PERCENTUALDESCONTO>-1.03</ns:PERCENTUALDESCONTO>
                  <ns:PESOUNITARIO>0.41</ns:PESOUNITARIO>
                  <ns:PRECOBONIFICADO>10</ns:PRECOBONIFICADO>
                  <ns:PRECOTABELA>9.700</ns:PRECOTABELA>
                  <ns:PRECOUNITARIO>9.6</ns:PRECOUNITARIO>
                  <ns:QUANTIDADEBONIFICADA>20</ns:QUANTIDADEBONIFICADA>
                  <ns:QUANTIDADEVENDA>200</ns:QUANTIDADEVENDA>
                  <ns:SALDOBONIFICADO>0</ns:SALDOBONIFICADO>
                  <ns:TOTALBRUTO>1940.000</ns:TOTALBRUTO>
                  <ns:TOTALLIQUIDO>1920.000</ns:TOTALLIQUIDO>
                  <ns:TOTALPESO>82.000</ns:TOTALPESO>
                  <ns:VALORBONIFICADO>9.700</ns:VALORBONIFICADO>
                  <ns:VALORLIQUIDO>8.9550</ns:VALORLIQUIDO>
               </ns:TITEMSITM>
               <ns:TITEMSITM>
                  ...
               </ns:TITEMSITM>
               <ns:TITEMSITM>
                  ...
               </ns:TITEMSITM>
            </ns:ITEMSITM>
            <ns:RODAPESITM>
               <ns:CRESCIMENTOANTERIOR>?</ns:CRESCIMENTOANTERIOR>
               <ns:TOTALINVESTIMENTO>0.1303</ns:TOTALINVESTIMENTO>
            </ns:RODAPESITM>
         </ns:SITM>
         <ns:TIPOOPERACAO>3</ns:TIPOOPERACAO>
      </ns:MANUTENCAOSITM>
   </soapenv:Body>

我需要为PHP中的每个产品重复此节点(TITEMSITM),但它不起作用,它只存储最后一项,就像我尝试做的下面的代码一样,但没有成功。

$arguments = array(
    'SITM' => array(
        'CABECALHOSITM' => $pars1,
        'ITEMSITM' => array(
            'TITEMSITM' => $parsItem[0],
            'TITEMSITM' => $parsItem[1],
            'TITEMSITM' => $parsItem[2]
            // ...
        ),
        'RODAPESITM' => $pars2
    ),
    'TIPOOPERACAO' => $pars3
);

$inserirItens = $cliente->MANUTENCAOSITM($arguments);

上面的代码调用没有问题,但是当我 print_r var_dump $ arguments时,我看到重复的TITEMSITM只发送一个产品。我认为这很简单,但我没有得到。请有人帮帮我吗?

参考文献:

2 个答案:

答案 0 :(得分:2)

以下是我使用的代码样式:

$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);

答案 1 :(得分:1)

$ITEMSITM = new stdClass();    
foreach ($parsItem as $item) {
    $ITEMSITM->TITEMSITM[] = $item;
}

这应该起作用的原因是因为它将密切模拟WSDL的数据结构。