Página 2 de 2

Re: Consumir WebService Serasa

Enviado: 05 Nov 2010 19:02
por clodoaldomonteiro
Stanis!

Parece qu seu link de download está quebrado ou desativado.
Você pode colocar esse exemplo em outro lugar?

Re: Consumir WebService Serasa

Enviado: 05 Nov 2010 19:10
por Maligno
O link postado pelo Stanis está funcionando. Mas o ZIP contém apenas um EXE. Nenhum fonte.

Re: Consumir WebService Serasa

Enviado: 05 Nov 2010 20:58
por Stanis Luksys
Olá,

Eu digitei no google "upload de arquivos" e o site que veio eu enviei...

Não tem mesmo o fonte no ZIP, mas vou ver se consigo dar uma ajeitada nele e colocar para download, ou postar aqui mesmo. O código está extremamente mal feito porque eu estava testando várias coisas ao mesmo tempo, copiando e colando códigos dos exemplos que vem com o Harbour.

Se o problema for com o webservice, vou dar um exemplo aqui de como foi feito :

Código: Selecionar todos

oHttp:= TIpClientHttp():new( "http://nomedosite.php?par="+cSuaVar ) 
IF ! oHttp:open()
  Alert( "Erro na conexão: "+ oHttp:lastErrorMessage() )
ENDIF
cResposta := oHttp:readAll()  //aqui a var ja recebe todo o conteúdo retornado pelo site, seja HTML, XML, JSON ou o que for
oHttp:close()
Resumidamente, a grande maioria dos webservices trabalham também recebendo os dados via GET, bastando saber os parametros corretos para passar, como no exemplo, cSuaVar. Acessem este site, alterando a palavra cCep abaixo para um CEP conhecido:
"http://cep.republicavirtual.com.br/web_ ... ormato=xml"

Para os webservices que não trabalham com GET, mas somente com POST, se faz necessário usar outras funções da hbtip.

Não há nenhum exemplo pronto para isso, e no programa de CEP eu usei exatamente como exemplificado acima, no entanto uma leitura rápida na classe que acompanha a lib, permite realizar o envio de dados via POST sem maiores dificuldades. A classe se encontra no arquivo "/contrib/hbtip/httpcli.prg". O método a ser utilizado é o próprio Post.

Abraços.

Re: Consumir WebService Serasa

Enviado: 05 Nov 2010 21:19
por Stanis Luksys
Voltei,

Se alguém tiver interesse em testar como se passa os parâmetros do XML via GET ou POST ao invés de enviar o XML, pode usar este site que contém vários serviços de teste:

http://www.xmethods.com/ve2/index.po;js ... mR4klr8sPB

Fiz uns testes essa semana quando fiz este programinha do CEP e funfou legal...

Re: Consumir WebService Serasa

Enviado: 05 Nov 2010 22:31
por Stanis Luksys
Então,

Mais tarde posso tentar bolar algo a respeito, mas a idéia básica é a seguinte:

Imagine este webservice que contêm dados sobre a copa do mundo: http://footballpool.dataaccess.eu/data/info.wso

Agora para executar alguma das operações listadas, basta proceder como no exemplo do CEP. Veja como é simples pegar o "TOP 10" artilheiros da Copa:

Note o último 10 no endereço, se você quiser pegar o TOP 50, altere para 50...

Usando a hbtip:

Código: Selecionar todos

PROCEDURE MAIN()
	cls
   oHttp:= TIpClientHttp():new( "http://footballpool.dataaccess.eu/data/info.wso/TopGoalScorers/JSON?iTopN=10" )
   IF ! oHttp:open()
      ? "Erro:", oHttp:lastErrorMessage()
      QUIT
   ENDIF
   cResposta   := oHttp:readAll()
   oHttp:close()   	
   ? cResposta
RETURN
Veja o retorno como chega: (neste ponto pode-se usar as funções para JSON - viewtopic.php?f=4&t=11317)

Código: Selecionar todos

[
  {
    "sName": "David Villa",
    "iGoals": 5,
    "sCountry": "Y",
    "sFlag": "http://footballpool.dataaccess.eu/images/flags/es.gif"
  },
  {
    "sName": "Diego Forlán",
    "iGoals": 5,
    "sCountry": "Y",
    "sFlag": "http://footballpool.dataaccess.eu/images/flags/uy.gif"
  },
  {
    "sName": "Thomas Müller",
    "iGoals": 5,
    "sCountry": "Y",
    "sFlag": "http://footballpool.dataaccess.eu/images/flags/de.gif"
  },
  {
    "sName": "Wesley Sneijder",
    "iGoals": 5,
    "sCountry": "Y",
    "sFlag": "http://footballpool.dataaccess.eu/images/flags/nl.gif"
  },
  {
    "sName": "Gonzalo Higuaín",
    "iGoals": 4,
    "sCountry": "Y",
    "sFlag": "http://footballpool.dataaccess.eu/images/flags/ar.gif"
  },
  {
    "sName": "Miroslav Klose",
    "iGoals": 4,
    "sCountry": "Y",
    "sFlag": "http://footballpool.dataaccess.eu/images/flags/de.gif"
  },
  {
    "sName": "Róbert Vittek",
    "iGoals": 4,
    "sCountry": "Y",
    "sFlag": "http://footballpool.dataaccess.eu/images/flags/sk.gif"
  },
  {
    "sName": "Asamoah Gyan",
    "iGoals": 3,
    "sCountry": "Y",
    "sFlag": "http://footballpool.dataaccess.eu/images/flags/gh.gif"
  },
  {
    "sName": "Chung-Yong Lee",
    "iGoals": 3,
    "sCountry": "Y",
    "sFlag": "http://footballpool.dataaccess.eu/images/flags/kr.gif"
  },
  {
    "sName": "Landon Donovan",
    "iGoals": 3,
    "sCountry": "Y",
    "sFlag": "http://footballpool.dataaccess.eu/images/flags/us.gif"
  }
]

Apenas lembrando que o "padrão" seria enviar algo parecido com isso, mas é justamente o que eu quis evitar:

Código: Selecionar todos

POST /data/info.wso HTTP/1.1
Host: footballpool.dataaccess.eu
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <TopGoalScorers xmlns="http://footballpool.dataaccess.eu">
      <iTopN>int</iTopN>
    </TopGoalScorers>
  </soap:Body>
</soap:Envelope>
Bom, espero ter esclarecido em alguma coisa...