Página 2 de 2

Esocial

Enviado: 02 Set 2022 12:21
por JoséQuintas
xml.png
Só pra curiosidade, no Edge também dá erro de codepage.
Nem a Microsoft se interessa em ajustar esse XML kkkk
Se com o conhecimento deles não dá, com o nosso menos ainda.

Esocial

Enviado: 02 Set 2022 12:26
por JoséQuintas
xml.png
Pra curiosidade, a posição do erro que o Edge indicou é justamente na parte do texto que tem a descrição.

Esocial

Enviado: 02 Set 2022 13:04
por malcarli
Exatamente ai. O problema que não consigo identificar este bendito caracter e muito menos o codepage. Vai ter que ser no chute mesmo kkk

Esocial

Enviado: 02 Set 2022 14:50
por jairfab
aparentimente vc esta mandando 3 eventos no mesmo lote e o erro

Código: Selecionar todos

- <ocorrencias>
- <ocorrencia>
  <tipo>1</tipo> 
  <codigo>106</codigo> 
  <descricao>Foi localizado no sistema um evento em duplicidade com o evento a ser enviado, mesmo Tipo de Inscricao, Numero de Inscricao, CPF do Trabalhador, Matricula, Data de Inicio da Condicao.</descricao> 
  <localizacao /> 
  </ocorrencia>
  </ocorrencias
e o evento ja existe la na sefaz. Eu sempre envio um evento por lote que assim fica mais facil quando dar algum tipo de erro.

anexo o xml de erro pra voce analisar os erros ...

Esocial

Enviado: 02 Set 2022 19:00
por malcarli
Caro amigo, se vc analisar o xml que enviei ele tem caracteres estranhos. uso o memowrit para gravar e queria gravar sem estes caracteres sem ter que fazer uma rotina para trocar os mesmos

Esocial

Enviado: 03 Set 2022 18:55
por JoséQuintas
A pergunta seria:

Como chegou nesse XML sem acentuação?

Esocial

Enviado: 05 Set 2022 17:42
por malcarli
Boa tarde, como não descobri como gravar com acentuação e ser válido a leitura do xml, fiz uma função para retirar os caracteres. Estou implementando na classe do Mestre Quintas o envio de eventos. Está dando erro, na estrutura do xml. O exemplo do xml que está para ser enviado está correto, pois funciona em outros monitores de envio, mas com certeza tem algum erro de envelopamento ou endereço que já conferi e não consegui encontrar. Segue o que fiz, para conhecimento de todos e possível ajuda.

Esocial

Enviado: 30 Set 2022 16:45
por malcarli
Voltando a saga de assinar o esocial que usa sha256, ao invés de sha1 da nfe. Estudando melhor um exemplo do Mestre Quintas, consegui gerar a chave de assinatura. Criei as tags, mas [<SignatureValue>] + cSignatureValue + [</SignatureValue>] está errada, pois é o mesmo conteúdo do certificado em [<X509Certificate>] + cPublicKey + [</X509Certificate>]. Como fazer, eis a questão. Ajuda será vem vindo.

Código: Selecionar todos

/*
https://pctoledo.org/forum/viewtopic.php?f=43&t=18664
*/

#define __TESTE__
#include "minigui.ch"

#include "sefaz_capicom.ch"
#include "hbclass.ch"
#ifdef __TESTE__

