Página 1 de 4

E-social Consulta

Enviado: 06 Set 2017 12:29
por jairfab
Estou tentando fazer a consulta no e-social enviando um xml de consulta com o numero do protocolo e, como resposta recebo a seguinte mensagem : O documento enviado não é um xml válido do eSocial. Não há a tag <eSocia

Código: Selecionar todos

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:v1="http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/v1_1_0">
<soap:Body>
<eSocial xmlns="http://www.esocial.gov.br/schema/lote/eventos/envio/consulta/retornoProcessamento/v1_1_0">
  <consultaLoteEventos>
     <protocoloEnvio>1.2.201709.0000000000000225594</protocoloEnvio>
  </consultaLoteEventos>
</eSocial>
</soap:Body>
</soap:Envelope>
Codigo do PRG, porem não tenho nenhuma experiencia com web service e SOAP, alguém poderia me dar alguma dica, se alguem consegue testar este xml pra mim

Código: Selecionar todos

#include "fivewin.ch"
#include "directry.ch"

FUNCTION Main
 
LOCAL aRetorno:={} , cOk := .t.
Local Url             := 'https://webservices.producaorestrita.esocial.gov.br/servicos/empregador/consultarloteeventos/WsConsultarLoteEventos.svc'
Local SOAPAction := 'http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/consulta/retornoProcessamento/v1_1_0/ServicoConsultarLoteEventos/ConsultarLoteEventos'
	
	   ? "Iniciando....Comunicando com o WebService..."+Time()
	   
	   //Alerta(url)
	   xmldom = CREATEOBJECT("MSXML2.DOMDocument")
	   xmldom:async = .f.
	   xmldom:validateOnParse = .T.
	   xmldom:resolveExternals := .F.
	   xmldom:preserveWhiteSpace = .T.
	   

	   xmldoc = CREATEOBJECT("MSXML2.XMLHTTP")
	   xmldoc:open("POST", url, .f.)
	   xmldoc:SetRequestHeader( "Content-Type" , "text/xml; charset=utf-8" )
	   xmldoc:SetRequestHeader( "SOAPAction" , SOAPAction)
	 
	    
	 
	   //-- Montando o Xml pra consulta
	   Texto := DadosDM()

 	 MEMOWRIT(".\Envio\envia.xml",Texto,.F.)
	
          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)
	      msgstop(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
	   
	 MEMOWRIT(".\Envio\envio01.xml",Linha,.F.)
	 MEMOWRIT(".\Envio\consulta.xml",Linha2,.F.)
	 
 RETURN cOk
	 
	 
	 
	 
//------------------------------------------------------
Static Function DadosDM()
	 
	
    cChaveNFe:="1.2.201709.0000000000000225594"	
	
 **  monta soap aqui
   sConteudo :='<?xml version="1.0" encoding="utf-8"?>'
   sConteudo   += '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/v1_1_0">'  
   sConteudo   +=   '<soap:Body>'

   sConteudo   +=   '<eSocial xmlns="http://www.esocial.gov.br/schema/lote/eventos/envio/consulta/retornoProcessamento/v1_0_0">'  
   sConteudo   +=   '<consultaLoteEventos>'  
   sConteudo   +=   '<protocoloEnvio>'+cChaveNFe+'</protocoloEnvio>'  
   sConteudo   +=   '</consultaLoteEventos>'  
   sConteudo   +=   '</eSocial>'  


   sConteudo   +=   '</soap:Body>'
   sConteudo   += '</soap:Envelope>'
	
	
	
Return (sConteudo)
	 

E-social Consulta

Enviado: 06 Set 2017 13:01
por Kapiaba

E-social Consulta

Enviado: 06 Set 2017 14:31
por asimoes
Recomendo usar SoapUI

Ajuda muito nos testes com webservices e também para montar o XMl de envio.

https://www.soapui.org/

A versão que eu tenho é a 5.3.0, é free

E-social Consulta

Enviado: 06 Set 2017 16:32
por JoséQuintas
Não há a tag <eSocia
Indo pelo básico, &lt. é sinal de menor, seria <eSocial>

O XML de envio vai dentro do XML de envelope.
Se XML de envelope estiver errado, vai se perder sobre o que se refere ao envelope ou ao XML interno.

E-social Consulta

Enviado: 06 Set 2017 16:56
por JoséQuintas
Mais outra coisa, vi na comunicação sobre versão 1.1, não sei se tem a ver....
Nota: estou respondendo só de curioso... rs
esocial.png

E-social Consulta

Enviado: 06 Set 2017 17:21
por JoséQuintas
Não entendi, precisa certificado?

Código: Selecionar todos

PROCEDURE Main

   LOCAL Url        := 'https://webservices.producaorestrita.esocial.gov.br/servicos/empregador/consultarloteeventos/WsConsultarLoteEventos.svc'
   LOCAL SOAPAction := 'http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/consulta/retornoProcessamento/v1_1_0/ServicoConsultarLoteEventos/ConsultarLoteEventos'
   LOCAL oComunicacao

   oComunicacao = win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
   oComunicacao:open( "POST", url, .F. )
   oComunicacao:SetRequestHeader( "SOAPAction", SOAPAction )
   oComunicacao:SetRequestHeader( "Content-Type", "application/soap+xml; charset=utf-8" )

   oComunicacao:send( GeraXml() )
   oComunicacao:WaitForResponse( 500 )

   ? oComunicacao:responseText
   ? oComunicacao:responseXML:xml

   RETURN

STATIC FUNCTION GeraXml()

   LOCAL cChaveNfe := "1.2.201709.0000000000000225594"

   RETURN ;
      '<?xml version="1.0" encoding="UTF-8"?>' + ;
      '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/v1_1_0">' + ;
      '<soap:Body>' + ;
      '<eSocial xmlns="http://www.esocial.gov.br/schema/lote/eventos/envio/consulta/retornoProcessamento/v1_0_0">' + ;
      '<consultaLoteEventos>' + ;
      '<protocoloEnvio>' + cChaveNFe + '</protocoloEnvio>' + ;
      '</consultaLoteEventos>' + ;
      '</eSocial>' + ;
      '</soap:Body>' + ;
      '</soap:Envelope>'
d:\temp>test

Error WINOLE/1007 A autoridade de certificaτπo nπo Θ vßlida ou estß incorreta
(0x80072F0D): msxml3.dll (OS Error -2147352567)
Called from WIN_OLEAUTO:SEND(0)
Called from MAIN(12)

E-social Consulta

Enviado: 06 Set 2017 18:05
por JoséQuintas
Dá pra reduzir um pouco mais, mas não resolve o problema.

Código: Selecionar todos

PROCEDURE Main

   LOCAL oSefaz

   oSefaz := SefazClass():New()
   WITH OBJECT oSefaz
      :cSoapUrl     := 'https://webservices.producaorestrita.esocial.gov.br/servicos/empregador/consultarloteeventos/WsConsultarLoteEventos.svc'
      :cSoapAction  := 'http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/consulta/retornoProcessamento/v1_1_0/ServicoConsultarLoteEventos/ConsultarLoteEventos'
      :cXmlSoap     := GeraXml()
      :cCertificado := NIL
      :MicrosoftXmlSoapPost()
      ? :cXmlRetorno
   ENDWITH

   RETURN

STATIC FUNCTION GeraXml()

   LOCAL cChaveNfe := "1.2.201709.0000000000000225594"

   RETURN ;
      '<?xml version="1.0" encoding="UTF-8"?>' + ;
      '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/v1_1_0">' + ;
      '<soap:Body>' + ;
      '<eSocial xmlns="http://www.esocial.gov.br/schema/lote/eventos/envio/consulta/retornoProcessamento/v1_0_0">' + ;
      '<consultaLoteEventos>' + ;
      '<protocoloEnvio>' + cChaveNFe + '</protocoloEnvio>' + ;
      '</consultaLoteEventos>' + ;
      '</eSocial>' + ;
      '</soap:Body>' + ;
      '</soap:Envelope>'
d:\temp>test
Erro SOAP: XML retorno nπo contΘm soapenv:Body Erro: Na conexπo com webservice https://webservices.producaorestrita.esoc
ial.gov.br/servicos/empregador/consultarloteeventos/WsConsultarLoteEventos.svc

E-social Consulta

Enviado: 06 Set 2017 18:36
por JoséQuintas
Comentário:

Eu não tinha pensado nesse tipo de uso pra SefazClass.
Vale a pena fazer mais testes, pode eliminar outros fontes de comunicação.

E-social Consulta

Enviado: 06 Set 2017 22:46
por JoséQuintas
E numa versão estilo SefazClass, ou como inicio de uma ESocialClass, ficaria assim:

Código: Selecionar todos

PROCEDURE Main

   LOCAL cChave   := "1.2.201709.0000000000000225594"
   LOCAL oESocial := ESocialClass():New()

   oESocial:cCertificado := "XXXX"
   ? oESocial:ConsultaRetornoLote( cChave )

   RETURN

Código: Selecionar todos

#include "hbclass.ch"

CREATE CLASS ESocialClass

   VAR    cCertificado   INIT ""
   VAR    cUrl           INIT ""
   VAR    cSoapAction    INIT ""
   VAR    cXmlDocumento  INIT ""
   VAR    cXmlEnvelope   INIT ""
   VAR    cXmlRetorno    INIT ""
   METHOD ConsultaRetornoLote( cChave, cCertificado )
   METHOD MicrosoftXmlSoapPost()

   ENDCLASS

METHOD ConsultaRetornoLote( cChave, cCertificado ) CLASS ESocialClass

   IF cCertificado != NIL
     ::cCertificado := cCertificado
   ENDIF
   ::cUrl          := 'https://webservices.producaorestrita.esocial.gov.br/servicos/empregador/consultarloteeventos/WsConsultarLoteEventos.svc'
   ::cSOAPAction   := 'http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/consulta/retornoProcessamento/v1_1_0/ServicoConsultarLoteEventos/ConsultarLoteEventos'
   ::cXmlDocumento := ;
      '<eSocial xmlns="http://www.esocial.gov.br/schema/lote/eventos/envio/consulta/retornoProcessamento/v1_0_0">' + ;
      '<consultaLoteEventos>' + ;
      '<protocoloEnvio>' + cChave + '</protocoloEnvio>' + ;
      '</consultaLoteEventos>' + ;
      '</eSocial>'
   ::cXmlEnvelope := ;
      '<?xml version="1.0" encoding="UTF-8"?>' + ;
      '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/v1_1_0">' + ;
      '<soap:Body>' + ;
      ::cXmlDocumento + ;
      '</soap:Body>' + ;
      '</soap:Envelope>'
     ::MicrosoftXmlSoapPost()

     RETURN ::cXmlRetorno

METHOD MicrosoftXmlSoapPost() CLASS ESocialClass

   LOCAL oComunicacao

   oComunicacao = win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
   oComunicacao:setOption( 3, "CURRENT_USER\MY\" + ::cCertificado )
   oComunicacao:open( "GET", ::cUrl, .F. )
   oComunicacao:SetRequestHeader( "SOAPAction", ::cSOAPAction )
   oComunicacao:SetRequestHeader( "Content-Type", "application/soap+xml; charset=utf-8" )
   oComunicacao:send( ::cXmlEnvelope )
   oComunicacao:WaitForResponse( 500 )
   ::cXmlRetorno := oComunicacao:responseText

   RETURN NIL

E-social Consulta

Enviado: 07 Set 2017 09:27
por jairfab
Não Precisa de certificado na consulta não, apenas no enviou de eventos que é outra parte do processo.

E-social Consulta

Enviado: 07 Set 2017 09:31
por jairfab
José assim no formato class fica bem melhor, já é um começo muito bom para fazer uma class e-Social, eu conseguir gerar todos os xml que são 44 arquivos e conseguir enviar e receber o protocolo de recebimento, agora a parte de consulta do processamento com base no protocolo é que estou levando o maior baile, mas vale a pena resaltar que eu não tenho nenhuma experiencia com ambiente web service e soap

E-social Consulta

Enviado: 07 Set 2017 13:16
por JoséQuintas

Código: Selecionar todos

#include "hbclass.ch"
#ifndef XML_UTF8
   #define XML_UTF8                     [<?xml version="1.0" encoding="UTF-8"?>]
#endif

PROCEDURE Main

   LOCAL cChave   := "1.2.201709.0000000000000225594"
   LOCAL oESocial := ESocialClass():New()

   oESocial:cCertificado := "XXXX"
   ? oESocial:ConsultaRetornoLote(  cChave )
   hb_MemoWrit( "test.xml", oEsocial:cXmlEnvelope )

   RETURN

CREATE CLASS ESocialClass

   VAR    cCertificado   INIT ""
   VAR    cUrl           INIT ""
   VAR    cSoapAction    INIT ""
   VAR    cXmlDocumento  INIT ""
   VAR    cXmlEnvelope   INIT ""
   VAR    cXmlRetorno    INIT ""
   METHOD ConsultaRetornoLote( cChave, cCertificado )
   METHOD MicrosoftXmlSoapPost()

   ENDCLASS

METHOD ConsultaRetornoLote( cChave, cCertificado ) CLASS ESocialClass

   IF cCertificado != NIL
      ::cCertificado := cCertificado
   ENDIF
   ::cUrl          := "https://webservices.producaorestrita.esocial.gov.br/servicos/empregador/consultarloteeventos/WsConsultarLoteEventos.svc"
   ::cSOAPAction   := "http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/consulta/retornoProcessamento/v1_1_0/ServicoConsultarLoteEventos/ConsultarLoteEventos"
   ::cXmlDocumento := ;
      [<eSocial xmlns="http://www.esocial.gov.br/schema/lote/eventos/envio/consulta/retornoProcessamento/v1_0_0">] + ;
      [<consultaLoteEventos>] + ;
               [<protocoloEnvio>] + cChave + [</protocoloEnvio>] + ;
         [</consultaLoteEventos>] + ;
      [</eSocial>]
   ::cXmlEnvelope := XML_UTF8 + ;
       [<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" ] + ;
          [xmlns:v1="http://www.esocial.gov.br/servicos/empregador/lote/eventos/envio/consulta/retornoProcessamento/v1_1_0">] + ;
          [<soapenv:Header/>] + ;
          [<soapenv:Body>] + ;
          [<consultaLoteEventos>] + ;
          [<consulta>] + ;
             ::cXmlDocumento + ;
             [</consulta>] + ;
             [</consultaLoteEentos>] + ;
          [</soapenv:Body>] + ;
       [</soapenv:Envelope>]
       ::MicrosoftXmlSoapPost()

   RETURN ::cXmlRetorno

METHOD MicrosoftXmlSoapPost() CLASS ESocialClass

   LOCAL oComunicacao

   oComunicacao = win_OleCreateObject( "MSXML2.XMLHTTP" )
   //oComunicacao:setOption( 3, "CURRENT_USER\MY\" + ::cCertificado )
   oComunicacao:open( "POST", ::cUrl, .F. )
   oComunicacao:SetRequestHeader( "SOAPAction", ::cSOAPAction )
   oComunicacao:SetRequestHeader( "Content-Type", "text/xml; charset=utf-8" )
   oComunicacao:send( ::cXmlEnvelope )
   Inkey(0.5)
   ::cXmlRetorno := oComunicacao:responseText

   RETURN NIL
<codigo>604</codigo><descricao>O retorno do processamento do lote somente é acessivel a quem enviou a solici
taçπo.</descricao>
Teste por aí.

E-social Consulta

Enviado: 07 Set 2017 15:10
por jairfab
Nossa agora retornou a resposta, valeu mesmo eu não conseguiriam pois não tenho experiencia com web service

E-social Consulta

Enviado: 07 Set 2017 18:02
por JoséQuintas
valeu mesmo eu não conseguiriam pois não tenho experiencia com web-service
Nem eu.
Certas coisas vão no chute, tentativa/erro.... rs
Inclusive é esquisito no XML de envelope acabou ficando duplicado, mas foi... rs

E-social Consulta

Enviado: 08 Set 2017 16:41
por Eroni
Boa tarde, usando o exemplo anterior, apenas modifiquei a linha:

oComunicacao = win_OleCreateObject( "MSXML2.XMLHTTP" )

para:

oComunicacao = xHB_CreateObject( "MSXML2.XMLHTTP" )

Mas estou recebendo o seguinte erro:

Erro MSXML2.XMLHTTP/14 DISP_E_BADPARAMCOUNT: SEND
Arg. 1
Tipo: C
Valor: <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://www.esocial.gov.br/servicos/empr ... a><eSocial xmlns="http://www.esocial.gov.br/schema/lote/e ... v:Envelope>

Alguem já passou por isso?