+3

Criando um Web Service de CEP's

criado por Fabio Augusto de S. Passos em 29/01/2004 11:18am
Antes de tudo é necessário baixar a classe NUSOAP para prover conexão com o protocolo SOAP ou "Simple Object Access Protocol", ela está disponível em "http://dietrich.ganx4.com/nusoap/downloads/nusoap-0.6.4.zip"

Com a Classe NUSOAP, mãos a obra.

Vamos criar a base de dados com os registros de CEP do Brasil.
"http://members.lycos.co.uk/phabiopassos/cep.rar", é só descompactar e restaurar com o mysql.

Escrevendo o Server :

<?
/************************************************************** 
*  Descrição: 
*  SOAP Server (Web Service CEP´s). 
**************************************************************/ 
         
// include nusoap classe 
require('nusoap.php');
    
// instância do Server 
$obServer = new soap_server();
    
$obServer->register('QueryByCep');
    
function QueryByCep($input_cep) {
    if (is_int($input_cep)){
        $host = 'localhost';
    	$db = 'cep';
    	$user = 'root';
    	$passwd = '';
    		
        $obDB = @mysql_connect($host, $user, $passwd); 
        $DBResult = @mysql_db_query($db, 'SELECT tipo,logradouro, logradouro_sem_acento, bairro, localidade, uf FROM cep WHERE cep ="'.$input_cep.'" LIMIT 1'); 
           
        // Checa a conexão com Banco. 
        if (!$DBResult ) { 
            return new soap_fault('Server', '', 'Ocorreu um erro interno do servidor.'); 
        } 
     
        // se não retornar nenhum registro 
        if (!mysql_num_rows($DBResult)) { 
            return new soap_fault('Server', '', "Não foi encontrado nenhum endereço com o CEP: $input_cep"); 
        } 
        mysql_close($obDB); 
           
        // retorna dados 
        return mysql_fetch_array($DBResult, MYSQL_ASSOC);     

    } else{
        return new soap_fault('Client', '', 'Serviço requer somente numeros no parametro de pesquisa. '); 
    }
}
$obServer->service($HTTP_RAW_POST_DATA); 

?>

Escrevendo o Client :

<?php     
/************************************************************** 
*  Description: 
*  SOAP Client (client.php). 
**************************************************************/ 
     