PROCEDURE TesteCapicom
   LOCAL cTexto, cSignatureValue, cDigestValue, cPublicKey

   cTexto    := [<?xml version="1.0" encoding="UTF-8"?><eSocial xmlns="http://www.esocial.gov.br/schema/lote/eventos/envio/v1_1_1"><envioLoteEventos grupo="2"><ideEmpregador><tpInsc>1</tpInsc><nrInsc>11956884</nrInsc></ideEmpregador><ideTransmissor><tpInsc>1</tpInsc><nrInsc>08743913000100</nrInsc></ideTransmissor><eventos><evento Id="ID1119568840000002022090509510600001"><eSocial xmlns="http://www.esocial.gov.br/schema/evt/evtExpRisco/v_S_01_00_00"><evtExpRisco Id="ID1119568840000002022090509510600001"><ideEvento><indRetif>1</indRetif><tpAmb>2</tpAmb><procEmi>1</procEmi><verProc>Versao22085</verProc></ideEvento><ideEmpregador><tpInsc>1</tpInsc><nrInsc>11956884</nrInsc></ideEmpregador><ideVinculo><cpfTrab>03606687982</cpfTrab><matricula>22</matricula></ideVinculo><infoExpRisco><dtIniCondicao>2022-01-10</dtIniCondicao><infoAmb><localAmb>1</localAmb><dscSetor>ADMINISTRACAO</dscSetor><tpInsc>1</tpInsc><nrInsc>11956884000179</nrInsc></infoAmb><infoAtiv><dscAtivDes>Responsavel por presta suporte na gestao da empresa auxiliando principalmente gestores de financas gestao de pessoal e da area operacional na realizacao de atividades de controle e emissao de documentos</dscAtivDes></infoAtiv><agNoc><codAgNoc>09.01.001</codAgNoc></agNoc><respReg><cpfResp>11417960400</cpfResp><ideOC>1</ideOC><nrOC>4847</nrOC><ufOC>PR</ufOC></respReg></infoExpRisco></evtExpRisco>]

   cDigestValue    := CapicomClass():HashData( cTexto )
   cSignatureValue := CapicomClass():Sign( cDigestValue, , , @cPublicKey )

   cPublicKey     := StrTran(cPublicKey, Chr(13) + Chr(10), [])
   cDigestValue   := StrTran(cDigestValue, Chr(13) + Chr(10), [])
   cSignatureValue:= StrTran(cSignatureValue, Chr(13) + Chr(10), [])

   cURI:= []

   cTexto += [<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">]
   cTexto +=    [<SignedInfo>]
   cTexto +=       [<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>]
   cTexto +=       [<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />] 
   cTexto +=       [<Reference URI="] + cURI + [">]
   cTexto +=       [<Transforms>]
   cTexto +=          [<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />]
   cTexto +=          [<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />]
   cTexto +=       [</Transforms>]
   cTexto +=       [<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />]
   cTexto +=       [<DigestValue>] + cDigestValue + [</DigestValue>]
   cTexto +=       [</Reference>]
   cTexto +=    [</SignedInfo>]
   cTexto +=    [<SignatureValue>] + cSignatureValue + [</SignatureValue>]
   cTexto +=    [<KeyInfo>]
   cTexto +=       [<X509Data>]
   cTexto +=          [<X509Certificate>] + cPublicKey + [</X509Certificate>]
   cTexto +=       [</X509Data>]
   cTexto +=    [</KeyInfo>]
   cTexto += [</Signature>]
   cTexto += [</eSocial></evento></eventos></envioLoteEventos></eSocial>]

   Hb_memowrit(".\assinado-esocial-loteevt.xml", cTexto)

   RETURN
#endif

FUNCTION IsValidSignatureCapicom( cDigestValue, cSignatureValue )

   IF cDigestValue = NIL .OR. cSignatureValue = NIL
      RETURN .F.
   ENDIF

   RETURN CapicomClass():VerifySignature( cSignatureValue ) == cDigestValue

CREATE CLASS CapicomClass

   METHOD SelectCertificate()
   METHOD VerifySignature( cSignedData )
   METHOD HashData( cData, nAlgorithm )
   METHOD PublicKey( oCAPICOMCert )
   METHOD Sign( cDigestValue, oCAPICOMcert, nEncode, cPublicKey )

   ENDCLASS

METHOD SelectCertificate() CLASS CapicomClass

   LOCAL oCapicom, oCertificate

   oCapicom:= win_OleCreateObject( "CAPICOM.Store" )
   oCapicom:Open( CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_READ_ONLY )
   BEGIN SEQUENCE WITH { || __BreakBlock() }
      oCertificate := oCapicom:Certificates:Select( "Selecione um certificado digital", "Algoritmo de Assinatura SHA256RSA" )
   ENDSEQUENCE

   IF oCapicom:Certificates:Count() == 0
      RETURN NIL
   ENDIF

   RETURN oCertificate:Item( 1 )

METHOD VerifySignature( cSignedData ) CLASS CapicomClass

   LOCAL oCapicom

   IF cSignedData == NIL
      RETURN NIL
   ENDIF

   oCapicom := win_OleCreateObject( "CAPICOM.SignedData.1" )
   oCapicom:Verify( cSignedData, .F., CAPICOM_VERIFY_SIGNATURE_ONLY )

   RETURN oCapicom:Content

METHOD HashData( cData, nAlgorithm ) CLASS CapicomClass

   LOCAL oCapicom, oUtil

   IF cData = NIL
      cData := Dtos( Date() ) + Time()
   ENDIF

   IF nAlgorithm = NIL
      nAlgorithm := CAPICOM_HASH_ALGORITHM_SHA1 // 256
   ENDIF

   oUtil    := win_OleCreateObject( "CAPICOM.Utilities" )
   oCapicom := win_OleCreateObject( "CAPICOM.HashedData.1" )
   oCapicom:Algorithm := nAlgorithm
   oCapicom:Hash( cData )

   RETURN oUtil:Base64Encode( outil:HexToBinary( oCapicom:Value ) )
   // RETURN oCapicom:Value

METHOD PublicKey( oCapicomCert ) CLASS CapicomClass

   LOCAL cPublicKey

   //oCapicom := win_OleCreateObject( "CAPICOM.Signer.2" )
   //oCapicom:Signer:Certificate := oCAPICOMCert
   //oCapicom:Signer:Options := CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT
   cPublicKey := StrTran( /* oCapicom:Certificate:*/ oCapicomCert:Export( CAPICOM_ENCODE_BASE64 ), Chr(13) + Chr(10), "" )

   RETURN cPublicKey

METHOD Sign( cDigestValue, oCAPICOMCert, nEncode, cPublicKey ) CLASS CapicomClass

   LOCAL oCAPICOMSignedData, oCAPICOMSigner, oCAPICOMTimeStamp, cSignature

   IF cDigestValue = NIL
      RETURN NIL
   ENDIF

   IF nEncode = NIL
      nEncode := CAPICOM_ENCODE_BASE64
   ENDIF

   oCAPICOMSigner := win_OleCreateObject( "CAPICOM.Signer.2" ) // versao 2

   IF oCAPICOMCert = NIL
      oCAPICOMCert := ::SelectCertificate()
      IF oCAPICOMCert = NIL
         RETURN NIL
      ENDIF
      oCAPICOMSigner:Certificate := oCAPICOMcert
   ELSE
      oCAPICOMSigner:Certificate := oCAPICOMcert:DefaultInterface
   ENDIF

   IF ! ( oCAPICOMSigner:Certificate:HasPrivateKey ;
         .AND. Dtos( oCAPICOMSigner:Certificate:ValidFromDate ) <= Dtos( Date() ) ;
         .AND. Dtos( oCAPICOMSigner:Certificate:ValidToDate ) >= Dtos( Date() ) )
      RETURN NIL
   ENDIF

   oCAPICOMSigner:Options := CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT
   cPublicKey             := StrTran( oCAPICOMSigner:Certificate:Export( CAPICOM_ENCODE_BASE64 ), Chr(13) + Chr(10), "" )

   oCAPICOMTimeStamp := win_OleCreateObject( "CAPICOM.Attribute" )
   oCAPICOMTimeStamp:Name  := CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME
   oCAPICOMTimeStamp:Value := hb_DateTime()

   oCAPICOMSigner:AuthenticatedAttributes:Add( oCAPICOMTimeStamp )

   oCAPICOMSignedData := win_OleCreateObject( "CAPICOM.SignedData.1" )
   oCAPICOMSignedData:Content := cDigestValue

   // segundo parametro falso, apenas retona assinatura do texto, não inclui no texto
   cSignature := oCAPICOMSignedData:Sign( oCAPICOMSigner, .F., nEncode )

   RETURN cSignature


Esocial

Enviado: 06 Out 2022 16:32
por clodoaldomonteiro
Uma dica, é usa o ACBR para ver como as coisas são feitas, foi assim que fizemos nossos eventos do eSocial.
https://www.projetoacbr.com.br/forum/to ... -e-social/