Visual FoxPro
Visual FoxPro
Sign XML for eFactura DGI Uruguay (cfe.dgi.gub.uy)
See more XAdES Examples
Demonstrates how to sign XML for eFactura DGI (Uruguay, cfe.dgi.gub.uy).Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loGen
LOCAL loCert
LOCAL loSbXml
lnSuccess = 0
* This example assumes the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.
lnSuccess = 1
* <?xml version="1.0" encoding="utf-8"?>
* <DGICFE:EnvioCFE version="1.0" xsi:schemaLocation="http://cfe.dgi.gub.uy EnvioCFE_v1.30.xsd" xmlns:DGICFE="http://cfe.dgi.gub.uy" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
* <DGICFE:Caratula version="1.0">
* <DGICFE:RutReceptor>...</DGICFE:RutReceptor>
* <DGICFE:RUCEmisor>...</DGICFE:RUCEmisor>
* <DGICFE:Idemisor>...</DGICFE:Idemisor>
* <DGICFE:CantCFE>1</DGICFE:CantCFE>
* <DGICFE:Fecha>2020-07-29T08:24:34-03:00</DGICFE:Fecha>
* <DGICFE:X509Certificate>MIIGc...UJwsTEnI
* </DGICFE:X509Certificate>
* </DGICFE:Caratula>
* <CFE xmlns="http://cfe.dgi.gub.uy" version="1.0">
* <eFact>
* <TmstFirma>2020-07-21T12:34:01-03:00</TmstFirma>
* <Encabezado>
* <IdDoc>
* <TipoCFE>111</TipoCFE>
* <Serie>A</Serie>
* <Nro>...</Nro>
* <FchEmis>2020-07-21</FchEmis>
* <FmaPago>2</FmaPago>
* <FchVenc>2020-09-19</FchVenc>
* </IdDoc>
* <Emisor>
* <RUCEmisor>...</RUCEmisor>
* <RznSoc>...</RznSoc>
* <NomComercial>...</NomComercial>
* <GiroEmis>...</GiroEmis>
* <Telefono>(598)...</Telefono>
* <Telefono>(598)...</Telefono>
* <CorreoEmisor>...</CorreoEmisor>
* <EmiSucursal>...</EmiSucursal>
* <CdgDGISucur>7</CdgDGISucur>
* <DomFiscal>...</DomFiscal>
* <Ciudad>Montevideo</Ciudad>
* <Departamento>Montevideo</Departamento>
* </Emisor>
* <Receptor>
* <TipoDocRecep>2</TipoDocRecep>
* <CodPaisRecep>UY</CodPaisRecep>
* <DocRecep>...</DocRecep>
* <RznSocRecep>...</RznSocRecep>
* <DirRecep>...</DirRecep>
* <CiudadRecep>...</CiudadRecep>
* <DeptoRecep>...</DeptoRecep>
* <PaisRecep/>
* <CP>...</CP>
* <InfoAdicional/>
* <LugarDestEnt>...</LugarDestEnt>
* <CompraID>...</CompraID>
* </Receptor>
* <Totales>
* <TpoMoneda>UYU</TpoMoneda>
* <MntNoGrv>0.00</MntNoGrv>
* <MntExpoyAsim>0.00</MntExpoyAsim>
* <MntImpuestoPerc>0.00</MntImpuestoPerc>
* <MntIVaenSusp>0.00</MntIVaenSusp>
* <MntNetoIvaTasaMin>2701.71</MntNetoIvaTasaMin>
* <MntNetoIVATasaBasica>0.00</MntNetoIVATasaBasica>
* <MntNetoIVAOtra>0.00</MntNetoIVAOtra>
* <IVATasaMin>10.00</IVATasaMin>
* <IVATasaBasica>22.00</IVATasaBasica>
* <MntIVATasaMin>270.17</MntIVATasaMin>
* <MntIVATasaBasica>0.00</MntIVATasaBasica>
* <MntIVAOtra>0.00</MntIVAOtra>
* <MntTotal>2971.88</MntTotal>
* <MntTotRetenido>0.00</MntTotRetenido>
* <CantLinDet>1</CantLinDet>
* <MontoNF>0.11</MontoNF>
* <MntPagar>2971.99</MntPagar>
* </Totales>
* </Encabezado>
* <Detalle>
* <Item>
* <NroLinDet>1</NroLinDet>
* <IndFact>2</IndFact>
* <NomItem>...</NomItem>
* <DscItem>...</DscItem>
* <Cantidad>4.000</Cantidad>
* <UniMed/>
* <PrecioUnitario>662.185000</PrecioUnitario>
* <DescuentoPct>0.000</DescuentoPct>
* <DescuentoMonto>0.00</DescuentoMonto>
* <RecargoPct>2.000</RecargoPct>
* <RecargoMnt>52.97</RecargoMnt>
* <MontoItem>2701.71</MontoItem>
* </Item>
* </Detalle>
* <CAEData>
* <CAE_ID>90200658285</CAE_ID>
* <DNro>1015000</DNro>
* <HNro>1016999</HNro>
* <FecVenc>2022-05-07</FecVenc>
* </CAEData>
* </eFact>
* </CFE>
* </DGICFE:EnvioCFE>
loGen = CreateObject('Chilkat.XmlDSigGen')
loGen.SigLocation = "DGICFE:EnvioCFE|CFE"
loGen.SigLocationMod = 0
loGen.SigNamespacePrefix = ""
loGen.SigNamespaceUri = "http://www.w3.org/2000/09/xmldsig#"
loGen.SignedInfoCanonAlg = "C14N"
loGen.SignedInfoDigestMethod = "sha1"
* -------- Reference 1 --------
loGen.AddSameDocRef("","sha1","C14N","","")
* Provide a certificate + private key. (PFX password is test123)
loCert = CreateObject('Chilkat.Cert')
lnSuccess = loCert.LoadPfxFile("qa_data/pfx/cert_test123.pfx","test123")
IF (lnSuccess <> 1) THEN
? loCert.LastErrorText
RELEASE loGen
RELEASE loCert
CANCEL
ENDIF
loGen.SetX509Cert(loCert,1)
loGen.KeyInfoType = "X509Data"
loGen.X509Type = "IssuerSerial"
* Load XML to be signed...
loSbXml = CreateObject('Chilkat.StringBuilder')
lnSuccess = loSbXml.LoadFile("qa_data/cfe.dgi.gub.uy/sample.xml","utf-8")
IF (lnSuccess = 0) THEN
? "Failed to load input XML document."
RELEASE loGen
RELEASE loCert
RELEASE loSbXml
CANCEL
ENDIF
loGen.Behaviors = "IndentedSignature,CompactSignedXml"
* Sign the XML...
lnSuccess = loGen.CreateXmlDSigSb(loSbXml)
IF (lnSuccess <> 1) THEN
? loGen.LastErrorText
RELEASE loGen
RELEASE loCert
RELEASE loSbXml
CANCEL
ENDIF
* -----------------------------------------------
* Save the signed XML to a file.
lnSuccess = loSbXml.WriteFile("qa_output/signed.xml","utf-8",0)
? loSbXml.GetAsString()
RELEASE loGen
RELEASE loCert
RELEASE loSbXml