Consumir Webservice ( SOAP )
Moderador: Moderadores
Consumir Webservice ( SOAP )
Preciso fazer uma implementação, busquei informações sobre o que é :
WebService
A comunicação SOAP é basicamente simples: é enviado o XML SOAP para um determinado endereço, e é recebido um XML de resposta.
O webservice pode ou não exigir um certificado.
Também pode ser necessário informar a SOAP Action, que é a ação a ser tomada pelo webservice.
Para comunicação SOAP pode ser usado o MSXML, que é uma biblioteca fornecida pela Microsoft.
Informações sobre o XML do documento, e o XML do lote podem ser obtidas no manual do contribuinte.
Os schemmas fornecidos pela Fazenda também ajudam, caso tenha um interpretador de schemas.
Informações sobre o XML do SOAP
Ao acessar uma página de webservice, pelo navegador, o próprio webservice fornece exemplos de XML SOAP.
Por esse meio também pode ser obtido o nome da Soap Action
Porém, pesquisando pela internet e aqui no fórum inclusive, não vi nada claro o suficiente para entender quais arquivos de cabeçalho (ch) e libs são necessários para fazer a comunicação usando Harbour ou xHarbour. Infelizmente a documentação é muito pobre nesse sentido, o que faz os programadores perderem muito tempo em tentativa e erro, pois vemos códigos em outras linguagens, como Java e C#, e não conseguimos achar classes, funções e comandos equivalentes, e quando aparece um fragmento de código fonte usando uma classe, não temos a documentação dela.
Qualquer ajuda é bem vinda.
Obrigado
WebService
A comunicação SOAP é basicamente simples: é enviado o XML SOAP para um determinado endereço, e é recebido um XML de resposta.
O webservice pode ou não exigir um certificado.
Também pode ser necessário informar a SOAP Action, que é a ação a ser tomada pelo webservice.
Para comunicação SOAP pode ser usado o MSXML, que é uma biblioteca fornecida pela Microsoft.
Informações sobre o XML do documento, e o XML do lote podem ser obtidas no manual do contribuinte.
Os schemmas fornecidos pela Fazenda também ajudam, caso tenha um interpretador de schemas.
Informações sobre o XML do SOAP
Ao acessar uma página de webservice, pelo navegador, o próprio webservice fornece exemplos de XML SOAP.
Por esse meio também pode ser obtido o nome da Soap Action
Porém, pesquisando pela internet e aqui no fórum inclusive, não vi nada claro o suficiente para entender quais arquivos de cabeçalho (ch) e libs são necessários para fazer a comunicação usando Harbour ou xHarbour. Infelizmente a documentação é muito pobre nesse sentido, o que faz os programadores perderem muito tempo em tentativa e erro, pois vemos códigos em outras linguagens, como Java e C#, e não conseguimos achar classes, funções e comandos equivalentes, e quando aparece um fragmento de código fonte usando uma classe, não temos a documentação dela.
Qualquer ajuda é bem vinda.
Obrigado
Marcelo Neves
https://produto.mercadolivre.com.br/MLB ... 0067609615
whatsapp (41) 99786-3995
http://harbourdeveloper.blogspot.com
marcelo.souza.das.neves@gmail.com
https://produto.mercadolivre.com.br/MLB ... 0067609615
whatsapp (41) 99786-3995
http://harbourdeveloper.blogspot.com
marcelo.souza.das.neves@gmail.com
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Consumir Webservice ( SOAP )
Amiguinho,
O seguinte trecho abaixo foi extraido de um código maior, mas ele exemplifica quais objeto são acionados para compor a comunicação:
No meu caso uso Harbour tradicional versão 0.45 e a biblioteca que é usada é a HBOLE.LIB. No caso acima, por se tratar de uma aplicação usando Fivewin 4 Harbour, aciono os objetos do S.O. usando a classe TOLEAuto() mas é possivel fazer o mesmo com win_OleCreate ou CreateObject.
O seguinte trecho abaixo foi extraido de um código maior, mas ele exemplifica quais objeto são acionados para compor a comunicação:
Código: Selecionar todos
cWebService := "http://webservices.sefaz.rs.gov.br/CadastroContribuintesRSGeral_XML.asp"
txtCPF := "00000000000"
txtSenha := "123456"
txtIE := "0000000000"
txtCNPJ := "00000000000000"
txtCPFtitular := "00000000000"
// Monta o documento XML conforme a estrutura definida para este Web Service
sConteudo := []
sConteudo := sConteudo + [<PARAMETROS>]
sConteudo := sConteudo + [ <CPF>] + Right("00000000000" & Trim(txtCPF), 11) + [</CPF>]
sConteudo := sConteudo + [ <SENHA>] + txtSenha + [</SENHA>]
sConteudo := sConteudo + [ <IE>] + Right("0000000000" + Trim(txtIE), 10) + [</IE>]
sConteudo := sConteudo + [ <CNPJ>] + Right("00000000000000" + Trim(txtCNPJ), 14) + [</CNPJ>]
sConteudo := sConteudo + [ <CPFTITULAR>] + Right("00000000000" + Trim(txtCPFtitular), 11) + [</CPFTITULAR>]
sConteudo := sConteudo + [</PARAMETROS>]
// Ativa objeto DOM
objXMLDOM := TOLEAUTO():New( "Microsoft.XMLDOM" )
// Converte para um documento XML no padrão DOM
objXMLDOM:async := .f.
objXMLDOM:loadXML( sConteudo )
objXMLHTTP := TOleAuto():New( "MSXML2.ServerXMLHTTP" )
// Aponta para o Web Service
objXMLHTTP:open( "POST", cWebService, .F. )
// Envia o documento XML para o Web Service
objXMLHTTP:send( objXMLDOM:xml )
// Aqui é carregado o retorno do Web Service.
sRetorno := objXMLHTTP:responseXML:xml
objXMLDOM:async := .f.
cResponseText := objXMLDOM:loadXML( sRetorno )
// Apresenta a resposta
MemoEdit( cResponseText )
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Consumir Webservice ( SOAP )
Voce diz:
Entendi o exemplo, mas para clipper puro tem alguma outra forma de fazer ? Porque ler CreateObject.
Rochinha escreveu:No meu caso uso Harbour tradicional versão 0.45 e a biblioteca que é usada é a HBOLE.LIB. No caso acima, por se tratar de uma aplicação usando Fivewin 4 Harbour, aciono os objetos do S.O. usando a classe TOLEAuto() mas é possivel fazer o mesmo com win_OleCreate ou CreateObject.
Entendi o exemplo, mas para clipper puro tem alguma outra forma de fazer ? Porque ler CreateObject.
Editado pela última vez por Toledo em 16 Ago 2014 13:52, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ quote ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r0
Razão: Mensagem editada para colocar a tag [ quote ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r0
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Consumir Webservice ( SOAP )
Amiguinho,
Em Clipper puro voce poderá:
- criar o .XML e salva-lo como se estivesse salvando um arquivo .TXT, Usando um simples MemoWrit()
- enviar o arquivo, acionando o IExplore.exe via commandline, com start iexplorer http://...
Mas o problema reside em obter a resposta.
Agora veja bem:
Voce postou uma duvida solicitando ajuda na sessão Harbour, então, as respostas se darão em/para Harbour.
Para solucionar sua duvida em Clipper, poste sua duvida na sessão Clipper. Pois para Harbour fica mais fácil trabalhar estes resultados.
Em Clipper puro voce poderá:
- criar o .XML e salva-lo como se estivesse salvando um arquivo .TXT, Usando um simples MemoWrit()
- enviar o arquivo, acionando o IExplore.exe via commandline, com start iexplorer http://...
Mas o problema reside em obter a resposta.
Agora veja bem:
Voce postou uma duvida solicitando ajuda na sessão Harbour, então, as respostas se darão em/para Harbour.
Para solucionar sua duvida em Clipper, poste sua duvida na sessão Clipper. Pois para Harbour fica mais fácil trabalhar estes resultados.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Consumir Webservice ( SOAP )
Me desculpe, obrigado.
Estou tentando fazer um programa externo em Harbour, para chamá-lo pelo sistema, mas sou cru de tudo nisso. Estou tentando usar o exemplo acima, a resposta está em branco, mas vou tentar aqui. Vou tentar usar SOAP. Obrigado pela ajuda.
Estou tentando fazer um programa externo em Harbour, para chamá-lo pelo sistema, mas sou cru de tudo nisso. Estou tentando usar o exemplo acima, a resposta está em branco, mas vou tentar aqui. Vou tentar usar SOAP. Obrigado pela ajuda.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Consumir Webservice ( SOAP )
Amiguinho,
Ai sim, desta forma você poderá criar uma espécie de serviço, apesar de que para ser um serviço o mesmo deveria possuir alguns recursos comandados pelo windows via serviços.
Veja minha resposta no tópico Re: Consumir Web Services com o xHarbour.
Nele exemplifico a criação de um .XML, envio para um WerService e captura do retorno.
Analise e veja o que voce pode tirar disto.
Ai sim, desta forma você poderá criar uma espécie de serviço, apesar de que para ser um serviço o mesmo deveria possuir alguns recursos comandados pelo windows via serviços.
Veja minha resposta no tópico Re: Consumir Web Services com o xHarbour.
Nele exemplifico a criação de um .XML, envio para um WerService e captura do retorno.
Analise e veja o que voce pode tirar disto.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- Alexandre Silva
- Usuário Nível 3

- Mensagens: 376
- Registrado em: 26 Mar 2007 00:16
- Localização: Itapema - SC
Consumir Webservice ( SOAP )
Entao senhores..
Esse é meu calcanhar de aquiles..
Vi e testei esses 2 exemplos, mas nao obtive sucesso..
O que preciso é mandar um xml e pegar o retorno, aparentemente simples..
Adaptei os dois prg em anexo
*Nao consegui colocar aqui com o CODE
Ambos retornaram NIL
eu sei que nao tem o login correto ai..
mas eu só quero é ver o xml de retorno
http://generali.averbweb.net.br/documentacao
Esse é meu calcanhar de aquiles..
Vi e testei esses 2 exemplos, mas nao obtive sucesso..
O que preciso é mandar um xml e pegar o retorno, aparentemente simples..
Adaptei os dois prg em anexo
*Nao consegui colocar aqui com o CODE
Ambos retornaram NIL
eu sei que nao tem o login correto ai..
mas eu só quero é ver o xml de retorno
http://generali.averbweb.net.br/documentacao
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Consumir Webservice ( SOAP )
Amiguinho,
Fiz algumas correções e formatei o código para que voce entenda com e quando usar cada motor.
Voce só deve acionar o Microsoft.XMLDOM se for manipular um arquivo .XML, ou seja, incluir nós, tags, valores e obter trechos e valores.
O Microsoft.ServerXMLHTTP serve para a comunicação básica de arquivos texto, XML, etc.
Fiz algumas correções e formatei o código para que voce entenda com e quando usar cada motor.
Voce só deve acionar o Microsoft.XMLDOM se for manipular um arquivo .XML, ou seja, incluir nós, tags, valores e obter trechos e valores.
O Microsoft.ServerXMLHTTP serve para a comunicação básica de arquivos texto, XML, etc.
Código: Selecionar todos
*--
* para compilar hbmk2 web -lxhb -lhbwin -lhbct -lhbwin -lhbtip -es2 -b
*---
function main()
local cResponseText, objXMLHTTP
local sconteudo := ''
cWebService := "http://generali.averbweb.net.br/Webservice/soapserver"
sconteudo := faz_xml()
objXMLHTTP := TOleAuto():New( "MSXML2.ServerXMLHTTP" )
// Aponta para o Web Service
objXMLHTTP:open( "POST", cWebService, .F. )
// Envia o documento XML para o Web Service
objXMLHTTP:send( sconteudo )
// Aqui e carregado o retorno do Web Service.
cResponseText := objXMLHTTP:responseText // XML:xml
// Apresenta a resposta
MemoEdit( cResponseText )
// Ativa objeto DOM
oXMLDoc := TOLEAUTO():New("Microsoft.XMLDOM")
root := oXMLDoc:documentElement
// Habilita leitura completa do documento
oXMLDoc:async := .f.
// Verifica o sucesso restorno
lSuccess := oXMLDoc:loadXML( cResponseText )
?oXMLDoc:XML
RespText := ""
If lSuccess
// Primeira forma de pegar um conteudo
cResposta := oXMLDoc:getElementsByTagName( "login" ):Item(0):Text
? cResposta
// Segunda forma de pegar um conteudo
FaulStringDetails := oXMLDoc:selectNodes("//login")
cResposta := FaulStringDetails:Item(0):Text
? cResposta
// Trecho para ler o conteudo de um no com varias
//x := oXMLDoc:getElementsByTagName( "sacado" )
//? oXMLDoc:getElementsByTagName( "nome" ):Item(0):Text , ;
// oXMLDoc:getElementsByTagName( "email" ):Item(0):Text
// Exemplo para ler sequencialmente um conjunto identico de nos e tags
//x := oXMLDoc:getElementsByTagName( "cobranca" )
//for i = 1 to x:length
// ? oXMLDoc:getElementsByTagName( "nome" ):Item(i-1):Text , ;
// oXMLDoc:getElementsByTagName( "email" ):Item(i-1):Text , ;
// oXMLDoc:getElementsByTagName( "status" ):Item(i-1):Text
//next
EndIf
return .t.
*--------------------
function faz_xml()
sconteudo:='<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:xmethods-delayed-quotes">'
sconteudo+=' <soapenv:Header/>'
sconteudo+=' <soapenv:Body>'
sconteudo+=' <urn:adicionarAverbacao soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">'
sconteudo+=' <args>'
sconteudo+=' <usuario>SEU_LOGIN</usuario>'
sconteudo+=' <senha>SUA_SENHA</senha>'
sconteudo+=' <emit_nome>EMITENTE</emit_nome>'
sconteudo+=' <emit_cnpj>53.561.748/0001-20</emit_cnpj>'
sconteudo+=' <emit_cidade>Cotia</emit_cidade>'
sconteudo+=' <emit_uf>SP</emit_uf>'
sconteudo+=' <tipo_documento>CTE</tipo_documento>'
sconteudo+=' <num_documento>1</num_documento>'
sconteudo+=' <serie_documento>1</serie_documento>'
sconteudo+=' <data_emissao>27/09/2013</data_emissao>'
sconteudo+=' <tipo_mercadoria>ARROZ</tipo_mercadoria>'
sconteudo+=' <tipo_embarque>RODOVIARIO</tipo_embarque>'
sconteudo+=' <valor_mercadoria>1.200,00</valor_mercadoria>'
sconteudo+=' <placa>AAA1234</placa>'
sconteudo+=' <remet_nome>EMITENTE</remet_nome>'
sconteudo+=' <remet_cnpj>53.561.748/0001-20</remet_cnpj>'
sconteudo+=' <remet_cidade>Cotia</remet_cidade>'
sconteudo+=' <remet_uf>SP</remet_uf>'
sconteudo+=' <dest_nome>EMITENTE</dest_nome>'
sconteudo+=' <dest_cnpj>53.561.748/0001-20</dest_cnpj>'
sconteudo+=' <dest_cidade>Cotia</dest_cidade>'
sconteudo+=' <dest_uf>SP</dest_uf>'
sconteudo+=' <consig_nome>CONSIGNATÁRIO</consig_nome>'
sconteudo+=' <consig_cnpj>53.561.748/0001-20</consig_cnpj>'
sconteudo+=' <consig_cidade>Cotia</consig_cidade>'
sconteudo+=' <consig_uf>SP</consig_uf>'
sconteudo+=' </args>'
sconteudo+=' </urn:adicionarAverbacao>'
sconteudo+=' </soapenv:Body>'
sconteudo+='</soapenv:Envelope>'
return sconteudo
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
- Alexandre Silva
- Usuário Nível 3

- Mensagens: 376
- Registrado em: 26 Mar 2007 00:16
- Localização: Itapema - SC
Consumir Webservice ( SOAP )
Obrigado, já comecou a ter retorno..
mas acontece o seguinte
1-essa lina
cResposta := oXMLDoc:getElementsByTagName( "login" ):Item(0):Text
dá erro: NO EXPORTED METHOD : TEXT
O que falta ?
2=Neste XML de retorno, o que significam esses erros ? Já coloquei o Login e usuario..
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Bad Request</faultstring>
mas acontece o seguinte
1-essa lina
cResposta := oXMLDoc:getElementsByTagName( "login" ):Item(0):Text
dá erro: NO EXPORTED METHOD : TEXT
O que falta ?
2=Neste XML de retorno, o que significam esses erros ? Já coloquei o Login e usuario..
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Bad Request</faultstring>
Código: Selecionar todos
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Bad Request</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Consumir Webservice ( SOAP )
Que eu saiba não há conversão, o DOM é apenas um "testador" de XML.// Ativa objeto DOM
objXMLDOM := TOLEAUTO():New( "Microsoft.XMLDOM" )
// Converte para um documento XML no padrão DOM
objXMLDOM:async := .f.
objXMLDOM:loadXML( sConteudo )
...
objXMLHTTP:send( objXMLDOM:xml )
Na rotina acima apenas carrega o XML no objeto, e depois pega o xml de volta.
Evita complicação se trocar isso por
Código: Selecionar todos
objXmlHTTP:Send( sConteudo )
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/
- Alexandre Silva
- Usuário Nível 3

- Mensagens: 376
- Registrado em: 26 Mar 2007 00:16
- Localização: Itapema - SC
Consumir Webservice ( SOAP )
Desculpem...
Eu tirei essas duas linhas..
objXMLDOM:async := .f.
objXMLDOM:loadXML( sConteudo )
1=continuou recebendo o mesmo xml de retorno que nao sei interpretar o erro..
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Bad Request</faultstring>
<SOAP-ENV:Fault>
2=e o camando
cResposta := oXMLDoc:getElementsByTagName( "login" ):Item(0):Text
dá erro: NO EXPORTED METHOD : TEXT
3= Resposta do suporte da seguradora
O xml está correto, mas eu espero receber um array em "adicionarAverbacao",
não uma string. No seu envio não há nada como 'xsi:type="xsd:string"'
Entao como mando o array ??
Eu tirei essas duas linhas..
objXMLDOM:async := .f.
objXMLDOM:loadXML( sConteudo )
1=continuou recebendo o mesmo xml de retorno que nao sei interpretar o erro..
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Bad Request</faultstring>
<SOAP-ENV:Fault>
2=e o camando
cResposta := oXMLDoc:getElementsByTagName( "login" ):Item(0):Text
dá erro: NO EXPORTED METHOD : TEXT
3= Resposta do suporte da seguradora
O xml está correto, mas eu espero receber um array em "adicionarAverbacao",
não uma string. No seu envio não há nada como 'xsi:type="xsd:string"'
Entao como mando o array ??
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
- Alexandre Silva
- Usuário Nível 3

- Mensagens: 376
- Registrado em: 26 Mar 2007 00:16
- Localização: Itapema - SC
Consumir Webservice ( SOAP )
Entao pessoal ...por favor me ajudem.. estou ha duas semanas ..
e nao consigo usar essa ferramenta...
será que tem outra ? ou falta algum parametro.. ?
vejam anteriormente o erro que retorna..
e nao consigo usar essa ferramenta...
será que tem outra ? ou falta algum parametro.. ?
vejam anteriormente o erro que retorna..
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Consumir Webservice ( SOAP )
Boa tarde! fiz uma projeto para apas 2014 que fazia a validação de dados através de Webservice deu um pouco de trabalho mais funcionou legal, não fiz uso do certificado, segue parte do código caso ajude fico feliz.
Frazato
Frazato
Código: Selecionar todos
//------------------------------------------------
Static Function PegaRetorno_DMCARD()
LOCAL aRetorno:={} , cOk := .t.
//Local url := 'http://www.dmcardweb.com.br/siscred/servicoura_teste/serviceura.asmx?wsdl&tag='+strTran(Time(),":","")
Local Url := 'http://www.dmcardweb.com.br/siscred/WebservicoApas/service.asmx?wsdl'
? "Iniciando....Comunicando com o WebService..."+Time()
//Alerta(url)
xmldom = CREATEOBJECT("MSXML2.DOMDocument")
xmldom:async = .T.
xmldom:validateOnParse = .T.
xmldom:resolveExternals := .T.
xmldom:preserveWhiteSpace = .T.
xmldoc = CREATEOBJECT("MSXML2.XMLHTTP")
xmldoc:open("POST", url, .f.)
//xmldoc:SetRequestHeader( "Host" , "www.dmcardweb.com.br" )
xmldoc:SetRequestHeader( "Host" , "www.dmcardweb.com.br" )
xmldoc:SetRequestHeader( "Content-Type" , "text/xml; charset=utf-8" )
//xmldoc:SetRequestHeader( "SOAPAction" , "http://www.dmcardweb.com.br/siscred/servicoURA.asmx/Consulta" )
xmldoc:SetRequestHeader( "SOAPAction" , "http://www.comunix.net/servicos.asmx/Pdv_Cosulta" )
//-- Montando o Xml pra consulta
Texto := DadosDM()
//Alert(Texto)
xmldom:LoadXML(Texto)
IF xmldom:parseError:errorCode = 0
//? "XML Carregado"
ELSE
cErrorMsg = "Não foi possível carregar o documento pois ele não corresponde ao seu Schema"
cErrorMsg += cErrorMsg + " Linha: " + STR(xmldom:parseError:line) + cCRLF
cErrorMsg += cErrorMsg + " Caractere na linha: " + STR(xmldom:parseError:linepos) + cCRLF
cErrorMsg += cErrorMsg + " Causa do erro: " + xmldom:parseError:reason + cCRLF
cErrorMsg += "code: "+STR(xmldom:parseError:errorCode)
Alerta(cErrorMsg)
ENDIF
xmldoc:send(xmldom:xml)
//? "Comunicando com o WebService..."+Time()
DO WHILE xmldoc:readyState <> 4
MILLISEC(50)
ENDDO
Linha :=xmldoc:responseText
Linha2:=xmldoc:responseXML:xml
If !Empty(Linha2)
//? "OK-Comunicando com o WebService..."+Time()
oXMLRetorno := TOLEAUTO():New("Microsoft.XMLDOM")
lSuccess := oXMLRetorno:loadXML( Linha2 )
If lSuccess
//Alerta(Linha2)
cMsgRetorno:=oXMLRetorno:getElementsByTagName( "Pdv_CosultaResult" ):item(0):Text
DM_Nome_Cliente:=oXMLRetorno:getElementsByTagName( "Nome" ):item(0):Text
DM_Aniversario :=oXMLRetorno:getElementsByTagName( "Aniversario" ):item(0):Text
DM_Ponto_Sou :=oXMLRetorno:getElementsByTagName( "Pontos" ):item(0):Text
DM_UltimaCompra:= ""//oXMLRetorno:getElementsByTagName( "Data_Ultima_Consulta" ):item(0):Text
DM_MSG_Sou :=oXMLRetorno:getElementsByTagName( "Mensagem" ):item(0):Text
DM_MSG_Sou_limite:=oXMLRetorno:getElementsByTagName( "Limite_Aprovado" ):item(0):Text
DM_MSG_NIVER :=oXMLRetorno:getElementsByTagName( "Aniversario" ):item(0):Text
DM_MSG_Sou := Alltrim(Substr(DM_MSG_Sou,1,535))
DM_Ponto_Sou := Val(__PegaPonto(DM_Ponto_Sou))
//--- Granvando Log de Retorno Analise
// Pasta := "Retorno_DM"
GravaLog_WEBDM(Linha2)
*If !Empty(DM_Nome_Cliente)
* If !Empty(DM_MSG_Sou) // DM_MSG_Sou_limite
* If Alltrim(Hb_AnsiToOem(DM_MSG_Sou))==Hb_AnsiToOem("Você tem cartão pré-aprovado")
* *Alerta(Hb_AnsiToOem(DM_MSG_Sou)+chr(10)+;
* * Hb_AnsiToOem("Você tem cartão pré-aprovado"))
*
* //Alerta("ClienteSou.wav")
* C_PLAYSOUND("ClienteSou.wav") // Funwin.prg
* //C_PLAYSOUND("Sons_wav\Boatarde.wav") // Funwin.prg
*
* Endif
* Endif
*
* If !Empty(DM_MSG_NIVER)
* C_PLAYSOUND("Sons_wav\Parabens.wav") // Funwin.prg
* Endif
* Else
* DM_Nome_Cliente := ""
* cOk := .f.
* Endif
Else
DM_Nome_Cliente := ""
cOk := .f.
Endif
Endif
*Alert("Linha Text"+Linha)
*Alert("Linha2 XML"+Linha2)
RETURN cOk
//------------------------------------------------------
Static Function DadosDM()
Local cCodEstab := "17"//63719 // Codigo Estabelecimento Nr DM La Villa
Local cNumero := Alltrim(mCliente)
// Monta o documento XML conforme a estrutura definida para este Web Service
*POST /siscred/WebservicoApas/service.asmx HTTP/1.1
*Host: www.dmcardweb.com.br
*Content-Type: text/xml; charset=utf-8
*Content-Length: length
*SOAPAction: "http://www.comunix.net/servicos.asmx/Pdv_Cosulta"
sConteudo := ""
sConteudo += [<?xml version="1.0" encoding="utf-8"?>]
sConteudo += [<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">]
sConteudo += [<soap:Body>]
sConteudo += [<Pdv_Cosulta xmlns="http://www.comunix.net/servicos.asmx">]
sConteudo += [<Numero_CPF>]+cNumero+[</Numero_CPF>]
sConteudo += [<Codigo_Estabelecimento>]+cCodEstab+[</Codigo_Estabelecimento>]
sConteudo += [</Pdv_Cosulta>]
sConteudo += [</soap:Body>]
sConteudo += [</soap:Envelope>]
Return (sConteudo)
- Alexandre Silva
- Usuário Nível 3

- Mensagens: 376
- Registrado em: 26 Mar 2007 00:16
- Localização: Itapema - SC
Consumir Webservice ( SOAP )
Obrigado..
Consegui ajustar enviar e obter retorno...
fiz ajustes no modelo que tinha postado inicialmente aqui.
Consegui ajustar enviar e obter retorno...
fiz ajustes no modelo que tinha postado inicialmente aqui.
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
- Alexandre Silva
- Usuário Nível 3

- Mensagens: 376
- Registrado em: 26 Mar 2007 00:16
- Localização: Itapema - SC
Consumir Webservice ( SOAP )
Sobre SOAP ainda
Agora estou fazendo testes com outra seguradora...
mesma rotina.. se eu mando o xml por e-mail, conseguem processar..
se eu faço pela rotina do Harbour.. estou recebendo esse retorno..
Operation '' is not defined in the WSDL for this service
O suporte da Seguradora me retornou":
O erro apresentado acima refere-se ao segmento "SOAP-ENV:Fault", ou seja, uma falta, ou exceção
do protocolo Soap, não do webserver. A descrição "Operation '' is not defined in the WSDL for this service"
parece estar sendo originada do componente que está utilizando para consumir o serviço.
O que falta nessa ferramenta do harbour ??
Agora estou fazendo testes com outra seguradora...
mesma rotina.. se eu mando o xml por e-mail, conseguem processar..
se eu faço pela rotina do Harbour.. estou recebendo esse retorno..
Operation '' is not defined in the WSDL for this service
O suporte da Seguradora me retornou":
O erro apresentado acima refere-se ao segmento "SOAP-ENV:Fault", ou seja, uma falta, ou exceção
do protocolo Soap, não do webserver. A descrição "Operation '' is not defined in the WSDL for this service"
parece estar sendo originada do componente que está utilizando para consumir o serviço.
O que falta nessa ferramenta do harbour ??
Código: Selecionar todos
cWebService := "http://homologacao.averba.com.br/webserver/index.soap"
varqx:='xml.xml' // xml de um cte que vai..
sconteudo:=memoRead(varqx)
objXMLHTTP:=TOleAuto():New( "MSXML2.ServerXMLHTTP" )
objXMLHTTP:open( "POST", cWebService, .F. ) // Aponta para o Web Service
objXMLHTTP:send( sconteudo ) // Envia o documento XML para o Web Service
cResponseText := objXMLHTTP:responseText // XML:xml // Aqui e carregado o retorno do Web Service.
oXMLDoc := TOLEAUTO():New("Microsoft.XMLDOM") // Ativa objeto DOM
root := oXMLDoc:documentElement
oXMLDoc:async := .f. // Habilita leitura completa do documento
lSuccess := oXMLDoc:loadXML( cResponseText ) // Verifica o sucesso retorno
If lSuccess
vretorno:='retorno.xml'
HB_MemoWrit(vretorno,cResponseText)
cresposta := oXMLDoc:getElementsByTagName( "faultstring" ):Item(0):Text
else
cresposta:=cResponseText
endif
alert(cresposta)
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2

