emotta Posted July 28, 2022 Report Share Posted July 28, 2022 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 Quote Link to comment Share on other sites More sharing options...
infosys2 Posted July 28, 2022 Report Share Posted July 28, 2022 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 Quote Link to comment Share on other sites More sharing options...
emotta Posted July 28, 2022 Author Report Share Posted July 28, 2022 Fantástico Infosys. Se não for pedir demais vc tem um exemplo, em qualquer linguagem (pode ser tb via CURL) para obter esses dados? (no caso o que vou precisar é dos eventos de trabalhadores) Quote Link to comment Share on other sites More sharing options...
kapiaba Posted July 28, 2022 Report Share Posted July 28, 2022 https://www.projetoacbr.com.br/forum/topic/46398-solicitardownloadeventos/?page=2 Quote Link to comment Share on other sites More sharing options...
emotta Posted July 28, 2022 Author Report Share Posted July 28, 2022 38 minutos atrás, kapiaba disse: https://www.projetoacbr.com.br/forum/topic/46398-solicitardownloadeventos/?page=2 Vlw Kapiaba, mas inicialmente gostaria de fazer sem usar o ACBR, já que eu não preciso de todo o eSocial mas somente a parte do download de eventos do trabalhador. Quote Link to comment Share on other sites More sharing options...
emotta Posted July 28, 2022 Author Report Share Posted July 28, 2022 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 Quote Link to comment Share on other sites More sharing options...
emotta Posted August 1, 2022 Author Report Share Posted August 1, 2022 ninguem? Quote Link to comment Share on other sites More sharing options...
oliveiros Posted August 1, 2022 Report Share Posted August 1, 2022 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 Quote Link to comment Share on other sites More sharing options...
mkyx Posted August 12, 2022 Report Share Posted August 12, 2022 Eu tbm uso o capicom, para pegar os dados do certificado. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.