|  | 
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
| (Tcl) 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. 
 load ./chilkat.dll # 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> set success 1 set gen [new_CkXmlDSigGen] CkXmlDSigGen_put_SigLocation $gen "DTE" CkXmlDSigGen_put_SigLocationMod $gen 0 CkXmlDSigGen_put_SigNamespacePrefix $gen "" CkXmlDSigGen_put_SigNamespaceUri $gen "http://www.w3.org/2000/09/xmldsig#" CkXmlDSigGen_put_SignedInfoCanonAlg $gen "C14N" CkXmlDSigGen_put_SignedInfoDigestMethod $gen "sha1" # -------- Reference 1 -------- CkXmlDSigGen_AddSameDocRef $gen "F13T34" "sha1" "" "" "" # Provide a certificate + private key. (PFX password is test123) set cert [new_CkCert] set success [CkCert_LoadPfxFile $cert "qa_data/pfx/cert_test123.pfx" "test123"] if {$success != 1} then { puts [CkCert_lastErrorText $cert] delete_CkXmlDSigGen $gen delete_CkCert $cert exit } CkXmlDSigGen_SetX509Cert $gen $cert 1 CkXmlDSigGen_put_KeyInfoType $gen "X509Data+KeyValue" CkXmlDSigGen_put_X509Type $gen "Certificate" # Load XML to be signed... set sbXml [new_CkStringBuilder] set success [CkStringBuilder_LoadFile $sbXml "qa_data/xml_dsig/sii_cl/xmlToSign.xml" "iso-8859-1"] if {$success == 0} then { puts "Failed to load XML file." delete_CkXmlDSigGen $gen delete_CkCert $cert delete_CkStringBuilder $sbXml exit } CkXmlDSigGen_put_Behaviors $gen "IndentedSignature" # Sign the XML... set success [CkXmlDSigGen_CreateXmlDSigSb $gen $sbXml] if {$success != 1} then { puts [CkXmlDSigGen_lastErrorText $gen] delete_CkXmlDSigGen $gen delete_CkCert $cert delete_CkStringBuilder $sbXml exit } # ----------------------------------------------- # Save the signed XML to a file. set success [CkStringBuilder_WriteFile $sbXml "qa_data/xml_dsig/sii_cl/signed1.xml" "iso-8859-1" 0] puts [CkStringBuilder_getAsString $sbXml] # ---------------------------------------- # Verify the signatures we just produced... set verifier [new_CkXmlDSig] set success [CkXmlDSig_LoadSignatureSb $verifier $sbXml] if {$success != 1} then { puts [CkXmlDSig_lastErrorText $verifier] delete_CkXmlDSigGen $gen delete_CkCert $cert delete_CkStringBuilder $sbXml delete_CkXmlDSig $verifier exit } set numSigs [CkXmlDSig_get_NumSignatures $verifier] set verifyIdx 0 while {$verifyIdx < $numSigs} { CkXmlDSig_put_Selector $verifier $verifyIdx set verified [CkXmlDSig_VerifySignature $verifier 1] if {$verified != 1} then { puts [CkXmlDSig_lastErrorText $verifier] delete_CkXmlDSigGen $gen delete_CkCert $cert delete_CkStringBuilder $sbXml delete_CkXmlDSig $verifier exit } set verifyIdx [expr $verifyIdx + 1] } puts "All signatures were successfully verified." delete_CkXmlDSigGen $gen delete_CkCert $cert delete_CkStringBuilder $sbXml delete_CkXmlDSig $verifier | ||||
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.