Página 1 de 1
Consumir Web Services com o xHarbour
Enviado: 16 Jan 2008 14:08
por cjsouza
Boa tarde.
Alguém aqui já utilizou ou utiliza o xHarbour como cliente para consumo de web services? Preciso utilizar nas minhas rotinas de venda, para comunicar com web services do Banco Bradesco, mas até agora não consegui encontrar uma luz...
Utilizo xHarbour com Linux, somente em modo texto. Se alguém puder ajudar, fico agradecido.
Abraço.
--
Carlos J. Souza
Enviado: 19 Jan 2008 17:15
por Luciano Bonfim
Amigo,
aqui nesse forum tem um tópico, acho que do rochinha, que ele conseguiu usar xharbour com o google maps, faz uma busca aqui com a palavra "google maps" que vc acha...
Enviado: 21 Jan 2008 08:02
por cjsouza
Não é bem o que estou precisando. Consegui utilizar no Windows com o Soap Tool Kit da Microsoft, mas preciso de uma solução que compile e rode no Linux e no Windows. Estou pesquisanso o gSoap, mas ele gera arquivos em C / C++ e eu nao sei como integrar com o xHarbour.
Abraço.
Enviado: 21 Jan 2008 09:42
por Stanis Luksys
Olá,
Existe uma solução interessante (meio que na base da gambiarra) que já foi apresentada aqui neste forum.
Essa solução permite que você desenvolva parte da sua rotina em ambiente web (como php ou asp) e interprete seu resultado pelo Clipper ou xHarbour.
Dê uma pesquisada que você encontra maiores informações.
Falou!
Re: Consumir Web Services com o xHarbour
Enviado: 21 Jan 2008 12:56
por sygecom
cjsouza escreveu:Boa tarde.
Alguém aqui já utilizou ou utiliza o xHarbour como cliente para consumo de web services? Preciso utilizar nas minhas rotinas de venda, para comunicar com web services do Banco Bradesco, mas até agora não consegui encontrar uma luz...
Utilizo xHarbour com Linux, somente em modo texto. Se alguém puder ajudar, fico agradecido.
Abraço.
--
Carlos J. Souza
Acredito que via OLE vc consiga, de uma olhada nos link abaixo:
http://www.microsoft.com/brasil/msdn/Te ... aform.mspx
http://www.microsoft.com/brasil/msdn/te ... ces_8.aspx
Enviado: 21 Jan 2008 13:33
por cjsouza
Fala pessoal.
Com OLE via SOAP Toolkit 3.0, está funcionando redondo no Windows, mas estou pesquisando uma forma de compilar tanto no Windows quanto no Linux.
Estou conseguindo algum progresso com o gSoap que gera código em C / C++. Tenho que estudar agora como integrar o código C / C++ com o xHarbour.
Por enquanto está valendo as dicas. Valeu.
Abraço.
--
Carlos J. Souza
Enviado: 21 Jan 2008 17:43
por sygecom
Desculpa, não que vc tinha citado para Linux.
Re: Consumir Web Services com o xHarbour
Enviado: 11 Mai 2008 18:36
por rochinha
Amiguinho cjsouza,
Gostaria que voce apresentasse um pequeno trecho de codigo que apresente o uso de OLE dando enfase para o momento do envio dos dados ao site servidor.
Que classes ou recursos voce usa, depois de montar o XML, para envio do dado a ser consumido.
Re: Consumir Web Services com o xHarbour
Enviado: 11 Mai 2008 19:09
por O_Padre
Ola Carlos
Gostaria de algumas dicas sobre o Xharbour rodando em Linux, vi que você esta utilizando o mesmo.
Meu Nome é Cesar Amorim {||O_Padre}, utilizo FlagShip com Linux a pelo menos 8 anos, devido aos inúmeros benefícios nunca mais quis saber de desenvolver em DOS/WINDOWS.
Mas o FlagShip esta meio que morto perto do Xharbour, e vejo muito mais opções com este
novo compilador !
Já consegui fazer alguns testes com XHarbour debaixo do Windows (em modo texto e em modo gráfico), mas estou tendo muita dificuldade de encontrar algum material que me mostre
como instalar e compilar debaixo de alguma Distribuiçao LINUX !
Qual distribuição você Utiliza ?
Gostaria também de te convidar a postar mais informações na área própria de Xharbou-LINUX
Precisamos de usuários como você, que tem mais experiência em desenvolvimento no LINUX por la !
Muito obrigado pela atenção
Re: Consumir Web Services com o xHarbour
Enviado: 12 Mai 2008 13:02
por rodrmigu
Olá,
Eu brinquei bastante com gSoap, mas é complicado integrar com xharbour, pois ele sequer tem uma lib. O codigo é gerado em cima do seu WSDL e depois vc implementa o código em cima dos métodos. Pra vc poder usar com xharbour, vc teria que chamar de dentro destes métodos criados, rotina em xharbour, por exemplo:
Código: Selecionar todos
minha_func()
{
PHB_DYNS pMethod = hb_dynsymFindName( "MINHA_FUNC" );
if( pMethod )
{
hb_vmPushSymbol( hb_dynsymSymbol( pMethod ) );
hb_vmSend( 0 );
}
}
Particularmente, eu acho mais fácil usar PHP que tem suporte a SOAP e nao é tao complicado.
[]'s
Rodrigo
Re: Consumir Web Services com o xHarbour
Enviado: 12 Mai 2008 13:26
por vagucs
Bom cara, de SOAP eu entendo, ainda mais usando em xHarbour, eu programei o acesso a SOAP de uma empresa para usar a rotinas disponiveis pelo banco IBI para integração com xHarbour, se o acesso for via HTTPS (bem provável que seja), eu indico a CURL, ela está disponivel para todas as distribuições do Linux, consegui usar ela muito bem para este tipo de trabalho, ela é apenas uma lib para conexão a host seguros, as chamadas você tem que montar; eu programei as rotinas de SOAP diretamente, apenas vendo os layouts padrões da WEB, montei a requisição e tratei toda a resposta, usei a CURL apenas para Linux mas vi que tem disponivel para windows tambem e com os mesmos resultados.
Se for usar acessando via HTTP mesmo, pode criar as chamadas usando as rotinas de socket do xHARBOUR.
O SOAP é apenas uma requisição WEB normal (GET), so que conectando-se a porta 443. Se você começar a buscar informação pela WEB vai ficar com certeza perdido, mas vai achar algum XML com exemplos de chamadas, e com o WSDL na mão você consegue ler ele e entender os parâmetros e tudo mais, não tem bicho de 7 cabeças, apesar que é muita coisa e tudo muito obscuro, programadores Java que enchem a boca, mas as classes java fazem tudo por eles, alias, SOAP me parece que foi feito inicialmente para uso apenas de aplicações java, quando questionei o pessoal do banco sobre os datelhes do GET, os programadores Java nem sabiam o que me falar, esse é o grande problema das linguagens do tipo, um monte de componente ja faz tudo pro cara e ele ainda fica de boca cheia. Ainda que tenha toolkits para fazer isto, ainda defendo a tese de fazer tudo na mão e ter controle, foi o que montamos. Pretendemos criar as rotinas padrões para SOAP numa classe do xHARBOUR (Somente HTTP) bem ao estilo java, sem necessidade de lib externa, mas pelo nosso tempo curto, acho que vamos demorar um pouco. Agora para HTTPS o osso é mais duro, mas dá para roer.
Então, para criar o que você precisa de forma a ter tudo rodando em windows e linux, comece estudando as rotinas de socket do xHarbour, se for usar HTTPS, então a CURL é o caminho mais curto, ambas as soluções vão resolver sua vida tanto no Windows quanto no Linux.
Acredito que as dicas vão lhe poupar um bom tempo de pesquisa.
Re: Consumir Web Services com o xHarbour
Enviado: 12 Mai 2008 18:33
por rodrmigu
Olá,
vagucs escreveu:programadores Java que enchem a boca, mas as classes java fazem tudo por eles, alias, SOAP me parece que foi feito inicialmente para uso apenas de aplicações java, quando questionei o pessoal do banco sobre os datelhes do GET, os programadores Java nem sabiam o que me falar, esse é o grande problema das linguagens do tipo, um monte de componente ja faz tudo pro cara e ele ainda fica de boca cheia. Ainda que tenha toolkits para fazer isto, ainda defendo a tese de fazer tudo na mão e ter controle, foi o que montamos.
Nós é que estamos errados, eles estão é certos! Não precisam se preocupar com essas coisas básicas e se preocupam apenas com a lógica e ganham em produtividade. O mesmo acontece com o Delphi, quando começou esta estória de SOAP em meados de 2001, sequer tinha idéia do que rolava por trás, sequer conhecia XML, o importante é que já fazia o necessário com SOAP em Delphi.
Enfim, a questão é que se alguém também implementar uma classe em [x]harbour onde tudo seja transparente, desde os métodos até o WSDL, eu iria agradecer também.
Bom, aqui tem um exemplo muito bem simples de como utilizar o Soap em PHP. E instalar PHP e Apache é muito fácil. A única coisa neste pequeno tutorial é que eu acredito que as classes demonstradas já fazem parte do core do php talvez não sendo necessário baixa-las.
http://imasters.uol.com.br/artigo/4535/ ... es_em_php/
e estas são as referências em php
http://www.php.net/soap
[]'s
Rodrigo Moreno
Re: Consumir Web Services com o xHarbour
Enviado: 12 Mai 2008 18:53
por vagucs
Pois é, concordo, o problema é que no final das contas eles sempre vão precisar algum programar um nivel mais baixo.
Vamos começar a fazer algo do lado cliente em xHarbour interpretando o WSDL, é algo que com certeza nao vai sair amanha, pois o SOAP está bem complexo, tambem, começou a ser definio a quase 8 anos atras.
Re: Consumir Web Services com o xHarbour
Enviado: 12 Mai 2008 19:11
por rochinha
Amiguinhos
Então, matemos a cobra.
Aqui vão meus dois centavos de inteligencia.
Estou implementando acesso via SOAP em meu sistema para conectar a serviços de cobrança on-line com F2B(
http://www.F2b.com.br) e com meus testes consegui criar o .XML contendo as sentenças para envio e através de um pseudo .XML de retorno recupero as mensagens retornadas.
A implementação foi totalmente baseada no codigo fornecido pelo F2B usando ASP e fiz a conexão via OLE usando TOLEAuto() do Harbour. Para usar com xHarbour troquem TOLEAuto() por CreatObject().
Para se ter sucesso é necessário baixar o SOAP Toolkit 3.0 deste
link e verificar se o seu sistema operacional possue o XML Parser 4.0 instalado.
Minha plataforma é Windows Server 2003 SP2 e .NET 1.0 e 2.0 instalados, talvez isto faça a diferença na instalação do toolkit.
Codigo fonte:
Código: Selecionar todos
#include "FiveWin.ch"
function Main()
local oWnd, oActiveX
oXMLDoc := TOLEAUTO():New( "Microsoft.XMLDOM" )
oXMLDoc:async := .f.
oXMLDoc:preserveWhiteSpace := .t.
objRoot := oXMLDoc:createElement("soap-env:Envelope")
// Create an attribute, "xmlns:soap-env".
objattID := oXMLDoc:createAttribute("xmlns:soap-env")
// Set the value of the objattID attribute.
objattID:Text := "http://schemas.xmlsoap.org/soap/envelope/"
// The setAttributeNode method will append the objattID attribute to the objRoot element.
objRoot:setAttributeNode( objattID )
// Append the objRoot element as a child of the oXMLDoc element.
oXMLDoc:appendChild( objRoot )
//Create the xml processing instruction.
objPI := oXMLDoc:createProcessingInstruction([xml],[version='1.0' encoding="UTF-8"])
//Append the processing instruction to the XML document.
oXMLDoc:insertBefore( objPI, oXMLDoc:childNodes(0) )
//Create an new element and append it to current field.
objBody := oXMLDoc:createElement( "soap-env:Body" )
objRoot:appendChild( objBody )
//Create an new element, "f2b:F2bCobranca".
objF2bCobranca := oXMLDoc:createElement( "m:F2bCobranca" )
//Create an attribute, "xmlns:f2b".
objattID := oXMLDoc:createAttribute( "xmlns:m" )
//Set the value of the objattID attribute.
objattID:Text := "http://www.f2b.com.br/soap/wsbilling.xsd"
//The setAttributeNode method will appends the objatID attributes to the currents objF2bCobranca elements.
objF2bCobranca:setAttributeNode( objattID )
objBody:appendChild( objF2bCobranca )
// ----------------------- Bloco do Elemento: mensagem ---------------------------
objField := oXMLDoc:createElement( "mensagem" )
objattID := oXMLDoc:createAttribute( "data" )
objattID:Text := "2005-02-10"
objField:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute( "numero" )
objattID:Text := "121233"
objField:setAttributeNode( objattID )
objF2bCobranca:appendChild( objField )
// -------------------------------------------------------------------------------
// ------------------------ Bloco do Elemento: sacador ---------------------------
objField := oXMLDoc:createElement( "sacador" )
objField:text := "José da Silva"
objattID := oXMLDoc:createAttribute( "conta" )
objattID:Text := "9023010001230123"
objField:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute( "senha" )
objattID:Text := "123456"
objField:setAttributeNode( objattID )
objF2bCobranca:appendChild( objField )
// -------------------------------------------------------------------------------
// ------------------------ Bloco do Elemento: cobrança --------------------------
objField := oXMLDoc:createElement( "cobranca" )
objattID := oXMLDoc:createAttribute( "valor" )
objattID:Text := "10:00"
objField:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute( "taxa" )
objattID:Text := "2:50"
objField:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute( "tipo_taxa" )
objattID:Text := "0" //' 0 - Reais (R$); 1 - Porcentagem (%)
objField:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute( "tipo_cobranca" )
objattID:Text := ""
objField:setAttributeNode( objattID )
// Tipo de cobrança:
// B - Boleto; C - Cartão de crédito; D - Cartão de débito; T - Transferência On-line
// Caso queira permitir cobrança por mais de um tipo, enviar as letras juntas: Ex:: "BCD" (Aceitar Boleto, Crédito e Débito)
objattID := oXMLDoc:createAttribute( "num_document" )
objattID:Text := ""
objField:setAttributeNode( objattID )
// Poderão ser criadas até 10 linhas de demonstrativo com 80 caracteres cada
// ---------------------- Bloco do Elemento: demonstrativo -----------------------
objFieldValue := oXMLDoc:createElement( "demonstrativo" )
objFieldValue:Text := "Cobrança F2b"
objField:appendChild( objFieldValue )
// -------------------------------------------------------------------------------
// ---------------------- Bloco do Elemento: demonstrativo -----------------------
objFieldValue := oXMLDoc:createElement("demonstrativo")
objFieldValue:Text := "Pague em qualquer banco"
objField:appendChild( objFieldValue )
// -------------------------------------------------------------------------------
// ------------------------ Bloco do Elemento: desconto --------------------------
objFieldValue := oXMLDoc:createElement( "desconto" )
objattID := oXMLDoc:createAttribute( "valor" )
objattID:Text := "2:00"
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute( "tipo_desconto" )
objattID:Text := "0" // 0 - Reais (R$); 1 - Porcentagem (%)
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute( "antecedencia" )
objattID:Text := "5"
objFieldValue:setAttributeNode( objattID )
objField:appendChild( objFieldValue )
// -------------------------------------------------------------------------------
// ------------------------ Bloco do Elemento: multa --------------------------
objFieldValue := oXMLDoc:createElement( "multa" )
objattID := oXMLDoc:createAttribute( "valor" )
objattID:Text := "1:00"
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute( "tipo_multa" )
objattID:Text := "0" // 0 - Reais (R$); 1 - Porcentagem (%)
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute( "valor_dia" )
objattID:Text := "0:10"
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute( "tipo_multa_dia" )
objattID:Text := "0" // 0 - Reais (R$); 1 - Porcentagem (%)
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute( "atraso" )
objattID:Text := "20"
objFieldValue:setAttributeNode( objattID )
objField:appendChild( objFieldValue )
objF2bCobranca:appendChild( objField )
// -------------------------------------------------------------------------------
// ----------------------- Bloco do Elemento: agendamento ------------------------
objField := oXMLDoc:createElement("agendamento")
objattID := oXMLDoc:createAttribute("vencimento")
objattID:Text := "2005-02-15"
objField:setAttributeNode( objattID )
// -------------------------------------------------------------------------------
// Descomentar os atributos abaixo caso queria realizar cobranças com Agendamento
// -------------------------------------------------------------------------------
// objattID := oXMLDoc:createAttribute("ultimo_dia")
// objattID:Text := "n"
// objField:setAttributeNode objattID
//
// objattID := oXMLDoc:createAttribute("antecedencia")
// objattID:Text := "10"
// objField:setAttributeNode objattID
//
// objattID := oXMLDoc:createAttribute("periodicidade")
// objattID:Text := "1"
// objField:setAttributeNode objattID
//
// objattID := oXMLDoc:createAttribute("periodos")
// objattID:Text := "12"
// objField:setAttributeNode objattID
// -------------------------------------------------------------------------------
objattID := oXMLDoc:createAttribute("sem_vencimento")
objattID:Text := "n"
objField:setAttributeNode( objattID )
objField:text := "Pagamento a vista"
objF2bCobranca:appendChild( objField )
// -------------------------------------------------------------------------------
// ----------------------- Bloco do Elemento: sacado ------------------------
objField := oXMLDoc:createElement("sacado")
objattID := oXMLDoc:createAttribute("grupo")
objattID:Text := "web service"
objField:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute("codigo")
objattID:Text := "000001"
objField:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute("envio")
objattID:Text := "e"
objField:setAttributeNode( objattID )
// ----------------------- Bloco do Elemento: nome ------------------------
objFieldValue := oXMLDoc:createElement("nome")
objFieldValue:Text := "João Oliveira"
objField:appendChild( objFieldValue )
// ----------------------- Bloco do Elemento: email ------------------------
objFieldValue := oXMLDoc:createElement("email")
objFieldValue:Text := "joseoliveira@f2b:com:br"
objField:appendChild( objFieldValue )
// ----------------------- Bloco do Elemento: email ------------------------
objFieldValue := oXMLDoc:createElement("email")
objFieldValue:Text := "joseoliveira@f2b:locaweb:com:br"
objField:appendChild( objFieldValue )
// ----------------------- Bloco do Elemento: endereco ------------------------
objFieldValue := oXMLDoc:createElement("endereco")
objattID := oXMLDoc:createAttribute("logradouro")
objattID:Text := "Rua das Pedras"
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute("numero")
objattID:Text := "345"
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute("complemento")
objattID:Text := "sala 34"
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute("bairro")
objattID:Text := "Itaim Bibi"
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute("cidade")
objattID:Text := "São Paulo"
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute("estado")
objattID:Text := "SP"
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute("cep")
objattID:Text := "04536000"
objFieldValue:setAttributeNode( objattID )
objField:appendChild( objFieldValue )
// ----------------------- Bloco do Elemento: telefone ------------------------
objFieldValue := oXMLDoc:createElement("telefone")
objattID := oXMLDoc:createAttribute("ddd")
objattID:Text := "11"
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute("numero")
objattID:Text := "35551234"
objFieldValue:setAttributeNode( objattID )
objField:appendChild( objFieldValue )
// ----------------------- Bloco do Elemento: telefone comercial ------------------------
objFieldValue := oXMLDoc:createElement("telefone_com")
objattID := oXMLDoc:createAttribute("ddd_com")
objattID:Text := "11"
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute("numero_com")
objattID:Text := "11111111"
objFieldValue:setAttributeNode( objattID )
objField:appendChild( objFieldValue )
// ----------------------- Bloco do Elemento: telefone celular ------------------------
objFieldValue := oXMLDoc:createElement("telefone_cel")
objattID := oXMLDoc:createAttribute("ddd_cel")
objattID:Text := "22"
objFieldValue:setAttributeNode( objattID )
objattID := oXMLDoc:createAttribute("numero_cel")
objattID:Text := "22222222"
objFieldValue:setAttributeNode( objattID )
objField:appendChild( objFieldValue )
// ----------------------- Bloco do Elemento: cpf ------------------------
objFieldValue := oXMLDoc:createElement("cpf")
objFieldValue:text := "12345678909"
objField:appendChild( objFieldValue )
objF2bCobranca:appendChild( objField )
oXMLDoc:save("ttt.xml")
wsdl := memoread( "ttt.xml" )
? XMLRetorno( wsdl )
return nil
Le o retorno diretamente de um .XML supostamente retornado.
Código: Selecionar todos
Function XMLRetorno( oXMLDoc )
local RespText, objXMLHTTP
// Envio da página em XML para o nosso sistema '''
objXMLHTTP := TOLEAUTO():New( "Microsoft.XMLHTTP" )
objXMLHTTP:open( "post", "https://www.f2b.com.br/WSBilling", .f. )
objXMLHTTP:send( oXMLDoc )
oXMLDoc := TOLEAUTO():New("Microsoft.XMLDOM")
root := oXMLDoc:documentElement
// Allow the document to complete loading
oXMLDoc:async := .f.
//success := oXMLDoc:loadXML(objXMLHTTP:responseText)
lSuccess := oXMLDoc:load("ret.xml")
RespText := ""
If lSuccess
agendamentoDetails := oXMLDoc:selectNodes("//agendamento")
sacadoDetails := oXMLDoc:selectNodes("//sacado")
cobrancaDetails := oXMLDoc:selectNodes("//cobranca")
logDetails := oXMLDoc:selectNodes("//log")
? agendamentoDetails:Item(0):Text
? cobrancaDetails:Item(0):Text
? sacadoDetails:Item(0):Text
? logDetails:Item(0):Text
If (logDetails:Item(0):Text == "OK")
Else
RespText := logDetails:Item(0):Text
EndIf
Else
RespText := logDetails:Item(0):Text
EndIf
// Response:write RespText
WSBilling := RespText
return WSBilling
Pseudo .XML de retorno:
Código: Selecionar todos
<?xml version="1.0" encoding="ISO-8859-1"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Body>
<m:F2bCobrancaRetorno xmlns:m="http://www.f2b.com.br/soap/wsbilling.xsd">
<agendamento numero="0000000008">Imediato e Agendado</agendamento>
<sacado numero="0000000027">
<nome>José Oliveira</nome>
<email>joseoliveira@f2b.com.br</email>
<email>joseoliveira@f2b.locaweb.com.br</email>
</sacado>
<sacado numero="0000000028">
<nome>Maria Oliveira</nome>
<email>mariaoliveira@f2b.com.br</email>
</sacado>
<sacado numero="0000000029">
<nome>Pedro Oliveira</nome>
<email>pedrooliveira@f2b.com.br</email>
</sacado>
<cobranca numero="0000000339" taxa_registro="0.00">
<nome>João Oliveira</nome>
<email>joseoliveira@f2b.com.br</email>
<email>joseoliveira@f2b.locaweb.com.br</email>
<url>http://www.f2b.com.br/Billing?id=00000015441000000033929</url>
</cobranca>
<cobranca numero="0000000340" taxa_registro="0.00">
<nome>Maria Oliveira</nome>
<email>mariaoliveira@f2b.com.br</email>
<url>http://www.f2b.com.br/Billing?id=00000015441000000034090</url>
</cobranca>
<cobranca numero="0000000341" taxa_registro="0.75">
<nome>Pedro Oliveira</nome>
<email>pedrooliveira@f2b.com.br</email>
<url>http://www.f2b.com.br/Billing?id=00000015441000000034189</url>
</cobranca>
<log>OK
</log>
</m:F2bCobrancaRetorno>
</soap-env:Body>
</soap-env:Envelope>
Da forma como exponho o resultado fica mais fácil criar ou ler o conteúdo destes arquivos enigmáticos e cheios de hierarquias.
Acho que este codigo já da uma demonstração de que as possibilidades que o Harbour nos brinda vão além do que achavámos que pudessemos chegar.
"...Vida longa ao Harbour, e que o compilador esteja com voces..."
Re: Consumir Web Services com o xHarbour
Enviado: 12 Mai 2008 19:17
por vagucs
este é o problema, fazendo na mao e diretamente tudo isto ficaria mais claro,sem necessidade lib externa, rodando em windows e linux e com menos linhas de codigo.