![]() |
Chilkat • HOME • Android™ • AutoIt • C • C# • C++ • Chilkat2-Python • CkPython • Classic ASP • DataFlex • Delphi DLL • Go • Java • Node.js • Objective-C • PHP Extension • Perl • PowerBuilder • PowerShell • PureBasic • Ruby • SQL Server • Swift • Tcl • Unicode C • Unicode C++ • VB.NET • VBScript • Visual Basic 6.0 • Visual FoxPro • Xojo Plugin
(Ruby) Create sii.cl Factura Electrónica (Chile Servicio de Impuestos Internos)Demonstrates how to sign an XML invoice according to Chilean Internal Revenue Service regulations.
require 'chilkat' # This example assumes the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. # See: Apply 2nd Signature to sii.cl Factura Electr�nica (Chile Servicio de Impuestos Internos) # for an example showing how to apply a 2nd signature. # We want to sign XML that looks like the following: # <?xml version="1.0" encoding="iso-8859-1"?> # <DTE version="1.0" xmlns="http://www.sii.cl/SiiDte"> # <Documento ID="F13T34"> # <Encabezado> # <IdDoc> # <TipoDTE>34</TipoDTE> # <Folio>13</Folio> # <FchEmis>2020-07-17</FchEmis> # <FmaPago>1</FmaPago> # <FchVenc>2020-07-17</FchVenc> # </IdDoc> # <Emisor> # <RUTEmisor>...</RUTEmisor> # <RznSoc>...</RznSoc> # <GiroEmis>...</GiroEmis> # <Acteco>...</Acteco> # <DirOrigen>...</DirOrigen> # <CmnaOrigen>...</CmnaOrigen> # <CiudadOrigen>...</CiudadOrigen> # </Emisor> # <Receptor> # <RUTRecep>...</RUTRecep> # <RznSocRecep>...</RznSocRecep> # <GiroRecep>...</GiroRecep> # <Contacto/> # <DirRecep>...</DirRecep> # <CmnaRecep>...</CmnaRecep> # <CiudadRecep>...</CiudadRecep> # </Receptor> # <Totales> # <MntExe>14999</MntExe> # <MntTotal>14999</MntTotal> # </Totales> # </Encabezado> # <Detalle> # <NroLinDet>1</NroLinDet> # <CdgItem> # <TpoCodigo>INT</TpoCodigo> # <VlrCodigo>1</VlrCodigo> # </CdgItem> # <NmbItem>Atenci�n profesional mes de Junio 2020</NmbItem> # <QtyItem>1</QtyItem> # <UnmdItem>UNI</UnmdItem> # <PrcItem>14999</PrcItem> # <MontoItem>14999</MontoItem> # </Detalle> # <TED version="1.0"> # <DD> # <RE>99972220-K</RE> # <TD>34</TD> # <F>13</F> # <FE>2020-07-17</FE> # <RR>99942999-2</RR> # <RSR>...</RSR> # <MNT>14999</MNT> # <IT1>Atencion profesional mes de Junio 2020</IT1> # <CAF version="1.0"> # <DA> # <RE>99972220-K</RE> # <RS>...</RS> # <TD>34</TD> # <RNG> # <D>3</D> # <H>12</H> # </RNG> # <FA>2019-10-10</FA> # <RSAPK> # <M>2zHVYpcVNQRvS2yFuqdrh...TEQZx/m0t9HVTgWKZvlc6LSQ==</M> # <E>Aw==</E> # </RSAPK> # <IDK>300</IDK> # </DA> # <FRMA algoritmo="SHA1withRSA">LaVkjISGu...sBtsQL1jR9lw==</FRMA> # </CAF> # <TSTED>2020-07-17T13:19:10</TSTED> # </DD> # <FRMT algoritmo="SHA1withRSA">LxZr6zmXRZIfTz7...IXS6sp4vfz2fIsA==</FRMT> # </TED> # <TmstFirma>2020-07-17T13:19:10</TmstFirma> # </Documento> # </DTE> success = true gen = Chilkat::CkXmlDSigGen.new() gen.put_SigLocation("DTE") gen.put_SigLocationMod(0) gen.put_SigNamespacePrefix("") gen.put_SigNamespaceUri("http://www.w3.org/2000/09/xmldsig#") gen.put_SignedInfoCanonAlg("C14N") gen.put_SignedInfoDigestMethod("sha1") # -------- Reference 1 -------- gen.AddSameDocRef("F13T34","sha1","","","") # Provide a certificate + private key. (PFX password is test123) cert = Chilkat::CkCert.new() success = cert.LoadPfxFile("qa_data/pfx/cert_test123.pfx","test123") if (success != true) print cert.lastErrorText() + "\n"; exit end gen.SetX509Cert(cert,true) gen.put_KeyInfoType("X509Data+KeyValue") gen.put_X509Type("Certificate") # Load XML to be signed... sbXml = Chilkat::CkStringBuilder.new() success = sbXml.LoadFile("qa_data/xml_dsig/sii_cl/xmlToSign.xml","iso-8859-1") if (success == false) print "Failed to load XML file." + "\n"; exit end gen.put_Behaviors("IndentedSignature") # Sign the XML... success = gen.CreateXmlDSigSb(sbXml) if (success != true) print gen.lastErrorText() + "\n"; exit end # ----------------------------------------------- # Save the signed XML to a file. success = sbXml.WriteFile("qa_data/xml_dsig/sii_cl/signed1.xml","iso-8859-1",false) print sbXml.getAsString() + "\n"; # ---------------------------------------- # Verify the signatures we just produced... verifier = Chilkat::CkXmlDSig.new() success = verifier.LoadSignatureSb(sbXml) if (success != true) print verifier.lastErrorText() + "\n"; exit end numSigs = verifier.get_NumSignatures() verifyIdx = 0 while verifyIdx < numSigs verifier.put_Selector(verifyIdx) verified = verifier.VerifySignature(true) if (verified != true) print verifier.lastErrorText() + "\n"; exit end verifyIdx = verifyIdx + 1 end print "All signatures were successfully verified." + "\n"; |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.