how to send an array list to a web service

Asked

Viewed 670 times

0

Hello I was wondering how can I 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;      
}
?>
  • little information, send as well? via php you can use this : $xml = simplexml_load_string($XMLDATA) or die("Error: Não é possivel criar o objeto xml");

  • sorry I was editing, my code and this.

1 answer

1

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 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");
        }
    }
}
  • but how I would pass a dynamic multidimensional array.

  • edited response

  • Thank you very much for your help, but it didn’t work out so well. I need it to be that way in my code. It works well but just doesn’t get the list of products properly.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.