how to send an array list to a web service

0

Hello, I want to know how I can send an array list to a web service via php, this is my web service.

<?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>
<Seguranca xmlns="http://satussistemas.org/">
  <Usuario>string</Usuario>
  <Senha>string</Senha>
</Seguranca>
</soap:Header>
<soap:Body>
<GravaPedidoVendaExterna xmlns="http://satussistemas.org/">
  <pedido>
    <codigo>int</codigo>
    <codEmpresa>string</codEmpresa>
    <codUsuario>string</codUsuario>
    <codEntidade>int</codEntidade>
    <dtMvto>string</dtMvto>
    <data>dateTime</data>
    <dtBase>string</dtBase>
    <codVendedor>string</codVendedor>
    <valorTotal>double</valorTotal>
    <fpgto>string</fpgto>
    <numComanda>string</numComanda>
    <numMesa>string</numMesa>
    <qtdeProdutos>double</qtdeProdutos>
    <percComissao>double</percComissao>
    <comissao>double</comissao>
    <statusPedido>string</statusPedido>
    <observacao>string</observacao>
  </pedido>
  <produtos>
    <PedidosVd>
      <codigo>int</codigo>
      <codEmpresa>string</codEmpresa>
      <codProduto>string</codProduto>
      <codEntidade>string</codEntidade>
      <codBarras>string</codBarras>
      <entidade>string</entidade>
      <sequencia>int</sequencia>
      <quantidade>double</quantidade>
      <valor>double</valor>
      <numComanda>string</numComanda>
      <numMesa>string</numMesa>
      <observacao>string</observacao>
      <status>string</status>
      <hexColor>string</hexColor>
      <statusPedido>string</statusPedido>
      <descricao>string</descricao>
      <setor>string</setor>
      <percComissao>double</percComissao>
      <valorComissao>double</valorComissao>
      <percDesconto>double</percDesconto>
      <valorDesconto>double</valorDesconto>
      <fpgto>string</fpgto>
    </PedidosVd>
    <PedidosVd>
      <codigo>int</codigo>
      <codEmpresa>string</codEmpresa>
      <codProduto>string</codProduto>
      <codEntidade>string</codEntidade>
      <codBarras>string</codBarras>
      <entidade>string</entidade>
      <sequencia>int</sequencia>
      <quantidade>double</quantidade>
      <valor>double</valor>
      <numComanda>string</numComanda>
      <numMesa>string</numMesa>
      <observacao>string</observacao>
      <status>string</status>
      <hexColor>string</hexColor>
      <statusPedido>string</statusPedido>
      <descricao>string</descricao>
      <setor>string</setor>
      <percComissao>double</percComissao>
      <valorComissao>double</valorComissao>
      <percDesconto>double</percDesconto>
      <valorDesconto>double</valorDesconto>
      <fpgto>string</fpgto>
    </PedidosVd>
  </produtos>
</GravaPedidoVendaExterna>
</soap:Body>
</soap:Envelope>

This is my code.

    <?php
date_default_timezone_set('America/Sao_Paulo');

include("conexao.php");

$pedido;
//$login = $_GET['login'];
$login = 1;
$stays = array();

$sqlPedido = "SELECT p.*,count(i.iten_id) as qtd FROM pedido p
INNER JOIN iten_pedido i ON i.iten_ped = ped_id
INNER JOIN produto pr ON pr.pro_id = i.iten_prod
INNER JOIN login l ON l.log_id = p.ped_log
WHERE p.ped_log like '$login'  group by ped_id order by ped_id desc limit 1";

