9
respostas

WebService Soap xml

Ola, Criei um WebService utilizando a classe nusoap e não consigo retornar um array de dados, ate agora consegui comente uma linha. Utilizei o php como linguagem. Alguem teria algo para me indicar ? Obrigado.

9 respostas

Oi Paulo, tudo bom?

Acho que não entendi muito bem.

Você esta utilizando o nusoap para consumir o que exatamente? Está utilizando algum framework ou PHP puro?

Aguardo retorno =)

Abraço!

André, Primeiramente obrigado por reagir com interesse em me ajudar. Bom vamos lá: Baixei o nusoap e instanciei. Criei meu servidor e cliente, quando chamo minha função no cliente ele retorna somente um registro. Não estou utilizando nenhum framework. Veja o exemplo do meu servidor:

Exemplo servidor:

$server->wsdl->addComplexType('complexUsuario',
    'complexType',
    'struct',
    'all',
    '',
    array(
        'codigo'=>array('codigo'=>'codigo','type'=>'xsd:INTEGER'),
        'usuario'=>array('usuario'=>'usuario','type'=>'xsd:STRING'),
        'senha'=>array('senha'=>'senha','type'=>'xsd:INTEGER'))
);

$server->register('getUsuario',
    array('codigo' => 'xsd:INTEGER',
        'usuario' => 'xsd:STRING',
        'senha' => 'xsd:INTEGER'),
    array('return' => 'tns:complexUsuario'),
    'urn:server.getUsuario',
    'urn:server.getUsuario#getUsuario',
    'rpc',
    'encoded',
    'Listagem de usuario;'
);

function getUsuario() {
    $con = conexao();

    $usuarios = array();
    $query = "select codigo, usuario, senha, ativo from usuario";
    $res = mysqli_query($con, $query);
//    while ($usuario = mysqli_fetch_assoc($res)) {
//        array_push($usuarios, $usuario);
//    }
//    return $usuarios;
    return mysqli_fetch_array($res);
}

Exemplo cliente:

<?php
require_once('./lib/nusoap.php');
$wsdl = 'http://localhost/projetos/WebService2/service.php?wsdl';

$client = new nusoap_client($wsdl, true);

$err = $client->getError();

if ($err){
    echo "Erro no construtor<pre>".$err."</pre>";
}

$result = $client->call("getUsuario");

if ($client->fault){
    echo "Falha<pre>".print_r($result)."</pre>";
}else{
    $err = $client->getError();
    if ($err){
        echo "Erro<pre>".$err."</pre>";
    } else{
            print_r($result);
    }
}


?>

Acredito que o codigo que varre os dados está comentado:

    while ($usuario = mysqli_fetch_assoc($res)) {
        array_push($usuarios, $usuario);
    }
    return $usuarios;

Você também pode tentar utilizar a função fetch_all para retornar direto todos os dados da sua consulta no banco:

    return mysqli_fetch_all($res);

Esses metodos não funcionam. Teria que ver outra forma.

Que problema ocorre com o mysqli_fetch_all ?

Somente não retorna o array, não apresenta nenhum erro. A tela fica em branco.

Olá.

Teste outra forma, por favor. Remova o seu return e descomente as linhas comentadas. Mude seu while para esse:

while ($usuario = mysqli_fetch_array($res, MYSQLI_ASSOC)) {
    array_push($usuarios, $usuario);
}

Poste aqui o resultado :)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software