Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 1620 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

procedure TForm3.BitBtn2Click(Sender: TObject);
begin
       ShowMessage(ACBrUTF8ToAnsi('ABRAZADERA IND. 4´´'));
end;

//ABRAZADERA IND. 4??

Estou usando TDFeSSL para assinar, alguns caracteres como o til (alt + 239) aparecem como (?). Haverá alguma maneira de preservar o texto original no XML

Uses ACBrDFeSSL,ACBrUtil;

function ACBrfirmaXML(xmlsinfirmar,xmlfirmado,pathcertificado,clavecertificado:WideString; conformato : integer):Integer;
var xmltmp  : TXMLDocument;
    XMLAnsi : AnsiString;
    ssl     : TDFeSSL;
 begin
    if (not FileExists(xmlsinfirmar) ) or (not FileExists(pathcertificado) ) then
      begin
        Result:=0;
        exit;
      end;
    xmltmp:= TXMLDocument.Create(Form3);
    xmltmp.Active:=True;
    xmltmp.Encoding :='ISO-8859-1';
    xmltmp.StandAlone:='no';
    xmltmp.XML.LoadFromFile(xmlsinfirmar);
    ssl:=TDFeSSL.create;
    ssl.SSLCryptLib := cryWinCrypt;       //(cryNone, cryOpenSSL, cryCapicom, cryWinCrypt);
    ssl.SSLXMlsignLib:=xsLibXml2;   //(xsNone , xsXmlSec  , xsMsXml   , xsMsXmlCapicom, xsLibXml2);
    ssl.ArquivoPFX:=pathcertificado;
    ssl.Senha:=clavecertificado;
    ssl.CarregarCertificado;
    XMLAnsi:=ACBrUTF8ToAnsi(xmltmp.XML.Text);
    //(XMLUTF8,'docelement','infelement','signode','namespace','idsignature','idatributo');
    if conformato=1 then
      xmltmp.XML.Text:=FormatXMLData(ssl.Assinar( XMLAnsi ,'UBLExtension','','','ext','',''))
    else
      xmltmp.XML.Text:=ssl.Assinar( XMLAnsi  ,'UBLExtension','','','ext','','');

    xmltmp.XML.SaveToFile(xmlfirmado);
    xmltmp.Active:=False;
    ssl.Free;
    xmltmp.Free;
    Result:=1;
 end;

 

20604749779-01-FE10-00000002.xml Firmado_20604749779-01-FE10-00000002.xml

Postado (editado)

Delphi 10.1 Berlin

1). O governo do Peru, solicita a codificação ISO-8859-1, Seria possível mudar para ISO-8859-1, revi a unidade ACBrDFeSSL e em todos os lugares que ele usa utf-8.

2). Mude para utf-8 e agora recebo o erro de que o documento foi alterado, usando FormatXMLData y nao usando.

"El documento electrónico ingresado ha sido alterado - Detalle: Incorrect reference digest value"

3). Analisei a assinatura que gera TDFeSSL e a tag está ausente <X509SubjectName>SERIALNUMBER=RUC:25988430712 C=PE</X509SubjectName>

4). Essa é a ligação.

{$IFDEF USAR_NETFRAMEWORK}
  function zfirmaxml(xmlsinfirmar,xmlfirmado,pathcertificado,clavecertificado:WideString):Integer; stdcall; external 'firmaxml509.dll';
{$ELSE NO USAR_NETFRAMEWORK }
 function ACBrfirmaXML(xmlsinfirmar,xmlfirmado,pathcertificado,clavecertificado:WideString; conformato : integer):Integer;
  var xmltmp  : TXMLDocument;
      XMLAnsi : AnsiString;
      ssl     : TDFeSSL;
   begin
      if (not FileExists(xmlsinfirmar) ) or (not FileExists(pathcertificado) ) then
        begin
          Result:=0;
          exit;
        end;
      xmltmp:= TXMLDocument.Create(FrmGenCPE);
      xmltmp.Active:=True;
      xmltmp.Encoding :='utf-8';
      xmltmp.StandAlone:='no';
      xmltmp.XML.LoadFromFile(xmlsinfirmar);
      ssl:=TDFeSSL.create;
      ssl.SSLCryptLib := cryWinCrypt;       //(cryNone, cryOpenSSL, cryCapicom, cryWinCrypt);
      ssl.SSLXMlsignLib:=xsLibXml2;         //(xsNone , xsXmlSec  , xsMsXml   , xsMsXmlCapicom, xsLibXml2);
      ssl.ArquivoPFX:=pathcertificado;
      ssl.Senha:=clavecertificado;
      ssl.CarregarCertificado;

      XMLAnsi:=ACBrAnsiToUTF8(xmltmp.XML.Text);

      //CenteudoXML, docElement, infElement, SignatureNode, SelectionNamespaces, IdSignature, IdAttr
      if (conformato=1)  then
        xmltmp.XML.Text:=FormatXMLData(ssl.Assinar( XMLAnsi ,'ExtensionContent','','','ext','',''))
      else
        xmltmp.XML.Text:=ssl.Assinar( XMLAnsi  ,'ExtensionContent','','','ext','','');

      xmltmp.XML.SaveToFile(xmlfirmado);
      xmltmp.Active:=False;
      ssl.Free;
      xmltmp.Free;
      Result:=1;
   end;
{$ENDIF USAR_NETFRAMEWORK}

5) Resultados em anexo.

DLL_NetFM_ISO8859_formatXML_20489430712-01-FE82-00000201_OK.xml ACBr_ISO8859_formatXML_20489430712-01-FE82-00000201_error_alterado.xml ACBr_utf8_formatXML_20489430712-01-FE82-00000201_error_alterado.xml ACBr_utf8_naoFormat_20489430712-01-FE82-00000201_error_alterado.xml

Obrigado por suas respostas :D

Editado por Hubel Solis Bonifacio
Para agradecer
  • Curtir 1
  • 2 meses depois ...
  • 1 mês depois ...
  • Administradores
Postado

Bom dia Hubel.

Nos desculpe a demora no retorno, acabamos tendo muitas demandas que acabaram por tomar muito tempo, mas assim que possível faremos a validação de suas sugestões.

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Postado

A classe de assinatura do acbr é feita para o padrão brasileiro, ou seja a codificação é UTF8 e o a publica do certificado no x509 data, este tipo de assinatura que você quer fazer não é suportado pelo ACBr.

 

  • Administradores
Postado

Bom dia.

Na realidade devemos analisar em breve a possibilidade de incorporar também esta questão no ACBr, nosso consultor deve iniciar a análise assim que possível.

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Este tópico foi criado há 1620 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.