Clipper On Line • Ver Tópico - Consumir Webservice ( SOAP )

Consumir Webservice ( SOAP )

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

Moderador: Moderadores

 

Consumir Webservice ( SOAP )

Mensagempor MSDN » 10 Jan 2014 18:37

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
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

Consumir Webservice ( SOAP )

Mensagempor rochinha » 12 Jan 2014 00:54

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:
   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 fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

Consumir Webservice ( SOAP )

Mensagempor Ramos » 15 Ago 2014 17:45

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.
Nota de Moderação:
Toledo: Mensagem editada para colocar a tag [ quote ]
Veja como utilizar esta tag: Clique aqui
Ramos
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 9
Data de registro: 15 Ago 2014 17:38
Cidade/Estado: GV/MG
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Consumir Webservice ( SOAP )

Mensagempor rochinha » 15 Ago 2014 20:02

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 fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

Consumir Webservice ( SOAP )

Mensagempor Ramos » 16 Ago 2014 13:28

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 310 vezes
Ramos
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 9
Data de registro: 15 Ago 2014 17:38
Cidade/Estado: GV/MG
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Consumir Webservice ( SOAP )

Mensagempor rochinha » 17 Ago 2014 00:35

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 fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

Consumir Webservice ( SOAP )

Mensagempor Alexandre Silva » 23 Ago 2014 16:22

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

[url]
http://generali.averbweb.net.br/documentacao
[/url]
Anexos
SOAP.PRG
(3.21 KiB) Baixado 311 vezes
WEB.PRG
(2.7 KiB) Baixado 295 vezes
* Clipper 5.2e/Gaspro 4.0 /CDX/Blinker 7.0 Harbour 3.2 Console Hbmk2
Avatar de usuário

Alexandre Silva
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 351
Data de registro: 26 Mar 2007 00:16
Cidade/Estado: Itapema - SC
Curtiu: 34 vezes
Mens.Curtidas: 6 vezes

Consumir Webservice ( SOAP )

Mensagempor rochinha » 25 Ago 2014 23:34

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.
*--
* 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 fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes

Consumir Webservice ( SOAP )

Mensagempor Alexandre Silva » 26 Ago 2014 12:48

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>

<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 de usuário

Alexandre Silva
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 351
Data de registro: 26 Mar 2007 00:16
Cidade/Estado: Itapema - SC
Curtiu: 34 vezes
Mens.Curtidas: 6 vezes

Consumir Webservice ( SOAP )

Mensagempor JoséQuintas » 27 Ago 2014 08:00

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

objXmlHTTP:Send( sConteudo )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Consumir Webservice ( SOAP )

Mensagempor Alexandre Silva » 27 Ago 2014 11:57

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 de usuário

Alexandre Silva
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 351
Data de registro: 26 Mar 2007 00:16
Cidade/Estado: Itapema - SC
Curtiu: 34 vezes
Mens.Curtidas: 6 vezes

Consumir Webservice ( SOAP )

Mensagempor Alexandre Silva » 01 Set 2014 13:12

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
Avatar de usuário

Alexandre Silva
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 351
Data de registro: 26 Mar 2007 00:16
Cidade/Estado: Itapema - SC
Curtiu: 34 vezes
Mens.Curtidas: 6 vezes

Consumir Webservice ( SOAP )

Mensagempor frazato » 01 Set 2014 15:43

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
//------------------------------------------------
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)
frazato
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 219
Data de registro: 08 Jul 2004 07:45
Curtiu: 0 vez
Mens.Curtidas: 4 vezes

Consumir Webservice ( SOAP )

Mensagempor Alexandre Silva » 02 Set 2014 00:08

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 de usuário

Alexandre Silva
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 351
Data de registro: 26 Mar 2007 00:16
Cidade/Estado: Itapema - SC
Curtiu: 34 vezes
Mens.Curtidas: 6 vezes

Consumir Webservice ( SOAP )

Mensagempor Alexandre Silva » 11 Set 2014 21:08

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

 
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
Avatar de usuário

Alexandre Silva
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 351
Data de registro: 26 Mar 2007 00:16
Cidade/Estado: Itapema - SC
Curtiu: 34 vezes
Mens.Curtidas: 6 vezes

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Bing [Bot] e 10 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro