Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ricardogomes123

webservice soap com PHP

Recommended Posts

Olá, pessoal, estou com uma dúvida:

Já usei webservice Json Curl com PHP e no consumo me retornava um array onde eu conseguia trabalhar com as informações, agora aprendendo SOAP o retorno não é satisfatorio como no JSON, o maximo que consigo é um retorno xml em uma única linha, alguém tem alguma dica ? Segue meu script:

 

 

$client = new SoapClient("https://url?wsdl",
              array('cache_wsdl' => WSDL_CACHE_NONE,'trace' => true,"encoding" => "utf-8","features" => SOAP_SINGLE_ELEMENT_ARRAYS,"exceptions" => true));
       $param = array(
                       'versao'      => '3.0',
                       'cod_input'   => 'C',
                       'cartao'      => 'xxxxxxxxxxx', 
                       'proxy'       => 'x',
                       'usr'         => 'xxxxxx',
                       'pwd'         => 'jS1_Njg2b8b0WMbU' );


        //nome do método
       $resultado = $client->consulta_disponivel($param);
       echo "<pre>\n";
       print_r ($resultado);
       echo "</pre>\n";   
     //Aqui obtenho o retorno:


    stdClass Object               (
               [return] => LUIZ ALBERTO43326200004787200000000
               )
        //Usando: 
        $result1 = ( $client->__getLastResponse());
         var_dump($result1 );
        //Obtenho:
               array(1) {
                   [0]=>
                   string(701) "<G_ServApp_Response><consulta_disponivel><nome>LUIZ ALBERTO</nome>                                      <cartao>4332620000478720</cartao><proxy>0</proxy><limite_credito>0</limite_credito><disponivel_saques>0</disponivel_saques><disponivel_compras>0</disponivel_compras><saldo_atual>0</saldo_atual></consulta_disponivel><codigo_retorno>00</codigo_retorno></G_ServApp_Response>"
                  }
Como consigo "capturar" apenas os dados como no JSON:
       Array->nome;
       Array->cartao;

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema de retorno deve estar na especificação do tipo de dado no WSDL.

 

Lembrando que WSDL é um arquivo para descrição, a linguagem PHP tenta interpretar o tipo descrito, mas as vezes o resultado pode não ser igual ao esperado, apenas aproximado.

 

__getLastResponse é apenar para verificar o XML retornado, não para recuperar os dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia pessoal, já tentei com simplexml_load_file, mas sem exito, pesquisando na net vi muita coisa sobre o SOAP dizendo que é um projeto abandonado e sem atualizações diferente do JSON, continuarei pesquisando.


Olá,

Dá uma olhada neste artigo, pode ser que te ajude.

http://stackoverflow.com/questions/8830599/php-convert-xml-to-json

Abraços.

Como eu disse anteriormente no Json é possivel usar estes métodos já no SOAP não funciona.Ou não consegui executar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

As informações que você encontrou não correspondem a realidade.

 

O SOAP possui como ponto forte a descrição dos métodos (WSDL) e a infinidade de métodos que podem ser criados dentro de uma única URL. Seu ponto fraco é a quantidade de dados transmitida por mensagem, pois um XML ocupa mais bytes que um JSON contendo a mesma informação.

 

Já o REST, que seria o correspondente JSON do XML, possui exatamente as características contrárias, é extremamente leve, mas possui a limitação de métodos HTML sobre cada URL (GET, POST, PUT, DELETE, etc). Tanto falando em quantidade de métodos como retorno de dados. Em contrapartida, é o tipo de webservice recomendado para aplicações que prezam pela pouca transmissão de dados (ex.: aplicativos mobile).

 

O SOAP é mais difundido na comunidade PHP, mas não quer dizer que um é melhor que outro.

 

[...]já tentei com simplexml_load_file, mas sem exito[...]

Como já mencionado, você não deve tratar o retorno de __getLastResponse(). Ele é apenas disponibilizado para verificar o que está sendo retornado no protocolo SOAP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto significa que há um erro no response do webservice? Pois estou achando isso!


As informações que você encontrou não correspondem a realidade.

O SOAP possui como ponto forte a descrição dos métodos (WSDL) e a infinidade de métodos que podem ser criados dentro de uma única URL. Seu ponto fraco é a quantidade de dados transmitida por mensagem, pois um XML ocupa mais bytes que um JSON contendo a mesma informação.

Já o REST, que seria o correspondente JSON do XML, possui exatamente as características contrárias, é extremamente leve, mas possui a limitação de métodos HTML sobre cada URL (GET, POST, PUT, DELETE, etc). Tanto falando em quantidade de métodos como retorno de dados. Em contrapartida, é o tipo de webservice recomendado para aplicações que prezam pela pouca transmissão de dados (ex.: aplicativos mobile).

O SOAP é mais difundido na comunidade PHP, mas não quer dizer que um é melhor que outro.

Como já mencionado, você não deve tratar o retorno de __getLastResponse(). Ele é apenas disponibilizado para verificar o que está sendo retornado no protocolo SOAP.

Isto significa que há um erro no response do webservice? Pois estou achando isso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente, informe o WSDL e nos diga qual é o resultado que você espera do método.

Compartilhar este post