// use form data 
if ((string)$_GET['action'] == 'get_data') { 
    // include nusoap classe 
    require('nusoap.php'); 

    // seta paramento e instacia o client.
    $Param = array($_POST['cep']); 
    $obClient  = new soapclient('http://10.0.0.146/webservice/server_cep.php'); 
     
    // Faz a chamada para o webmetodo(QueryByCep) 
    $Result = $obClient->call('QueryByCep', $Param); 

    // checa se houve erro 
    if (!$obClient->getError()) { 
        // print resultados 
        print '<h1>Dados do CEP: ' .$Param[0]  
            . '</h1>
  • tipo: ' .$Result['tipo'] . '
  • Logradouro: ' .$Result['logradouro'] . '
  • Logradouro sem acento: ' .$Result['logradouro_sem_acento'] . '
  • Bairro: ' .$Result['bairro'] . '
  • Localidade: ' .$Result['localidade'] . '
  • UF: ' .$Result['uf'] . '
'; } // print descricao do erro else { echo '<h1>Error: ' . $obClient->getError() . '</h1>'; } } print '<form name="input" action="'.$_SERVER['PHP_SELF'].'?action=get_data" method="POST"> CEP : <input type="text" name="cep"> <input type="submit" value="Procurar"> </form> '; ?>

Fonte de pesquisa: http://www.phpbuilder.com/columns/kramberger20031226.php3?page=2

Comentários:

Mostrando 1 - 10 de 40 comentários
Para quem não tem a base de dados acima, basta acessar o seguinte script:
http://www.phpbrasil.com/scripts/script.php/id/3337

Ele fará toda essa procura, am AJAX, em uma base da dados interna e os links para download da base de dados também estão nele.

Abraços.
19/12/2006 7:23am (~10 anos atrás)

Gostaria de saber se é possível uma página PHP acessar um servlet remotamente, ou seja, a página PHP e o servlet estão em locais diferentes.

Obrigado
13/06/2006 5:23am (~10 anos atrás)

leo genilhu disse:
Ola Pessoal

Alguem tem a base de cep indicada nesse artigos disponivel
já que o link esta quebrado.

Se tiver por favor me envie.


Grato
13/04/2006 9:59am (~10 anos atrás)

leo genilhu disse:
Ola Alguem tem a base de CEP ?

Poderia me passar ?


Grato
leogenilhu@gmail.com
12/04/2006 6:16am (~10 anos atrás)

Olá, executei o exemplo acima utilizando uma base de CEP's que tenho, porém, obtive o seguinte erro:
Error: no transport found, or selected transport is not yet supported!
Se alguém puder me ajudar eu agradeceria!!!
29/11/2005 11:42am (~11 anos atrás)

Pessoal, tentei fazer download da base do CEP, mas não funcionou...

Usei este link fornecido: www.auriumsoft.com.br/backups/cep_mysql.rar


Valeu
17/10/2005 6:26pm (~11 anos atrás)

Renato Julios disse:
To precisando do cep.rar alguem tem ai, o download não funca
29/09/2005 10:10am (~11 anos atrás)

foi totalmente na sorte que consegui fazer funcionar... Fui mudando e mudando até que " puff " ... funcionou!

eis o codigo final:

require_once('nusoap.php');
$wsdl="http://localhost/testes_webservice/Soma.wsdl";
$client = new soapclient($wsdl, true);
$param=array('Valor1'=>20 , 'Valor2'=>30);
$Response = $client->call('Soma', $param, '', '', false, true);
echo $Response;


Simples não?

Notem que acrecentei apenas o parametro true ao instanciar o objeto e usei 2 parametros em branco, um false e um true no $client->call

agora o que significam esses parametros não me perguntem pois não tenho a menor ideia...

Quando tiver tempo vou pesquisar o que significam....

Obrigado pelo apoio!


[ ]'s

22/02/2005 2:35pm (~11 anos atrás)

Parabens pelo artigo, mas eu tenho uma nova missão para vcs...

É possível acessar um webservice com o servidor feito em Delphi e o cliente em PHP?

Vou especificar melhor...
Minha empresa tem um servidor feito em em Delphi e nossos sites feitos em ASP acessam facilmente esse webservice com apenas poucas linhas:

Set soapclient = Server.CreateObject("MSSOAP.SoapClient30")

Call soapclient.mssoapinit(Server.MapPath("Nome.wsdl"),"ReservaService","ReservaPort")

Com isso as paginas ASP conseguem utilizar funções que estão nesse servidor.exe (feito em delphi) bastando para isso ter o SOAP tool Kit 3.0, e o servidor.exe instalado na maquina.

Como gosto mais do PHP que do ASP, estou numa luta para tentar demonstrar que é possível fazer a mesma coisa com o PHP, mas esta dificil...

O que eu fiz até agora foi baixar o NuSoap e ja consegui rodar os exemplos que encontrei por aí...
No entanto todos usam servidores e funções feitas no propio PHP.

E se eu quiser usar as funções feitas no Delphi????
Criei uma função Soma que simplesmente soma 2 inteiros para testar o webservice.

Notem que no codigo ASP acima eu consigo passar mais parametros:
ReservaService
ReservaPort


Tentei fazer isto

require_once('nusoap.php');
$wsdl="http://localhost/testes_webservice/Nome.wsdl";
$client=new soapclient($wsdl, 'wsdl');
$param1=array('Valor1'=>20,);
$param2=array('Valor2'=>30);
echo $client->call('Soma', $param1, $param2);


mas não sei onde encaichar os outros dois parametros:
ReservaService e
ReservaPort

para que a comunicação seja feita

Por favor me AJUDEM!
21/02/2005 9:31am (~11 anos atrás)

não estou conseguindo utilizar a classe. obetenho o seguinte erro quanto tento utilizala apartir do Visual C#.

menssagem de erro:
There was an error downloading 'http://www.seama.edu.br/herbertpimentel/crcap/teste.php&#039;.

The request failed with the error message:
--
<?xml version="1.0"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/20
21/02/2005 9:24am (~11 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)