$resultadoPedido = mysqli_query($conexao,$sqlPedido) or die ("Erro " . mysqli_error($conexao));
if($linhaPedido = mysqli_fetch_object($resultadoPedido)){

$codigoPedido = $linhaPedido->ped_id;
$pedido = array(              'codigo'   => '0',
                              'codEmpresa'   => '001',
                              'codUsuario'   => '700',
                              'codEntidade'   => '39727',
                              'dtMvto'   => $linhaPedido->ped_data,
                              'data'   => $linhaPedido->ped_data,
                              'dtBase'   => $linhaPedido->ped_data." ".$linhaPedido->ped_hora,
                              'codVendedor'   => '700',
                              'valorTotal'   => $linhaPedido->ped_valor,
                              'fpgto'   => '001',
                              'numComanda'   => '0',
                              'numMesa'   => '0',
                              'qtdeProdutos'   => $linhaPedido->qtd,
                              'percComissao'   => '0',
                              'comissao'   => '0',
                              'statusPedido'   => 'P');


$sqlProduto = "SELECT i.*,count(i.iten_id) as qtd, Sum(i.iten_valor) as total,v.val_codigo,v.val_barra,v.val_desc FROM iten_pedido i
INNER JOIN pedido p ON p.ped_id = i.iten_ped
INNER JOIN valor v ON v.val_id_pro = i.iten_prod
WHERE p.ped_id like '$codigoPedido' and v.val_id_super like '4' GROUP BY iten_prod";
//$i = 0;
$resultadoProduto = mysqli_query($conexao,$sqlProduto) or die ("Erro " . mysqli_error($conexao));
while($linhaProduto = mysqli_fetch_object($resultadoProduto)){
//$i++;

$stays[] = array('PedidosVd'=>array('codigo'   => '0',
                              'codEmpresa'   => '001',
                              'codProduto'   => $linhaProduto->val_codigo,
                              'codEntidade'   => $linhaProduto->val_codigo,
                              'codBarras'   => $linhaProduto->val_barra,
                              'entidade'   => '',
                              'sequencia'   => '0',
                              'quantidade'   => $linhaProduto->qtd,
                              'valor'   => $linhaProduto->total,
                              'numComanda'   => '0',
                              'numMesa'   => '0',
                              'observacao'   => '',
                              'status'   => '',
                              'hexColor'   => '',
                              'statusPedido'   => '',
                              'descricao'   => $linhaProduto->val_desc,
                              'setor'   => '0',
                              'percComissao'   => '0',
                              'valorComissao'   => '0',
                              'percDesconto'   => '0',
                              'valorDesconto'   => '0',
                              'fpgto'   => ''));
}
}

$client = new SoapClient('wsdl');


$function = 'GravaPedidoVendaExterna';

$arguments= array('GravaPedidoVendaExterna' => array('pedido'=>$pedido,
'produtos' =>$stays));
print_r($arguments);

$options = array('location' => 'wsdl');
try{
$result = $client->__soapCall($function, $arguments, $options);

print_r($result);

}
catch (SoapFault $exception) {
echo $exception;      
}
?>
    
asked by anonymous 31.07.2017 / 19:58

1 answer

0

I'll give you a small example:

<?php

$test_array = array (
  '_foo' => 'bar',
  'foo' => 'bar',
  'outro_array' => array (
    'pt' => 'stackoverflow',
  ),
);
$xml = new SimpleXMLElement('<root/>'); // adiciona a raiz do xml
//percorrer o array
array_walk_recursive($test_array, array ($xml, 'addChild'));
print $xml->asXML();

the result will look something like this

<?xml version="1.0"?>
<root>
  <bar>_foo</bar>
  <bar>foo</bar>
  <overflow>pt</overflow>
</root>

For multi-dimensional arrays you can do the following:

// create simpleXML object
$xml = new SimpleXMLElement("<root/>");
$node = $xml->addChild('request');

// chamar função para converter o array
array_to_xml($param, $node);

// imprimir xml na tela
echo $xml->asXML();

// função para converter array para xml
function array_to_xml($array, &$xml) {
    foreach($array as $key => $value) {
        if(is_array($value)) {
            if(!is_numeric($key)){
                $subnode = $xml->addChild("$key");
                array_to_xml($value, $subnode);
            } else {
                array_to_xml($value, $xml);
            }
        } else {
            $xml->addChild("$key","$value");
        }
    }
}
    
31.07.2017 / 20:20