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