Jump to content


Photo

Webservice


  • Faça o login para participar
8 replies to this topic

#1 Fernando_Ramos

Fernando_Ramos

    Fernando Ramos

  • Usuários
  • 728 posts
  • Sexo:Não informado

Posted 12/12/2007, 08:30

Amigos,
Bom dia.

Estou tentando implementar em nossa empresa uma consulta de CEPs de CLIENTES CADASTRADOS.
Procurei na internet e consegui um exemplo, e modifiquei um pouco a minha necessidade. Porém consegui fazer apenas que retornasse o logradouro. Como eu poderia fazer para retornar outros campos da tabelas.

Segue abaixo o código.


<?php
require_once("nusoap/nusoap.php");

function cep($cep) {
   $mysqli = new mysqli("localhost", "XXXXXXXX", "XXXXXXX", "webcep");
	if (mysqli_connect_errno()) {
		printf("Connect failed: %s\n", mysqli_connect_error());
		exit();
	}   
   $SQL = "SELECT * FROM WcLog1 where LogrCep = " . $cep;
   if ($result = mysqli_query($mysqli,$SQL)) {
		while($registro=mysqli_fetch_row($result)) {
			$logradouro = $registro[2];
		}
   }
   $mysqli->close();
   return $logradouro;
}

$objetoSoapServer = new soap_server();
$objetoSoapServer->configureWSDL('webcep','urn:webcep');
						   
$objetoSoapServer->register('cep'
						   ,array('CEP' => 'xsd:integer')
						   ,array('return' => 'xsd:string')
						   ,'urn:webcep'
						   ,'urn:webcep#CEP'
						   );
						   
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';

$objetoSoapServer->service($HTTP_RAW_POST_DATA);

?>

--
www.ramosinformatica.com
contato@ramosinformatica.com | @rinformatica

Hospedagem de site | Desenvolvimento de Sistemas | Informática em Geral

#2 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 12/12/2007, 11:54

Estrutura da tabela? :assobio:

[]’s :D Até mais

#3 Fernando_Ramos

Fernando_Ramos

    Fernando Ramos

  • Usuários
  • 728 posts
  • Sexo:Não informado

Posted 12/12/2007, 13:38

desculpe....

segue:

*LogrCep int(8)
*BaiCod int(5)
Logr1Desc char(100)
TpDesc char(20)
Logr1Dt date
Logr1Hr time
UsuCpf char(14)


vlw!!!!
--
www.ramosinformatica.com
contato@ramosinformatica.com | @rinformatica

Hospedagem de site | Desenvolvimento de Sistemas | Informática em Geral

#4 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 12/12/2007, 19:26

Bem, deu na mesma, não sei qual campo aí vai ser útil... :P

Mas enfim, vamos lá. A função cep() ficaria algo assim:

<?php

function cep($cep) {
   $dados = array();
   $mysqli = new mysqli("localhost", "XXXXXXXX", "XXXXXXX", "webcep");
	if (mysqli_connect_errno()) {
		printf("Connect failed: %s\n", mysqli_connect_error());
		exit();
	}  
   $SQL = "SELECT * FROM WcLog1 where LogrCep = " . $cep;
   if ($result = mysqli_query($mysqli,$SQL)) {
	   $dados = mysql_fetch_array($result);
   }
   $mysqli->close();
   return $dados;
}

?>
Se algum campo for dispensável, altere o * da consulta para o nome dos campos necessários. ;)

Já no código do NuSOAP, como o retorno será um vetor, tu vai precisar um tipo complexo (complex type) para o parâmetro de saída (output). Algo assim:

<?php

// Exemplo

$objetoSoapServer->wsdl->addComplexType(
	'dados', // altere
	'complexType',
	'array',
	'',
	'SOAP-ENC:Array',
	array(),
	array(
		array(
			'ref' => 'SOAP-ENC:arrayType',
			'wsdl:arrayType' => 'tns:dados[]' // altere
		)
	),
	'tns:dados' // altere
);

?>

Já o código de registro ficaria mais ou menos assim:

<?php

$objetoSoapServer->register(
	'cep',
	array('CEP' => 'xsd:integer'), // estrutura de entrada
	array('return' => 'tns:dados'), // estrutura de saída
	'urn:webcep',
	'urn:webcep#CEP',
	'rpc',
	'encoded'
);

?>
[]’s :DAté mais

#5 Fernando_Ramos

Fernando_Ramos

    Fernando Ramos

  • Usuários
  • 728 posts
  • Sexo:Não informado

Posted 12/12/2007, 21:11

A base de teste copiei e colei o seu exemplo.....

me retornou o seguinte erro:

Fatal error: Call to a member function addComplexType() on a non-object in F:\Web\webservice\servidor.php on line 21


a linha 21 é:

$objetoSoapServer->wsdl->addComplexType(


--
www.ramosinformatica.com
contato@ramosinformatica.com | @rinformatica

Hospedagem de site | Desenvolvimento de Sistemas | Informática em Geral

#6 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 12/12/2007, 21:44

Tu deve declarar isso depois de $objetoSoapServer->configureWSDL() e antes de $objetoSoapServer->register(). Foi isso que fez? :ponder:

[]’s :DAté mais

#7 Fernando_Ramos

Fernando_Ramos

    Fernando Ramos

  • Usuários
  • 728 posts
  • Sexo:Não informado

Posted 13/12/2007, 13:17

amigo.
realmente eu estava fazendo errado. Testei e funcionou.

Agora, uma dúvida. Eu não estou consumindo em PHP, utilizo uma ferramenta para desenvolvimento chamada GENEXUS. Nela possui um WSDL inspector, que analiza toda a estrutura do Webservice.

Então, quando o retorno é um array ele cria uma estrutura de dados, e essa estrutura esta retornando vazia. Ou seja, preciso que o retorno dos dados seja estruturado. Talvez eu esteja falando muita besteira, mas é por que não conheço Webservices e PHP.

O Webservice esta retornando uma estrutura "Dados" mas ele vem vazia...

precisava que viesse:

*DADOS (
**LOGRADOURO=LOGRADOURO
**BAIRRO=BAIRRO
)


desculpe se não estou sendo bastante claro...

abraços!!
--
www.ramosinformatica.com
contato@ramosinformatica.com | @rinformatica

Hospedagem de site | Desenvolvimento de Sistemas | Informática em Geral

#8 gonacts

gonacts

    "Agora eu tb tenho um Tux..." =D

  • Usuários
  • 1030 posts
  • Sexo:Não informado

Posted 15/12/2007, 00:12

deixa eu te perguntar uma coisa...vc esta hospedando o seu site na locaweb?!

la ja tem um webservice de cep...eu uso e eh mto vena!
"Ninguém é tão inteligente que não possa aprender e ninguém é tão burro que não possa ensinar.."
"As dúvidas engrandecem nossa sabedoria, mas não basta somente tirá-las, temos que entendê-las"

#9 Fernando_Ramos

Fernando_Ramos

    Fernando Ramos

  • Usuários
  • 728 posts
  • Sexo:Não informado

Posted 15/12/2007, 13:36

não estou hospedando lá não... e no caso esse webservice tem por objetivo o mesmo de um de CEP normal, porém é interno, para clientes/fornecedores cadastrados.

mas valeu pela ajuda. quem souber me ajudar... to no aguardo.

abraços!
--
www.ramosinformatica.com
contato@ramosinformatica.com | @rinformatica

Hospedagem de site | Desenvolvimento de Sistemas | Informática em Geral




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq