Consumir Webservice ( SOAP )

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

MSDN
Usuário Nível 4
Usuário Nível 4
Mensagens: 741
Registrado em: 28 Nov 2003 15:55
Localização: CWB
Contato:

Consumir Webservice ( SOAP )

Mensagem por MSDN »

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
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Consumir Webservice ( SOAP )

Mensagem por rochinha »

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:

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 )
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.
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.
Ramos
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 15 Ago 2014 17:38
Localização: GV/MG

Consumir Webservice ( SOAP )

Mensagem por Ramos »

Voce diz:
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
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Consumir Webservice ( SOAP )

Mensagem por rochinha »

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.
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.
Ramos
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 15 Ago 2014 17:38
Localização: GV/MG

Consumir Webservice ( SOAP )

Mensagem por Ramos »

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.
WSHT.PRG
(829 Bytes) Baixado 458 vezes
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Consumir Webservice ( SOAP )

Mensagem por rochinha »

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.
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.
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

Consumir Webservice ( SOAP )

Mensagem por Alexandre Silva »

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
Anexos
SOAP.PRG
(3.21 KiB) Baixado 450 vezes
WEB.PRG
(2.7 KiB) Baixado 440 vezes
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Consumir Webservice ( SOAP )

Mensagem por rochinha »

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.

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.
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

Consumir Webservice ( SOAP )

Mensagem por Alexandre Silva »

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>

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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Consumir Webservice ( SOAP )

Mensagem por JoséQuintas »

// 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 )
Que eu saiba não há conversão, o DOM é apenas um "testador" de 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/
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

Consumir Webservice ( SOAP )

Mensagem por Alexandre Silva »

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 ??
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

Consumir Webservice ( SOAP )

Mensagem por Alexandre Silva »

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..
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
frazato
Usuário Nível 3
Usuário Nível 3
Mensagens: 219
Registrado em: 08 Jul 2004 07:45

Consumir Webservice ( SOAP )

Mensagem por frazato »

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

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)
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

Consumir Webservice ( SOAP )

Mensagem por Alexandre Silva »

Obrigado..
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
Avatar do usuário
Alexandre Silva
Usuário Nível 3
Usuário Nível 3
Mensagens: 376
Registrado em: 26 Mar 2007 00:16
Localização: Itapema - SC

Consumir Webservice ( SOAP )

Mensagem por Alexandre Silva »

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 ??

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
Responder