Skip to content

Commit

Permalink
ApplicationResponse support
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelhuertas committed Jun 30, 2019
1 parent 06c9ea4 commit 67353fa
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 4 deletions.
19 changes: 17 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@



**eFacturacionColombia_V2.Firma** es un módulo desarrollado en C#, que permite firmar los documentos XML (facturas y notas de crédito/débito) que se presentan a la DIAN de Colombia para el proceso de facturación electrónica (versión Validación Previa).
**eFacturacionColombia_V2.Firma** es un módulo desarrollado en C#, que permite firmar los documentos XML (facturas, notas de crédito/débito y eventos) que se presentan a la DIAN de Colombia para el proceso de facturación electrónica (versión Validación Previa).



Expand All @@ -17,6 +17,7 @@ La clase `FirmaElectronica` contiene un sencillo método (en tres variantes) par
// namespace del módulo
using eFacturacionColombia_V2.Firma


// crear instancia
var firma = new FirmaElectronica
{
Expand All @@ -28,24 +29,38 @@ var firma = new FirmaElectronica
// usar horario colombiano
var fecha = DateTime.Now;


// factura, variante 1:
// firmar archivo (FileInfo)
var archivoXml = new FileInfo("path/to/unsigned-invoice.xml");
var facturaFirmada = firma.FirmarFactura(archivoXml, fecha);
// guardar xml firmado
File.WriteAllBytes(facturaFirmada, "path/to/signed-invoice.xml");


// nota de crédito, variante 2:
// firmar contenido xml (string)
var contenidoXml = File.ReadAllText("path/to/unsigned-credit-note.xml");
var notaCreditoFirmada = firma.FirmarNotaCredito(contenidoXml, fecha);
// guardar xml firmado
File.WriteAllBytes(notaCreditoFirmada, "path/to/signed-credit-note.xml");


// nota de débito, variante 3:
// firmar array de bytes (byte[])
var bytesXml = File.ReadAllBytes("path/to/unsigned-debit-note.xml");
var notaDebitoFirmada = firma.FirmarNotaDebito(bytesXml, fecha);

// guardar xml firmado
File.WriteAllBytes("path/to/signed-debit-note.xml", notaDebitoFirmada);


// evento, variante 2:
// firmar contenido xml (string)
var xmlEvento = File.ReadAllText("path/to/unsigned-application-response.xml");
var eventoFirmado = firma.FirmarEvento(xmlEvento, fecha);
// guardar xml firmado
File.WriteAllBytes("path/to/signed-application-response.xml");

```

**Nota:** Los bytes resultantes del proceso no se deben modificar antes de procesarlos con el servicio web de la DIAN porque se invalidará la firma.
Expand Down
31 changes: 31 additions & 0 deletions eFacturacionColombia_V2.Firma/FirmaElectronica.cs
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,37 @@ public byte[] FirmarNotaDebito(byte[] bytesXml, DateTime fecha)
}


public byte[] FirmarEvento(FileInfo archivo, DateTime fecha)
{
var bytesXml = File.ReadAllBytes(archivo.FullName);

return FirmarEvento(bytesXml, fecha);
}

public byte[] FirmarEvento(string xml, DateTime fecha)
{
var bytesXml = Encoding.UTF8.GetBytes(xml);

return FirmarEvento(bytesXml, fecha);
}

public byte[] FirmarEvento(byte[] bytesXml, DateTime fecha)
{
var xpathExpression = new SignatureXPathExpression();
xpathExpression.Namespaces.Add("fe", "urn:oasis:names:specification:ubl:schema:xsd:ApplicationResponse-2");
xpathExpression.Namespaces.Add("cac", "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2");
xpathExpression.Namespaces.Add("cbc", "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2");
xpathExpression.Namespaces.Add("ext", "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2");
xpathExpression.Namespaces.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
xpathExpression.Namespaces.Add("sts", "dian:gov:co:facturaelectronica:Structures-2-1");
xpathExpression.Namespaces.Add("xades", "http://uri.etsi.org/01903/v1.3.2#");
xpathExpression.Namespaces.Add("xades141", "http://uri.etsi.org/01903/v1.4.1#");
xpathExpression.XPathExpression = "/fe:ApplicationResponse/ext:UBLExtensions/ext:UBLExtension[1]/ext:ExtensionContent";

return FirmarDocumento(bytesXml, fecha, xpathExpression);
}


protected byte[] FirmarDocumento(byte[] bytesXml, DateTime fecha, SignatureXPathExpression xpathExpression)
{
var xadesService = new XadesService();
Expand Down
4 changes: 2 additions & 2 deletions eFacturacionColombia_V2.Firma/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,5 @@
// Puede especificar todos los valores o usar los números de compilación y de revisión predeterminados
// mediante el carácter "*", como se muestra a continuación:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.0.0.0")]
[assembly: AssemblyFileVersion("2.0.0.0")]
[assembly: AssemblyVersion("2.1.0.0")]
[assembly: AssemblyFileVersion("2.1.0.0")]

0 comments on commit 67353fa

Please sign in to comment.