Jump to content
Fivewin Brasil

Off: Duvida eSocial


emotta

Recommended Posts

Como eu já vi algumas pessoas postando duvidas de eSocial aqui imagino que tenham pessoas que possam me ajudar.

Eu preciso fazer download, via aplicação, de eventos que estão no eSocial. Hoje é possivel fazer esse download pelo portal (https://www.gov.br/esocial/pt-br/noticias/esocial-download-para-facilitar-a-vida-do-empregador)

Eu gostaria de fazer esse download via aplicação, tanto o pedido como o download do arquivo.

Alguém aqui sabe como fazer? O exemplo pode ser em qualquer linguagem e eu já sei que com certeza vai precisar do certificado digital da empresa. 

Fico agradecido se alguém puder me ajudar nisso

abraços

 

Link to comment
Share on other sites

16 minutos atrás, emotta disse:

Como eu já vi algumas pessoas postando duvidas de eSocial aqui imagino que tenham pessoas que possam me ajudar.

Eu preciso fazer download, via aplicação, de eventos que estão no eSocial. Hoje é possivel fazer esse download pelo portal (https://www.gov.br/esocial/pt-br/noticias/esocial-download-para-facilitar-a-vida-do-empregador)

Eu gostaria de fazer esse download via aplicação, tanto o pedido como o download do arquivo.

Alguém aqui sabe como fazer? O exemplo pode ser em qualquer linguagem e eu já sei que com certeza vai precisar do certificado digital da empresa. 

Fico agradecido se alguém puder me ajudar nisso

abraços

 


Voce pode utilizar os seguintes modelos de xml para fazer downloads 

// Eventos de tabelas  
<?xml version="1.0" encoding="UTF-8"?>
<eSocial xmlns="http://www.esocial.gov.br/schema/consulta/identificadores-eventos/tabela/v1_0_0">
<consultaIdentificadoresEvts>
<ideEmpregador>
<tpInsc>1</tpInsc>
<nrInsc>06117473000150</nrInsc>
</ideEmpregador>
<consultaEvtsTabela>
<tpEvt>str123</tpEvt>
<chEvt>str1234</chEvt>
<dtIni>2018-10-02T12:12:12</dtIni>
<dtFim>2018-10-02T12:12:12</dtFim>
</consultaEvtsTabela>
</consultaIdentificadoresEvts>
</eSocial

// eventos de trabalhadores 
<?xml version="1.0" encoding="UTF-8"?>
<eSocial xmlns="http://www.esocial.gov.br/schema/consulta/identificadores-eventos/trabalhador/v1_0_0">
<consultaIdentificadoresEvts>
<ideEmpregador>
<tpInsc>1</tpInsc>
<nrInsc>06117473000150</nrInsc>
</ideEmpregador>
<consultaEvtsTrabalhador>
<cpfTrab>35090092079</cpfTrab>
<dtIni>2018-10-02T12:12:12</dtIni>
<dtFim>2018-10-02T12:12:12</dtFim>
</consultaEvtsTrabalhador>
</consultaIdentificadoresEvts>
</eSocial

// Eventos do empregador 
<?xml version="1.0" encoding="UTF-8"?>
<eSocial xmlns="http://www.esocial.gov.br/schema/consulta/identificadores-eventos/empregador/v1_0_0">
<consultaIdentificadoresEvts>
<ideEmpregador>
<tpInsc>1</tpInsc>
<nrInsc>06117473000150</nrInsc>
</ideEmpregador>
<consultaEvtsEmpregador>
<tpEvt>str123</tpEvt>
<perApur>2017-10</perApur>
</consultaEvtsEmpregador>
</consultaIdentificadoresEvts>
</eSocial

// por numero de recibo 
<?xml version="1.0" encoding="UTF-8"?>
<eSocial xmlns="http://www.esocial.gov.br/schema/download/solicitacao/nrRecibo/v1_0_0">
<download>
<ideEmpregador>
<tpInsc>1</tpInsc>
<nrInsc>06117473000150</nrInsc>
</ideEmpregador>
<solicDownloadEventosPorNrRecibo>
<nrRec>1.2.0000000000133846592</nrRec>
</solicDownloadEventosPorNrRecibo>
</download>
</eSocial

// Eventos periodicos pelo ID 
<?xml version="1.0" encoding="UTF-8"?>
<eSocial xmlns="http://www.esocial.gov.br/schema/download/solicitacao/id/v1_0_0">
<download>
<ideEmpregador>
<tpInsc>1</tpInsc>
<nrInsc>06117473000150</nrInsc>
</ideEmpregador>
<solicDownloadEvtsPorId>
<id>ID1061174730000002018081415303000001</id>
</solicDownloadEvtsPorId>
</download>
</eSocial

 

Link to comment
Share on other sites

Consegui fazer o código abaixo rodar, porem na linha 73:

oComunicacao:setOption( 3, "CURRENT_USER\MY\" + ::cCertificado )

eu gostaria de saber o que colocar em cCertificado. É a chave publica ou privada do certificado digital a1? Eu coloco o caminho ou o conteudo da chave nele? alguem pode me ajudar?

segue abaixo o codigo fonte completo: (ao executar eu estou recebendo a resposta do esocial porem obviamente recusando, mas pelo menos está batendo la)

 

#include "hbclass.ch"
 
#ifndef XML_UTF8
#define XML_UTF8     '<?xml version="1.0" encoding="UTF-8"?>'
#endif
 
FUNCTION Main()
 
   LOCAL cChave := "1.2.201709.0000000000000226099"
   LOCAL oESocial := ESocialClass():New()
 
   oESocial:cCertificado := "xxxxxxxxxxxxxxxxxxxx"
 
   oESocial:ConsultaRetornoLote( cChave )
 
   ? oEsocial:cXmlRetorno
 
   RETURN( NIL )
 
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>' + ;
      '</consultaLoteEventos>' + ;
      '</soapenv:Body>' + ;
      '</soapenv:Envelope>'
 
   hb_MemoWrit( "consulta.xml", ::cXmlEnvelope )
 
   ::MicrosoftXmlSoapPost()
 
   RETURN ::cXmlRetorno
 
METHOD MicrosoftXmlSoapPost() CLASS ESocialClass
 
   LOCAL oComunicacao
 
   oComunicacao = CreateObject( "MSXML2.ServerXMLHTTP.6.0" )
 
   // 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 )
 
   DO WHILE oComunicacao:readyState <> 4
      Inkey( 0.5 )
   ENDDO
 
   ::cXmlRetorno := oComunicacao:responseText
 
   RETURN NIL

 

Link to comment
Share on other sites

Oi emotta, boa tarde!

Você precisa capturar seu certificado. Eu uso a capcom.dll e seleciono o certificado pela função: 

....

  cXML         := HB_MemoRead( cXML_Assinado )
  
  cCertificado := Pegar_Certificado()
  
  If Empty( cCertificado )
     cMensagem += "Não foi possível carregar as informações do certificado."
     Exibir_Mensagem()
     
     Return .F.
  Else     

     cMensagem += "Certificado em uso " + cCertificado
     Exibir_Mensagem()
  EndIf
    
  TRY
    
    oServer := CreateObject( "MSXML2.ServerXMLHTTP.6.0" )
  CATCH oError

    cMensagem += "Não foi possível carregar objeto XMLHTTPServer."         
    Exibir_Mensagem()
            
    Return .F.
  END

  oServer:setOption( 3, 'CURRENT_USER\MY\' + cCertificado )
  oServer:open( 'POST', cLink, .F. )
  oServer:setRequestHeader( 'SOAPAction'     , cSoapAct )
  oServer:setRequestHeader( 'Content-Type'   , 'text/xml; charset=utf-8' )  
  oServer:setRequestHeader( 'Content-Length:', AllTrim( Str( Len( cXML ) ) ) )  

  TRY
  
    oDOMDoc := CreateObject( "MSXML2.DOMDocument.5.0" )
    oDOMDoc:async              := .F.
    oDOMDoc:resolveExternals   := .F.
    oDOMDoc:validateOnParse    := .T.
    oDOMDoc:preserveWhiteSpace := .T.
    oDOMDoc:LoadXML( cXML )
  CATCH

    cMensagem += "Não foi possível carregar o documento XML."
    Exibir_Mensagem()

    Return .F.
  END
*------------------------------------------------------------------------------*

Function Pegar_Certificado()
  Local oCapicom
  Local oCertificado
  Local cCertificado
  Local nX
  Local cSubjectName
  
  TRY
    oCapicom := CreateObject( "CAPICOM.Store" )
  CATCH
  
  END

  If oCapicom == NIL
     Return "" 
  EndIf

  oCapicom:open( CAPICOM_CURRENT_USER_STORE,'My', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED )
  oCertificado := oCapicom:Certificates()

  For nX := 1 To oCertificado:Count()
      If oCertificado:Item(nX):SerialNumber == cSerial_Certificado
         cSubjectName := oCertificado:Item( nX ):SubjectName
      EndIf
  Next

  cCertificado := ""
  
  FOR nX := At( "CN=", cSubjectName ) + 3 To Len( cSubjectName )
      If SubStr( cSubjectName, nX, 1 ) == ","
         Exit
      EndIf
      
     cCertificado += SubStr( cSubjectName, nX, 1 )
  Next

Return cCertificado
*------------------------------------------------------------------------------*

 ATENÇÃO! Essa função é baseada na classe sefazclass do JoséQuintas

Att.,

Oliveiros Junior

 

 

 

Link to comment
Share on other sites

  • 2 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...