Link para o post
Compartilhar em outros sites
array('cache_wsdl' => WSDL_CACHE_NONE,'trace' => true,"encoding" => "utf-8","features" => SOAP_SINGLE_ELEMENT_ARRAYS,'exceptions' => true, 'style' => SOAP_DOCUMENT,'soap_version' => SOAP_1_1,'use'=> SOAP_LITERAL));
$param = array(
'versao' => '3.0',
'cod_input' => 'C',
'cartao' => '4332620000478720',
'proxy' => '0',
'usr' => 'CIA_GROUP',
'pwd' => 'jS1_Njg2b8b0WMbU'
);
//nome do método
$resultado = $client->consulta_disponivel($param);
echo "<pre>\n";
print_r ($resultado);
echo "</pre>\n";

 

array('cache_wsdl' => WSDL_CACHE_NONE,'trace' => true,"encoding" => "utf-8","features" => SOAP_SINGLE_ELEMENT_ARRAYS,'exceptions' => true, 'style' => SOAP_DOCUMENT,'soap_version' => SOAP_1_1,'use'=> SOAP_LITERAL));
$param = array(
'versao' => '3.0',
'cod_input' => 'C',
'cartao' => '4332620000478720',
'proxy' => '0',
'usr' => 'CIA_GROUP',
'pwd' => 'jS1_Njg2b8b0WMbU'
);
//nome do método
$resultado = $client->consulta_disponivel($param);
echo "<pre>\n";
print_r ($resultado);
echo "</pre>\n";

 

TENHO QUE RECEBER O NOME E NUMERO DO CARTÃO


Provavelmente, informe o WSDL e nos diga qual é o resultado que você espera do método.

https://sistemas.homol.fastsolutions.com.br/BIC/WSGServService?wsdl

 

Metodo:

consulta_disponivel

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal achei uma solução, vejam:

$client = new SoapClient("https://sistemas.hom...vService?wsdl",
array('cache_wsdl' => WSDL_CACHE_NONE,'trace' => true,"encoding" => "utf-8","features" => SOAP_SINGLE_ELEMENT_ARRAYS,'exceptions' => true, 'style' => SOAP_DOCUMENT,'soap_version' => SOAP_1_1,'use'=> SOAP_LITERAL));
$param = array(
'versao' => '3.0',
'cod_input' => 'C',
'cartao' => '4332620000478720',
'proxy' => '0',
'usr' => 'CIA_GROUP',
'pwd' => 'jS1_Njg2b8b0WMbU'
);
//nome do método
$resultado = $client->consulta_disponivel($param);
echo "<pre>\n";
print_r ($resultado);
echo "</pre>\n";
//Peguei:
echo "<pre>\n";
$result1 = ( $client->__getLastResponse()); //Isso irá mostrar a resposta da sua última solicitação
var_dump ($result1);
$array = array ($result1);
var_dump ($array);
echo "</pre>\n";
//RECEBO ISTO: /Obtenho:

array(1) {
[0]=>
string(701) "<G_ServApp_Response><consulta_disponivel><nome>LUIZ ALBERTO</nome> <cartao>4332620000478720</cartao><proxy>0</proxy><limite_credito>0</limite_credito><disponivel_saques>0</disponivel_saques><disponivel_compras>0</disponivel_compras><saldo_atual>0</saldo_atual></consulta_disponivel><codigo_retorno>00</codigo_retorno></G_ServApp_Response>"
}

//AI FAÇO UM EXPLODE:

$nome_arquivo = $result1;

$arquivo = explode('nome', $nome_arquivo);
print ("Portador" . $arquivo[1].'<br>');
$arquivo = explode('cartao', $nome_arquivo);
print ("Cartão" . $arquivo[1].'<br>');
$arquivo = explode('proxy', $nome_arquivo);
print ("Proxy" . $arquivo[1].'<br>');
$arquivo = explode('limite_credito', $nome_arquivo);
print ("Limite" . $arquivo[1].'<br>');
$arquivo = explode('disponivel_saques', $nome_arquivo);
print ("disponivel_saques" . $arquivo[1].'<br>');
$arquivo = explode('disponivel_compras', $nome_arquivo);
print ("disponivel_compras" . $arquivo[1].'<br>');
$arquivo = explode('saldo_atual', $nome_arquivo);
print ("saldo_atual" . $arquivo[1].'<br>');
$arquivo = explode('codigo_retorno', $nome_arquivo);
print ("codigo_retorno" . $arquivo[1].'<br>');

Obtive as respostas:

Portador>LUIZ ALBERTO</

Cartão>4332620000478720</

Proxy>0</

Limite>0</

disponivel_saques>0</

disponivel_compras>0</

saldo_atual>0</

codigo_retorno>00</

Só não senti firmeza em usar o __getLastResponse, percebo que é meio gato e verifiquei que o wsdl não tem separador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é possível acessar o WSDL.

Network Access Message: The page cannot be displayed

Explanation: There is a problem with the page you are trying to reach and it cannot be displayed.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lembrando que isto é o retorno na minha tela:(está na variavel $result1)

array(1) {
[0]=>
string(701) "<G_ServApp_Response><consulta_disponivel><nome>LUIZ ALBERTO</nome> <cartao>4332620000478720</cartao><proxy>0</proxy><limite_credito>0</limite_credito><disponivel_saques>0</disponivel_saques><disponivel_compras>0</disponivel_compras><saldo_atual>0</saldo_atual></consulta_disponivel><codigo_retorno>00</codigo_retorno></G_ServApp_Response>"
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse é o retorno do __getLastResponse() e não o WSDL e tão pouco o retorno esperado do método.

Compartilhar este post


Link para o post
Compartilhar em outros sites

WSDL não é o retorno do método, é o arquivo de definição que você informou ser este link:

https://sistemas.homol.fastsolutions.com.br/BIC/WSGServService?wsdl

 

Entretanto, não consigo acessar o link, conforme informei no post #10.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.