Consumo de Webservice com Harbour.
Moderador: Moderadores
- Mario Mesquita
- Usuário Nível 4

- Mensagens: 613
- Registrado em: 08 Dez 2009 13:47
- Localização: Rio de Janeiro
Consumo de Webservice com Harbour.
Bom dia e boa semana a todos.
Amigos, estou precisando aprender como fazer as operações de receber e enviar dados por meio de webservice. Vi em alguns tópicos algo sobre, mas alguns tópicos já são um pouco antigos, então gostaria de saber:
O Harbour trata as operações webservice nativamente? Ou precisa de algo externo para essas operações?
Alguma literatura disponível ou algum exemplo de uma coisa básica para o aprendizado necessário?
Conheço apenas o conceito, mas nunca lidei com isso, então quem tiver alguma dica e/ou já fez algo e puder compartilhar, agradeço.
Abraço a todos,
Mario.
Amigos, estou precisando aprender como fazer as operações de receber e enviar dados por meio de webservice. Vi em alguns tópicos algo sobre, mas alguns tópicos já são um pouco antigos, então gostaria de saber:
O Harbour trata as operações webservice nativamente? Ou precisa de algo externo para essas operações?
Alguma literatura disponível ou algum exemplo de uma coisa básica para o aprendizado necessário?
Conheço apenas o conceito, mas nunca lidei com isso, então quem tiver alguma dica e/ou já fez algo e puder compartilhar, agradeço.
Abraço a todos,
Mario.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Consumo de Webservice com Harbour.
No fórum tem muito exemplo, só pesquisar webservice, soap, curl, libcurl, msxml, hbtip, etc.
Nota: Isso continua igual há mais de uma década.
Nota: Isso continua igual há mais de uma década.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Consumo de Webservice com Harbour.
JoséQuintas, estou precisando emitir NFSe para Sorocaba,
já li varios post seu e do Rochinha e nãp consegui resolver o problema.
Não sei mais o que fazer. Se possível poderia dar uma olhada nos anexos e me dizer onde estou errando.
Obrigado
já li varios post seu e do Rochinha e nãp consegui resolver o problema.
Não sei mais o que fazer. Se possível poderia dar uma olhada nos anexos e me dizer onde estou errando.
Obrigado
Código: Selecionar todos
/************************************************
* Compilar: hbmk2 soap.prg -lhbwin -lxhb
************************************************/
#include "hbcompat.ch"
#include "hbxml.ch"
#include "hbmxml.ch"
#Include "Common.ch" // fwh\include
#Include "winapi.ch" // fwh\include
#Include "objects.ch" // fwh\include
function main()
local cXml, cSoapAction, cWebservice, cRetorno , oXML
local wIM,wSerie,wNrRPS,wDTEmi,wTrib,wSitRPS,wTPReco,wCodAti,wCpfCgc,vHash,wVSERV,wVDed
LOCAL cXMLRetorno
cls
cWebservice := "https://issdigital.sorocaba.sp.gov.br/WsNFe2/LoteRps.jws?wsdl"
cSoapAction := "enviar"
wIM := "00000112695"
wSerie := "NF "
wNrRPS := "000000000001"
wDTEmi := "20170418"
wTrib := "T "
wSitRPS:= "N"
wTPReco:= "N" // TIPO DE RECOLHIMENTO SE FOR A PREENCHE COM N SENAO S
wVSERV := "000000000082000"
wVDed := "000000000000000"
wCodAti:= "0829979901"
wCpfCgc:= "49544406000124" // CGC/CPF do Tomador
vHash := hb_SHA1(wIM+wSerie+wNrRPS+wDTEmi+wTrib+wSitRPS+wTPReco+wVSERV+wVDed+wCodAti+wCpfCgc)
cXML:=[<?xml version="1.0" encoding="UTF-8"?>]+;
[<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">]+;
"<soapenv:Body>"+;
"<soapenv:enviar>"+;
[<ns1:ReqEnvioLoteRPS xmlns:ns1="http://localhost:8080/WsNFe2/lote" xmlns:tipos="http://localhost:8080/WsNFe2/tp" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://localhost:8080/WsNFe2/lote http://localhost:8080/WsNFe2/xsd/ReqEnvioLoteRPS.xsd">]+;
"<Cabecalho>"+;
"<CodCidade>7145</CodCidade>"+;
"<CPFCNPJRemetente>03531116000145</CPFCNPJRemetente>"+;
"<RazaoSocialRemetente>EMPRESA MODELO</RazaoSocialRemetente>"+;
"<transacao/>"+;
"<dtInicio>2017-04-19</dtInicio>"+;
"<dtFim>2017-04-19</dtFim>"+;
"<QtdRPS>1</QtdRPS>"+;
"<ValorTotalServicos>820.00</ValorTotalServicos>"+;
"<ValorTotalDeducoes>0.00</ValorTotalDeducoes>"+;
"<Versao>1</Versao>"+;
"<MetodoEnvio>ws</MetodoEnvio>"+;
"</Cabecalho>"+;
[<Lote Id="lote:1ABCDZ">]+;
[<RPS Id="rps:1">]+;
"<Assinatura>"+vHash+"</Assinatura>"+;
"<InscricaoMunicipalPrestador>000112695</InscricaoMunicipalPrestador>"+;
"<RazaoSocialPrestador>EMPRESA MODELO</RazaoSocialPrestador>"+;
"<TipoRPS>RPS</TipoRPS>"+;
"<SerieRPS>NF</SerieRPS>"+;
"<NumeroRPS>1</NumeroRPS>"+;
"<DataEmissaoRPS>2017-04-19T15:00:00</DataEmissaoRPS>"+;
"<SituacaoRPS>N</SituacaoRPS>"+;
"<SerieRPSSubstituido/>"+;
"<NumeroRPSSubstituido>0</NumeroRPSSubstituido>"+;
"<NumeroNFSeSubstituida>0</NumeroNFSeSubstituida>"+;
"<DataEmissaoNFSeSubstituida>1900-01-01</DataEmissaoNFSeSubstituida>"+;
"<SeriePrestacao>99</SeriePrestacao>"+;
"<InscricaoMunicipalTomador>0000000</InscricaoMunicipalTomador>"+;
"<CPFCNPJTomador>49544406000124</CPFCNPJTomador>"+;
"<RazaoSocialTomador>EMPRESA DE TESTES</RazaoSocialTomador>"+;
"<DocTomadorEstrangeiro/>"+;
"<TipoLogradouroTomador>Rua</TipoLogradouroTomador>"+;
"<LogradouroTomador>SANTA RITA</LogradouroTomador>"+;
"<NumeroEnderecoTomador>425</NumeroEnderecoTomador>"+;
"<ComplementoEnderecoTomador/>"+;
"<TipoBairroTomador>Bairro</TipoBairroTomador>"+;
"<BairroTomador>Eden</BairroTomador>"+;
"<CidadeTomador>0007145</CidadeTomador>"+;
"<CidadeTomadorDescricao>Sorocaba</CidadeTomadorDescricao>"+;
"<CEPTomador>18087157</CEPTomador>"+;
"<EmailTomador>rafael@ig.com.br</EmailTomador>"+;
"<CodigoAtividade>829979901</CodigoAtividade>"+;
"<AliquotaAtividade>5.0000</AliquotaAtividade>"+;
"<TipoRecolhimento>A</TipoRecolhimento>"+;
"<MunicipioPrestacao>0007145</MunicipioPrestacao>"+;
"<MunicipioPrestacaoDescricao>Sorocaba</MunicipioPrestacaoDescricao>"+;
"<Operacao>A</Operacao>"+;
"<Tributacao>T</Tributacao>"+;
"<ValorPIS>5.33</ValorPIS>"+;
"<ValorCOFINS>24.60</ValorCOFINS>"+;
"<ValorINSS>0.00</ValorINSS>"+;
"<ValorIR>12.30</ValorIR>"+;
"<ValorCSLL>8.20</ValorCSLL>"+;
"<AliquotaPIS>0.6500</AliquotaPIS>"+;
"<AliquotaCOFINS>3.0000</AliquotaCOFINS>"+;
"<AliquotaINSS>11.0000</AliquotaINSS>"+;
"<AliquotaIR>1.5000</AliquotaIR>"+;
"<AliquotaCSLL>1.0000</AliquotaCSLL>"+;
"<DescricaoRPS>Servico de processamento de dados</DescricaoRPS>"+;
"<DDDPrestador>011</DDDPrestador>"+;
"<TelefonePrestador>12345678</TelefonePrestador>"+;
"<DDDTomador>011</DDDTomador>"+;
"<TelefoneTomador>12345678</TelefoneTomador>"+;
"<MotCancelamento/>"+;
"<CPFCNPJIntermediario/>"+;
"<Deducoes/>"+;
"<Itens>"+;
"<Item>"+;
"<DiscriminacaoServico>Sistema de gestao</DiscriminacaoServico>"+;
"<Quantidade>1.0000</Quantidade>"+;
"<ValorUnitario>820.0000</ValorUnitario>"+;
"<ValorTotal>820.00</ValorTotal>"+;
"<Tributavel>S</Tributavel>"+;
"</Item>"+;
"</Itens>"+;
"</RPS>"+;
"</Lote>"+;
"</ns1:ReqEnvioLoteRPS>"+;
"</soapenv:enviar>"+;
"</soapenv:Body>"+;
"</soapenv:Envelope>"
*-- VERIFICA A ESTRUTURA DO XML SE ESTÁ CORRETA
oXML := TXMLDocument():New( cXml, HBXML_STYLE_NOESCAPE )
IF oXML:nError != HBXML_ERROR_NONE
alert( "xml com problema " + Str( oXML:nError ) )
RETURN
ENDIF
*-- ENVIA O WEBSERVICE E LE O RETORNO
cRetorno := MicrosoftXmlSoapPost( cXml, cSoapAction, cWebservice )
*--
MemoWrit('retorno.xml',cRetorno)
RETURN
*------------------------------------------------------
*------------------------------------------------------
FUNCTION MicrosoftXmlSoapPost( cXmlSoap, cSoapAction, cWebService )
LOCAL oServer, oDOMDoc, nCont, cRetorno := "*ERRO*", cXmlRetorno := ""
oServer:=CreateObject( "MSXML2.ServerXMLHTTP.5.0")
oServer:Open( "POST", cWebService, .F. )
oServer:SetRequestHeader( "SOAPAction", cSoapAction )
// oServer:SetRequestHeader( "Content-Type", "text/xml; charset=utf-8" )
oDOMDoc:=CreateObject( "MSXML2.DOMDocument.5.0" )
oDOMDoc:async := .F.
oDOMDoc:validateOnParse := .T.
oDOMDoc:resolveExternals := .F.
oDOMDoc:preserveWhiteSpace := .T.
oDOMDoc:LoadXML(cXmlSoap)
IF oDOMDoc:parseError:errorCode <> 0
msginfo("Erro: xML nao carregado")
RETURN Nil
ENDIF
TRY
oServer:send(oDOMDoc:xml)
CATCH oError
msginfo("Falha no envio do xML")
RETURN Nil
END
DO WHILE oServer:readyState <> 4
syswait(0.5)
ENDDO
cRetorno := oServer:responseText
IF ValType( cRetorno ) == "C"
cXmlRetorno := cRetorno
ELSEIF cRetorno == NIL
cXmlRetorno := "*ERRO*"
ELSE
cXmlRetorno := ""
FOR nCont = 1 TO Len( cRetorno )
cXmlRetorno += Chr( cRetorno[ nCont ] )
NEXT
ENDIF
RETURN( cXmlRetorno )
- Anexos
-
- Arq_Retorno.xml
- (694 Bytes) Baixado 1243 vezes
-
- Arq_ENVIO.xml
- (4.74 KiB) Baixado 1234 vezes
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Consumo de Webservice com Harbour.
A comunicação, à primeira vista, funcionou, já que tem resposta.
O problema agora é com o XML.
Esse XML já contém o envelope, usado pra comunicação, e o XML da nota propriamente dito.
Esse XML é "duplo" contém o envelope de comunicação e a nota de serviço.
É nesse envelope que vão as configurações necessárias pra comunicação, e isso pode alterar muito de um webservice pra outro.
Imagine como sendo a chamada de uma função em um programa, contendo parâmetros.
Quais são os parâmetros? Depende de como o programador criou essa função.
Por isso acaba sendo complicado, porque o conteúdo tem que ser exato, inclusive maiúsculas/minúsculas.
Pelo retorno, parece que chegou num parâmetro que não deveria ser, pode estar faltando ou sobrando alguma coisa.
<faultstring>org.xml.sax.SAXException:SimpleDEserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.</faultstring>
<tagpai>
<tagfilho>deddd</tagfilho>
</tagpai>
É só o que dá pra dizer.
Mais que isso, só olhando manual da nota, manual do webservice, etc. mas aí deixa de ser ajuda, e entra em desenvolver algo exclusivo de seu uso.
O que estou estranhando são esses endereços locais, localhost:8080, mas acredito que seja local no servidor, ao receber o arquivo.
José M. C. Quintas
O problema agora é com o XML.
Esse XML já contém o envelope, usado pra comunicação, e o XML da nota propriamente dito.
Esse XML é "duplo" contém o envelope de comunicação e a nota de serviço.
É nesse envelope que vão as configurações necessárias pra comunicação, e isso pode alterar muito de um webservice pra outro.
Imagine como sendo a chamada de uma função em um programa, contendo parâmetros.
Quais são os parâmetros? Depende de como o programador criou essa função.
Por isso acaba sendo complicado, porque o conteúdo tem que ser exato, inclusive maiúsculas/minúsculas.
Pelo retorno, parece que chegou num parâmetro que não deveria ser, pode estar faltando ou sobrando alguma coisa.
<faultstring>org.xml.sax.SAXException:SimpleDEserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.</faultstring>
<tagpai>
<tagfilho>deddd</tagfilho>
</tagpai>
É só o que dá pra dizer.
Mais que isso, só olhando manual da nota, manual do webservice, etc. mas aí deixa de ser ajuda, e entra em desenvolver algo exclusivo de seu uso.
O que estou estranhando são esses endereços locais, localhost:8080, mas acredito que seja local no servidor, ao receber o arquivo.
José M. C. Quintas
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Consumo de Webservice com Harbour.
Por acaso olhou esta parte?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Consumo de Webservice com Harbour.
JoséQuintas,
Muito obrigado pela atenção.
O envio por lotes não esta mais sendo usado pela prefeitura de Sorocaba.
Muito obrigado pela atenção.
O envio por lotes não esta mais sendo usado pela prefeitura de Sorocaba.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Consumo de Webservice com Harbour.
Vixe....
O manual deles está errado..... kkkkk
Por isso é difícil ajudar nessas coisas e acaba o interessado tendo que ir atrás.
Pode ser qualquer coisa....
Nesse caso, com tudo certo, tá errado.... kkkkk
Se imaginar que cada município é de um jeito, e cada prefeito pode alterar tudo, piorou....
É phoda... com PH maiúsculo...
O manual deles está errado..... kkkkk
Por isso é difícil ajudar nessas coisas e acaba o interessado tendo que ir atrás.
Pode ser qualquer coisa....
Nesse caso, com tudo certo, tá errado.... kkkkk
Se imaginar que cada município é de um jeito, e cada prefeito pode alterar tudo, piorou....
É phoda... com PH maiúsculo...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- André Corrêa
- Usuário Nível 2

- Mensagens: 81
- Registrado em: 03 Nov 2015 07:46
- Localização: Caraguatatuba/SP
Consumo de Webservice com Harbour.
Bom dia,
Ainda sobre webservice SOAP com Harbour, existe alguma alternativa nativa a MSXML2 e MSSOAP?
Andei pesquisando bastante e não consegui encontrar nenhum exemplo que não use essas dlls.
Preciso enviar um XML para um webservice, mas não posso utilizar nenhuma dll externa.
Tenho o endereço do WSDL, monto o XML a ser enviado, mas não sei como fazer o envio, pois os
exemplos dos manuais estão em .NET e depois de clonar o WSDL é gerada uma classe com todos os
métodos, mas o Harbour não tem essa opção (ou eu não conheço).
Existe alguma lib que não dependa de dll ou funções nativas, que possa usar para fazer a comunicação,
montar o header HTTP, envelopar o conteúdo, fazer o envio e capturar o retorno?
Obrigado,
Ainda sobre webservice SOAP com Harbour, existe alguma alternativa nativa a MSXML2 e MSSOAP?
Andei pesquisando bastante e não consegui encontrar nenhum exemplo que não use essas dlls.
Preciso enviar um XML para um webservice, mas não posso utilizar nenhuma dll externa.
Tenho o endereço do WSDL, monto o XML a ser enviado, mas não sei como fazer o envio, pois os
exemplos dos manuais estão em .NET e depois de clonar o WSDL é gerada uma classe com todos os
métodos, mas o Harbour não tem essa opção (ou eu não conheço).
Existe alguma lib que não dependa de dll ou funções nativas, que possa usar para fazer a comunicação,
montar o header HTTP, envelopar o conteúdo, fazer o envio e capturar o retorno?
Obrigado,
-- André Corrêa
"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Consumo de Webservice com Harbour.
Se não depender de DLL nem de função nativa, vai ser como? Outra linguagem de programação?Existe alguma lib que não dependa de dll ou funções nativas, que possa usar para fazer a comunicação,
Ou é uma coisa ou é outra.
Sim, são criadas funções pra serem usadas no NET.depois de clonar o WSDL é gerada uma classe com todos os
métodos, mas o Harbour não tem essa opção (ou eu não conheço).
Harbour não é NET, e não tem as bibliotecas do NET.
Apesar de dizerem ser nativa, não é. Seria o uso da LIBCURL, através da DLL dela, junto com OPENSSL.Ainda sobre webservice SOAP com Harbour, existe alguma alternativa nativa a MSXML2 e MSSOAP?
Pra mim trata-se apenas de trocar uma DLL por outra.
Seria bom se existisse isso mais automático, mas não existe.
Também não existe um padrão fixo, sempre existem diferenças pequenas ou grandes.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- André Corrêa
- Usuário Nível 2

- Mensagens: 81
- Registrado em: 03 Nov 2015 07:46
- Localização: Caraguatatuba/SP
Consumo de Webservice com Harbour.
Quintas,
Obrigado pelo retorno.
O que quis dizer é "Existe alguma lib ou função nativa, que não dependa de dll?"
simples, da qual eu apenas não tivesse conhecimento. Delphi também não é .NET e tem essa opção de importar o WSDL.
tenha sido criado por alguém.
Então, resumidamente, a forma mais simples ou direta seria usar a MSXML2 mesmo?
Obrigado,
Obrigado pelo retorno.
Me expressei mal no trecho acima.Existe alguma lib que não dependa de dll ou funções nativas, que possa usar para fazer a comunicação?
O que quis dizer é "Existe alguma lib ou função nativa, que não dependa de dll?"
Eu sei que Harbour não faz parte da plataforma .NET, mas como é algo bastante usado, achei que pudesse existir uma opção maisSim, são criadas funções pra serem usadas no NET.
Harbour não é NET, e não tem as bibliotecas do NET.
simples, da qual eu apenas não tivesse conhecimento. Delphi também não é .NET e tem essa opção de importar o WSDL.
Seria incrível se existisse. Eu não tenho o conhecimento necessário para fazê-lo, mas acho estranho que até o momento nãoSeria bom se existisse isso mais automático, mas não existe.
tenha sido criado por alguém.
Então, resumidamente, a forma mais simples ou direta seria usar a MSXML2 mesmo?
Obrigado,
-- André Corrêa
"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
- André Corrêa
- Usuário Nível 2

- Mensagens: 81
- Registrado em: 03 Nov 2015 07:46
- Localização: Caraguatatuba/SP
Consumo de Webservice com Harbour.
Boa tarde pessoal,
Alguém poderia me dar uma ajuda?
Eu estou testando a comunicação com um webservice, mas tenho algumas dúvidas
sobre como montar o envelope SOAP.
Na documentação que recebi consta apenas a chamada ao método que faz o envio,
em C#. Como o Harbour não tem a opção de importar o WSDL para gerar a classe e
chamar o método, tentei montar o envelope e enviar o XML seguindo alguns exemplos
que encontrei aqui no fórum, mas nenhum funcionou.
O WSDL é:
http://webservice.conciliadora.com.br/W ... singleWsdl.
O exemplo em C# é:
O código que estou testando é:
O retorno é "Estabelecimento não informado".
Alguém sabe dizer se tem como gerar o SOAP header e saber exatamente onde informar o
XML com os dados, apenas lendo a descrição contida no WSDL?
Alguém poderia me ajudar a montar o envelope SOAP e anexar o XML com os dados, por favor?
Obrigado,
Alguém poderia me dar uma ajuda?
Eu estou testando a comunicação com um webservice, mas tenho algumas dúvidas
sobre como montar o envelope SOAP.
Na documentação que recebi consta apenas a chamada ao método que faz o envio,
em C#. Como o Harbour não tem a opção de importar o WSDL para gerar a classe e
chamar o método, tentei montar o envelope e enviar o XML seguindo alguns exemplos
que encontrei aqui no fórum, mas nenhum funcionou.
O WSDL é:
http://webservice.conciliadora.com.br/W ... singleWsdl.
O exemplo em C# é:
Código: Selecionar todos
var vendaFile = File.OpenRead(txeArquivo.Text);
string Mensagem;
ErroArquivo[] Lista = null;
If (callWebService.WSEnviaArquivoVendaCliente(
Estabelecimento: txeRetConcEstabelecimento.Text,
Senha: txeRetConcSenha.Text,
FileName: Path.GetFileName(txeArquivo.Text),
Length: vendaFile.Length,
FileByteStream: vendaFile,
Mensagem: out Mensagem,
XMLErros: out Lista
) == 0)
{
//OK
}
else
{
//ERRO
}
Código: Selecionar todos
FUNCTION EnviarXml()
LOCAL cXml, cSoapAction, cWebservice, cOperation, cRetorno, cxlido
LOCAL oXML
cWebservice := "http://webservice.conciliadora.com.br/WSConciliadoraCliente/WSCACliente.svc?singleWsdl"
cSoapAction := "http://tempuri.org/IWSCACliente/WSEnviaArquivoVendaCliente"
cOperation := "WSEnviaArquivoVendaCliente"
*-
* cxlido:=HB_Memoread('C:\A\LXA13703.xml')
*--
cXml :=' <tns:Estabelecimento>132332943</tns:Estabelecimento>'+hb_eol()+;
' <tns:FileName>C:\A\LXA13703.xml</tns:FileName>'+hb_eol()+;
' <tns:Length>2.444</tns:Length>'+hb_eol()+;
' <tns:Senha>625337</tns:Senha>'+hb_eol()
cXml := SoapEnvelope( cXml, cOperation ) //
*--
MsgAlert(cXml)
oXML := TXMLDocument():New( cXml, HBXML_STYLE_NOESCAPE )
IF oXML:nError != HBXML_ERROR_NONE
MsgAlert( "xml com problema " + Str( oXML:nError ) )
ENDIF
*--
cRetorno := MicrosoftXmlSoapPost( cXml, cSoapAction, cWebservice )
*--
HB_MemoWrit('C:\A\retorno.xml',cRetorno)
MsgAlert(cRetorno)
RETURN Nil
*------------------------------------------------------
*------------------------------------------------------
FUNCTION MicrosoftXmlSoapPost( cXmlSoap, cSoapAction, cWebService )
LOCAL oServer, oDOMDoc, oError
LOCAL nCont
LOCAL cRetorno := "*ERRO*", cXmlRetorno := ""
oServer := CreateObject( "MSXML2.ServerXMLHTTP.5.0")
oServer:Open( "POST", cWebService, .F. )
oServer:SetRequestHeader( "SOAPAction", cSoapAction )
oServer:SetRequestHeader( "Content-Type", "text/xml; charset=utf-8" )
oDOMDoc = CREATEOBJECT("MSXML2.DOMDocument.5.0")
oDOMDoc:async = .F.
oDOMDoc:validateOnParse = .T.
oDOMDoc:resolveExternals := .F.
oDOMDoc:preserveWhiteSpace = .T.
oDOMDoc:LoadXML(cXmlSoap)
IF oDOMDoc:parseError:errorCode <> 0
MsgAlert('Erro: xML nao carregado')
RETURN Nil
ENDIF
TRY
oServer:send(oDOMDoc:xml)
CATCH oError
MsgAlert('Falha no envio do xML')
RETURN Nil
END
DO WHILE oServer:readyState <> 4
HB_milliseconds(500)
ENDDO
cRetorno := oServer:responseText
IF ValType( cRetorno ) == "C"
cXmlRetorno := cRetorno
ELSEIF cRetorno == NIL
cXmlRetorno := "*ERRO*"
ELSE
cXmlRetorno := ""
FOR nCont = 1 TO Len( cRetorno )
cXmlRetorno += Chr( cRetorno[ nCont ] )
NEXT
ENDIF
RETURN cXmlRetorno
*----------------------------------------------
*----------------------------------------------
FUNCTION SoapEnvelope( cXml, cOperation )
LOCAL cXmlEnvelope, cxlido
cXmlEnvelope:= '<?xml version="1.0" encoding="utf-8"?>'+hb_eol()+;
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://tempuri.org/">'+hb_eol()+;
' <soapenv:Header>'+hb_eol()+;
' <tns:'+cOperation+'>'+hb_eol()+;
' <tns:RemoteFileInfo>'+hb_eol()
cXmlEnvelope+= cXml
cXmlEnvelope+= ' </tns:RemoteFileInfo>'+hb_eol()+;
' </tns:'+cOperation+'>'+hb_eol()+;
' </soapenv:Header>'+hb_eol()+;
' <soapenv:Body/>'+hb_eol()+;
'</soapenv:Envelope>'+hb_eol()
HB_MemoWrit('C:\A\vai.xml',cXmlEnvelope)
RETURN cXmlEnvelope
*--------------------------------
*--------------------------------
FUNCTION XmlTag( cNome, cConteudo )
IF Empty( cConteudo )
RETURN "<" + cNome + " />"
ENDIF
RETURN "<" + cNome + ">" + cConteudo + "</" + cNome + ">"Alguém sabe dizer se tem como gerar o SOAP header e saber exatamente onde informar o
XML com os dados, apenas lendo a descrição contida no WSDL?
Alguém poderia me ajudar a montar o envelope SOAP e anexar o XML com os dados, por favor?
Obrigado,
-- André Corrêa
"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Consumo de Webservice com Harbour.
Olá André,
Sem entrar nas outras questões, primeiro você precisa criar o XML, que não está sendo criado. O que você você está criando é um arquivo de texto comum. Não está envelopado (não tem as tags de início e fim), e está usando caractere não suportado, a saber o ":".
Compile e rode esses exemplos, depois dê duplo clique sobre eles e verá que serão abertos. Para ver a diferença entre eles, abra com o bloco de notas por exemplo. Aconselho a usar como no exemplo Não Formatado:
Exemplo 1 (Formatado - com quebra de linhas):
Exemplo 2 (Não Formatado - sem quebra de linas):
Sem entrar nas outras questões, primeiro você precisa criar o XML, que não está sendo criado. O que você você está criando é um arquivo de texto comum. Não está envelopado (não tem as tags de início e fim), e está usando caractere não suportado, a saber o ":".
Compile e rode esses exemplos, depois dê duplo clique sobre eles e verá que serão abertos. Para ver a diferença entre eles, abra com o bloco de notas por exemplo. Aconselho a usar como no exemplo Não Formatado:
Exemplo 1 (Formatado - com quebra de linhas):
Código: Selecionar todos
cXml := '<begin>'+hb_eol()+;
'<tnsEstabelecimento>132332943</tnsEstabelecimento>'+hb_eol()+;
'<tnsFileName>C:\A\LXA13703.xml</tnsFileName>'+hb_eol()+;
'<tnsLength>2.444</tnsLength>'+hb_eol()+;
'<tnsSenha>625337</tnsSenha>'+hb_eol()+;
'</begin>'
Hb_MemoWrit( "xml1.xml", cxml )Código: Selecionar todos
cXml := '<begin>'+;
'<tnsEstabelecimento>132332943</tnsEstabelecimento>'+;
'<tnsFileName>C:\A\LXA13703.xml</tnsFileName>'+;
'<tnsLength>2.444</tnsLength>'+;
'<tnsSenha>625337</tnsSenha>'+;
'</begin>'
Hb_MemoWrit( "xml2.xml", cxml )Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
- André Corrêa
- Usuário Nível 2

- Mensagens: 81
- Registrado em: 03 Nov 2015 07:46
- Localização: Caraguatatuba/SP
Consumo de Webservice com Harbour.
Bom dia Jairo,
Segue o código corrigido. Agora o XML é gerado e aberto corretamente, mas não há resposta do webservice, nem
de erro, nem de sucesso. "oServer:responseText" volta vazio, mas não "NIL".
Código usado para o envio:
XML enviado:
Obrigado,
Segue o código corrigido. Agora o XML é gerado e aberto corretamente, mas não há resposta do webservice, nem
de erro, nem de sucesso. "oServer:responseText" volta vazio, mas não "NIL".
Código usado para o envio:
Código: Selecionar todos
FUNCTION EnviarXml()
LOCAL cXml, cSoapAction, cWebservice, cOperation, cRetorno, cxlido
LOCAL oXML
cWebservice := "http://webservice.conciliadora.com.br/WSConciliadoraCliente/WSCACliente.svc?singleWsdl"
cSoapAction := "http://tempuri.org/IWSCACliente/WSEnviaArquivoVendaCliente"
cOperation := "WSEnviaArquivoVendaCliente"
cXml :='<Estabelecimento>9999999999</Estabelecimento>'+;
'<FileName>C:\A\LXA13703.xml</FileName>'+;
'<Length>2.444</Length>'+;
'<Senha>159753</Senha>'
cXml := SoapEnvelope( cXml, cOperation ) //
*--
oXML := TXMLDocument():New( cXml, HBXML_STYLE_NOESCAPE )
IF oXML:nError != HBXML_ERROR_NONE
MsgAlert( "xml com problema " + Str( oXML:nError ) )
ENDIF
*--
cRetorno := MicrosoftXmlSoapPost( cXml, cSoapAction, cWebservice )
*--
HB_MemoWrit('C:\A\retorno.xml',cRetorno)
MsgAlert(cRetorno)
RETURN Nil
*------------------------------------------------------
FUNCTION MicrosoftXmlSoapPost( cXmlSoap, cSoapAction, cWebService )
LOCAL oServer, oDOMDoc, oError
LOCAL nCont
LOCAL cRetorno := "*ERRO*", cXmlRetorno := ""
oServer := CreateObject( "MSXML2.ServerXMLHTTP")
oServer:Open( "POST", cWebService, .F. )
oServer:SetRequestHeader( "SOAPAction", cSoapAction )
oServer:SetRequestHeader( "Content-Type", "text/xml; charset=utf-8" )
oDOMDoc = CREATEOBJECT("MSXML2.DOMDocument")
oDOMDoc:async = .F.
oDOMDoc:validateOnParse = .T.
oDOMDoc:resolveExternals := .F.
oDOMDoc:preserveWhiteSpace = .T.
oDOMDoc:LoadXML(cXmlSoap)
IF oDOMDoc:parseError:errorCode <> 0
MsgAlert('Erro: xML nao carregado'+CRLF+'Erro: '+ToString(oDOMDoc:parseError:Reason)+' Posição: '+ToString(oDOMDoc:parseError:linepos))
RETURN Nil
ENDIF
TRY
oServer:send(oDOMDoc:xml)
CATCH oError
MsgAlert('Falha no envio do xML')
RETURN Nil
END
DO WHILE oServer:readyState <> 4
HB_milliseconds(500)
ENDDO
cRetorno := oServer:responseText
IF ValType( cRetorno ) == "C"
cXmlRetorno := cRetorno
ELSEIF cRetorno == NIL
cXmlRetorno := "*ERRO*"
ELSE
cXmlRetorno := ""
FOR nCont = 1 TO Len( cRetorno )
cXmlRetorno += Chr( cRetorno[ nCont ] )
NEXT
ENDIF
RETURN cXmlRetorno
*----------------------------------------------
*----------------------------------------------
FUNCTION SoapEnvelope( cXml, cOperation )
LOCAL cXmlEnvelope, cxlido
cxlido:=HB_Memoread('C:\A\LXA13703.xml')
cXmlEnvelope:= '<?xml version="1.0" encoding="utf-8"?>'+;
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">'+;
'<soapenv:Header>'+;
cXml+;
'</soapenv:Header>'+;
'<soapenv:Body>'+;
cxlido+;
'</soapenv:Body>'+;
'</soapenv:Envelope>'
HB_MemoWrit('C:\A\vai.xml',cXmlEnvelope)
RETURN cXmlEnvelope
*--------------------------------
*--------------------------------
FUNCTION XmlTag( cNome, cConteudo )
IF Empty( cConteudo )
RETURN "<" + cNome + " />"
ENDIF
RETURN "<" + cNome + ">" + cConteudo + "</" + cNome + ">"Código: Selecionar todos
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"><soapenv:Header><Estabelecimento>9999999999</Estabelecimento><FileName>C:\A\LXA13703.xml</FileName><Length>2.444</Length><Senha>159753</Senha></soapenv:Header><soapenv:Body><registros><cabecalho><Estabelecimento>999999999</Estabelecimento><DataInicial>27/01/17</DataInicial><DataFinal>27/01/17</DataFinal><Versao>3</Versao><Sistema/></cabecalho><registro><CodigoTipoProduto>10</CodigoTipoProduto><DescricaoTipoProduto>Mastercard Credito a Vista</DescricaoTipoProduto><CodigoAutorizacao>456546</CodigoAutorizacao><IdentificadorPagamento>114956</IdentificadorPagamento><DataVenda>27/01/17</DataVenda><DataVencimento>28/02/17</DataVencimento><ValorVendaParcela>200,00</ValorVendaParcela><ValorLiquidoParcela/><TotalVenda>438,00</TotalVenda><Taxa/><Parcela>0</Parcela><TotalDeParcelas>0</TotalDeParcelas><NSU/><TID/><MeioCaptura>1</MeioCaptura><Operadora>2</Operadora><Modalidade>1</Modalidade></registro><registro><CodigoTipoProduto>11</CodigoTipoProduto><DescricaoTipoProduto>Mastercard Maestro Debito</DescricaoTipoProduto><CodigoAutorizacao>456151</CodigoAutorizacao><IdentificadorPagamento>114956</IdentificadorPagamento><DataVenda>27/01/17</DataVenda><DataVencimento>28/01/17</DataVencimento><ValorVendaParcela>238,00</ValorVendaParcela><ValorLiquidoParcela/><TotalVenda>438,00</TotalVenda><Taxa/><Parcela>0</Parcela><TotalDeParcelas>0</TotalDeParcelas><NSU/><TID/><MeioCaptura>1</MeioCaptura><Operadora>2</Operadora><Modalidade>0</Modalidade></registro><registro><CodigoTipoProduto>10</CodigoTipoProduto><DescricaoTipoProduto>Mastercard Credito a Vista</DescricaoTipoProduto><CodigoAutorizacao>549137</CodigoAutorizacao><IdentificadorPagamento>114960</IdentificadorPagamento><DataVenda>27/01/17</DataVenda><DataVencimento>28/02/17</DataVencimento><ValorVendaParcela>200,00</ValorVendaParcela><ValorLiquidoParcela/><TotalVenda>438,00</TotalVenda><Taxa/><Parcela>0</Parcela><TotalDeParcelas>0</TotalDeParcelas><NSU/><TID/><MeioCaptura>1</MeioCaptura><Operadora>2</Operadora><Modalidade>1</Modalidade></registro><registro><CodigoTipoProduto>11</CodigoTipoProduto><DescricaoTipoProduto>Mastercard Maestro Debito</DescricaoTipoProduto><CodigoAutorizacao>698410</CodigoAutorizacao><IdentificadorPagamento>114960</IdentificadorPagamento><DataVenda>27/01/17</DataVenda><DataVencimento>28/01/17</DataVencimento><ValorVendaParcela>238,00</ValorVendaParcela><ValorLiquidoParcela/><TotalVenda>438,00</TotalVenda><Taxa/><Parcela>0</Parcela><TotalDeParcelas>0</TotalDeParcelas><NSU/><TID/><MeioCaptura>1</MeioCaptura><Operadora>2</Operadora><Modalidade>0</Modalidade></registro></registros></soapenv:Body></soapenv:Envelope>-- André Corrêa
"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Consumo de Webservice com Harbour.
Boa tarde André,
Infelizmente falei do XM porque vi que estava com problemas, mas não sei dizer nada sobre o método SOAP. Vamos aguardar algum colega que possa ajudar nisso.
Infelizmente falei do XM porque vi que estava com problemas, mas não sei dizer nada sobre o método SOAP. Vamos aguardar algum colega que possa ajudar nisso.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
