Ir para conteúdo

Arquivado

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

lucasbicalleto

Web Service

Recommended Posts

Olá galera, tenho um web service onde eu faço uma consulta.

Ex. 'Nome' -> 'joao'; 

Como faço para inserir um valor recebido de um Form ?

Este método não funfa..

INDEX
------------
<form action="WEBSERVICE.php" method="POST" name="form1">
  NUMERO DO CARTAO <input type="text" name="numero" /> 
  <input type="submit" />
</form>
------------
RECEBE.PHP
------------
 $numero  = $_POST['numero'];
try {

    $dados = array(
        'numerodousuario'        => '$numero'

    );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso depende da descrição do serviço. Poste o WSDL e o nome do método que deseja consumir.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue os arquivos ->

vale-consulta.php

<meta charset="utf8">
<?php
class ValeConsulta {

 #  private static $endpoint = "http://desenv.algorix.com:81/generix/wsInterfaceValeConsulta.asmx?wsdl";
  private static $endpoint = "http://cartao3.algorix.com/ciclum/wsInterfaceValeConsulta.asmx?wsdl";


    protected $soap;

    protected $dom;

    protected $xml;

    protected $resposta;

    public function __construct( $dados = null ){
        $this->soap = new SoapClient( self::$endpoint );

        $this->dom = new DOMDocument();
        $this->dom->preserveWhiteSpace = false;
        $this->dom->formatOutput = true;

        $this->dados = $dados;
    }

    private function xml_consulta() {
        $this->xml = null;

        if ( is_array( $this->dados ) && count( $this->dados ) > 0 ) {
            $pai = $this->dom->createElement( 'valeconsulta' );
            $this->dom->appendChild( $pai );

            foreach( $this->dados as $k => $v ) {
                $filho = $this->dom->createElement( $k, $v );
                $pai->appendChild( $filho );
            }

           $this->xml = $this->dom->saveXML();
            $this->xml = str_replace( '<?xml version=\"1.0\"?>\n', '', $this->xml );
        }

        return $this->xml;
    }

    public function consultar( $dados = null ) {
        $this->resposta = false;

        if ( $dados ) {
            $this->dados = $dados;
        }

        if ( $this->xml_consulta() ) {
            $resposta = $this->soap->ValeConsulta_RecuperarExtrato( array( 'strXMLDados' => $this->xml ) );

            if ( $resposta instanceof StdClass ) {
                $this->dom->loadXML( current( $resposta ) );
                $this->resposta = simplexml_import_dom( $this->dom );                   
            }
        }

        return $this->resposta;
    }

    public function tem_erro() {
        return $this->resposta && isset( $this->resposta->erro );
    }

}
?>

consultar.php

<meta charset="utf8">
<?php
		
		$cartao = $_POST['nucartao'];
		 
require_once 'vale-consulta.php';

try {

    $dados = array(
        'cd_grupo'        => '38',
        'de_login_usu'    => 'vale.consulta',
        'de_senha_usu'    => 'v3r5b6',
        'nu_cartao'       => '$cartao',
        'fl_apenas_saldo' => 'N'
    );

    $vale = new ValeConsulta();
    $resposta = $vale->consultar( $dados );

    if ( $vale->tem_erro() ) {
        echo "Código: " . $resposta->erro->cod . "<br >\n";
        echo "Mensagem: " . $resposta->erro->msg . "<br >\n";
    } else {
        echo "Olá: " . $resposta->nome . "<br >\n";
        echo "Saldo atual: " . $resposta->vl_saldo . "<br >\n";
        echo "Data: " . $resposta->dt_lancto . "<br >\n";
    }

} catch( SoapFault $fault ) {
    echo "Erro: " . $fault->faultcode . " - " . $fault->faultstring;
}
?>

PDF.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É muito importante a leitura do WSDL. Algo que pode facilitar é o SoapUI, pois ele interpreta o WSDL e você pode testar as chamadas através dele.

O trecho abaixo, define o tipo de entrada:

<s:element name="ValeConsulta_RecuperarExtrato">
    <s:complexType>
        <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="strXMLDados" type="s:string" />
        </s:sequence>
    </s:complexType>
</s:element>

Traduzindo por miúdos, é um tipo complexo definindo uma lista que pode ter 1 ou nenhum elemento.

Para listas, é importante realizar algumas ações, as quais você pode ver no tópico abaixo:
http://forum.imasters.com.br/topic/535213-enviar-xml-via-soap/?p=2137411

Basicamente, você deve criar uma lista:

$xmlList = new \ArrayObject();

E, após, adicionar o elemento:

$xmlList->append(new \SoapVar($variable , XSD_STRING , null , null , 'strXMLDados'));

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel Heming

Primeiramente obrigado pela atenção.

eu sou novo em tudo Amigo, este WS um usuário de outro fórum que me disponibilizou. eu estudei ele , porem ainda não consigo fazer o meu.

 

Se não for pedir de mais pode me dar esta luz de , onde adiciono estas linhas e onde coloco a variável que recebe o valor do Input ? :/ desculpe-me a "noobes"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na linha 54 do seu código, existe a chamada ao web service.

$resposta = $this->soap->ValeConsulta_RecuperarExtrato( array( 'strXMLDados' => $this->xml ) );

Array, indica que é uma lista. O que você deve substituir, é a entrada de dados:

array( 'strXMLDados' => $this->xml )

Pelo código que eu te passei. É claro que o código que eu te passei é apenas um exemplo. Mas está 99% de acordo com o que tu necessita.

 

Eu substituí o tipo de SOAP_ENC_OBJECT para XSD_STRING, que é o tipo que você vai usar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

:D Oopa amigo Obrigada , resolveu.

Porem agora ele não exite o Nome da pessoa e saldo e qualquer numero ele valida :/ ? segue o codigo.

<meta charset="utf8">
<?php
class ValeConsulta {

 #  private static $endpoint = "http://desenv.algorix.com:81/generix/wsInterfaceValeConsulta.asmx?wsdl";
  private static $endpoint = "http://cartao3.algorix.com/ciclum/wsInterfaceValeConsulta.asmx?wsdl";


    protected $soap;

    protected $dom;

    protected $xml;

    protected $resposta;

    public function __construct( $dados = null ){
        $this->soap = new SoapClient( self::$endpoint );

        $this->dom = new DOMDocument();
        $this->dom->preserveWhiteSpace = false;
        $this->dom->formatOutput = true;

        $this->dados = $dados;
    }

    private function xml_consulta() {
        $this->xml = null;

        if ( is_array( $this->dados ) && count( $this->dados ) > 0 ) {
            $pai = $this->dom->createElement( 'valeconsulta' );
            $this->dom->appendChild( $pai );

            foreach( $this->dados as $k => $v ) {
                $filho = $this->dom->createElement( $k, $v );
                $pai->appendChild( $filho );
            }

           $this->xml = $this->dom->saveXML();
            $this->xml = str_replace( '<?xml version=\"1.0\"?>\n', '', $this->xml );
        }

        return $this->xml;
    }

    public function consultar( $dados = null ) {
        $this->resposta = false;

        if ( $dados ) {
            $this->dados = $dados;
        }

        if ( $this->xml_consulta() ) {
			$xmlList = new \ArrayObject();
            $xmlList->append(new \SoapVar($variable , XSD_STRING , null , null , 'strXMLDados'));

            if ( $resposta instanceof StdClass ) {
                $this->dom->loadXML( current( $resposta ) );
                $this->resposta = simplexml_import_dom( $this->dom );                   
            }
        }

        return $this->resposta;
    }

    public function tem_erro() {
        return $this->resposta && isset( $this->resposta->erro );
    }

}
?>

Algo errado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, você precisa consultar no web service. A linha 54 não deveria ser removida, apenas substituído o array pela lista que você criou.

 

Outro ponto, $variable é uma variável fictícia que eu dei como exemplo. O que você deve usar é a sua variável, que antes estava na linha 54:

$this->xml

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perdão , não consegui entender :(.

Devo remover

$resposta = $this->soap->ValeConsulta_RecuperarExtrato( array( 'strXMLDados' => $this->xml ) );

por

$xmlList->append(new \SoapVar($resposta , XSD_STRING , null , null , 'strXMLDados'));

:blink: :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Todo o trecho novo do código (abaixo), deve ser adicionado antes da chamada do web service (que é a linha 54). Isso você já fez (só precisa(va) corrigir o nome da variável $varible, que foi apenas de exemplo):

$xmlList = new \ArrayObject();
$xmlList->append(new \SoapVar($variable , XSD_STRING , null , null , 'strXMLDados'));

Já, a variável $xmlList, é uma substituição para o seguinte techo de código:

array( 'strXMLDados' => $this->xml )

Ou seja, a linha 54 ainda deve continuar, mas o trecho acima deve ser substituído apenas pela variável $xmlList.

 

Basicamente, nesse momento, você deve apenas colocar de volta a linha 54 (aonde apagou) e, então, substituir o trecho acima mencionado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok , linha 54 em diante. :

	$xmlList = new \ArrayObject();
			$xmlList->append(new \SoapVar($cartao , XSD_STRING , null , null , 'strXMLDados'));
            $resposta = $this->soap->ValeConsulta_RecuperarExtrato( $xmlList );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse erro não parece ser do web service, ao menos não há parâmetro S.

Já tentou consumir o WS com o SoapUI?

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.