API Factura Electrónica Chile

Documentación Métodos C#

Agregar referencia web en el proyecto: http://www.appoctava.cl/ws/WebService.php?wsdl


Obtener Token

Registrada nuestra empresa, con el RUT y Paswoord obtenida abtendremos nuestro Token.

Services.APIFACTURAELECTRONICACHILE s = new Services.APIFACTURAELECTRONICACHILE();

// Parametros de entrada
// RUTACCESOAPI         = RUT EMPRESA REGISTRADA.
// PASSWORDACCESOAPI    = PASSWORD OBTENIDA CON EL METODO RegistraCedente.

// Establecer parametros de envío Ejemplo:
ArregloDeEstructuras resultado = s.ObtenerToken("99999999-9", "SOLICITAR PASSWORD DEMO");

XmlDocument xml = new XmlDocument();
xml.LoadXml(resultado.Any[0].OuterXml);
XmlNodeList xmllista = xml.SelectNodes("/item");

// Parametros de salida
string output = "";

foreach (XmlNode nodo in xmllista)
{
    output += "Descripción: " + nodo["DescripcionResultado"].InnerText + "\t\t\r\n";
    output += "Token: " + nodo["Token"].InnerText + "\t\t\r\n";
    output += "Fecha y Hora Token: " + nodo["FechaHoraRegistro"].InnerText + "\t\t\r\n";
    output += "Tiempo de Ejecución: " + nodo["TiempoEjecucion"].InnerText + "\t\t\r\n";
}
MessageBox.Show(output);

* El TOKEN tiene 6 horas de vida útil antes de su expiración.


RESPUESTAS DescripcionResultado:

TOK = Token Generado Correctamente.

TERR = Datos de Acceso para Generar Token Incorrectos.

TDUP = Ya Existe un Token Activo.

TBLOQ = La empresa se encuentra bloqueada para ingresar al sistema, favor contactar a su proveedor.

RESPUESTAS Token:

TOKEN


Validar Token Ext


Services.APIFACTURAELECTRONICACHILE s = new Services.APIFACTURAELECTRONICACHILE();

// Parametros de entrada
//  TOKEN         = TOKEN OBTENIDO EN MÉTODO ObtenerToken 
// TokenObtenido = valor obtenido por el método ObtenerToken.

ArregloDeEstructuras resultado = s.ValidarTokenExt(TokenObtenido);

XmlDocument xml = new XmlDocument();
xml.LoadXml(resultado.Any[0].OuterXml);
XmlNodeList xmllista = xml.SelectNodes("/item");

// Parametros de salida
string output = "";

foreach (XmlNode nodo in xmllista)
{
    output += "Descripción: " + nodo["DescripcionResultado"].InnerText + "\t\t\r\n";
    output += "Tiempo de Ejecución: " + nodo["TiempoEjecucion"].InnerText + "\t\t\r\n";
}
MessageBox.Show(output);


RESPUESTAS DescripcionResultado:

TDUP = Ya Existe un Token Activo.

TVAL = Token Válido.

TEXP = Token Expirado.

TINV = Token Invalido.


Procesa DTE

Método que permite procesar los XML (STRING) al Servidor Central .

Services.APIFACTURAELECTRONICACHILE s = new Services.APIFACTURAELECTRONICACHILE();

string xml_dte = "<DTE version=\"1.0\">"
+ "<Documento ID=\"F437T33\">"
+ "<Encabezado>"
+ "<IdDoc>"
+ "<TipoDTE>33</TipoDTE>"
+ "<Folio>1</Folio>"
+ "<FchEmis>2013-10-23</FchEmis>"
+ "</IdDoc>"
+ "<Emisor>"
+ "<RUTEmisor>99999999-9</RUTEmisor>"
+ "<RznSoc>EMPRESA DEMO SPA</RznSoc>"
+ "<GiroEmis>DESARROLLO DE SOFTWARE</GiroEmis>"
+ "<Acteco>513100</Acteco>"
+ "<DirOrigen>BASCUNAN GUERRERO 57 LOCAL 1</DirOrigen>"
+ "<CmnaOrigen>SANTIAGO</CmnaOrigen>"
+ "<CiudadOrigen>SANTIAGO</CiudadOrigen>"
+ "</Emisor>"
+ "<Receptor>"
+ "<RUTRecep>76024726-K</RUTRecep>"
+ "<RznSocRecep>PALOBLANCO SA</RznSocRecep>"
+ "<GiroRecep>PRODUCTORA DE SERVICIOS CULTURALES</GiroRecep>"
+ "<DirRecep>AV LA PAZ 451 502A</DirRecep>"
+ "<CmnaRecep>QUILPUE</CmnaRecep>"
+ "<CiudadRecep>QUILPUE</CiudadRecep>"
+ "</Receptor>"
+ "<Totales>"
+ "<MntNeto>63531</MntNeto>"
+ "<MntExe>0</MntExe>"
+ "<TasaIVA>19</TasaIVA>"
+ "<IVA>12071</IVA>"
+ "<MntTotal>75602</MntTotal>"
+ "</Totales>"
+ "</Encabezado>"
+ "<Detalle>"
+ "<NroLinDet>1</NroLinDet>"
+ "<NmbItem>POLERA PERSONALIZADA</NmbItem>"
+ "<QtyItem>27.0</QtyItem>"
+ "<UnmdItem>UN</UnmdItem>"
+ "<PrcItem>2353.0</PrcItem>"
+ "<MontoItem>63531</MontoItem>"
+ "</Detalle>"
+ "<Detalle>"
+ "<NroLinDet>2</NroLinDet>"
+ "<NmbItem>POLERA PERSONALIZADA 2</NmbItem>"
+ "<QtyItem>27.0</QtyItem>"
+ "<UnmdItem>UN</UnmdItem>"
+ "<PrcItem>2353.0</PrcItem>"
+ "<MontoItem>63531</MontoItem>"
+ "</Detalle>"
+ "<Detalle>"
+ "<NroLinDet>3</NroLinDet>"
+ "<NmbItem>POLERA PERSONALIZADA 3</NmbItem>"
+ "<QtyItem>27.0</QtyItem>"
+ "<UnmdItem>UN</UnmdItem>"
+ "<PrcItem>2353.0</PrcItem>"
+ "<MontoItem>63531</MontoItem>"
+ "</Detalle>"
+ "</Documento>"
+ "</DTE>";

string xml_adicional = "FORMATO XML ADICIONAL QUE DEBE SER SOLICITADO A SU PROVEEDOR."; 

// Parametros de entrada
// ASIGNAFOLIO   = True: ASIGA CORRELATIVO OCTAVA SOFTWARE- False: ASIGNA CORRELATIVO SEGUN NODO <Folio></Folio> EN EL XML DTE.
// TIPO IMPRESO = 1:COPIA ORIGINAL - 2:COPIA CEDIBLE.
// AMBIENTE = 1:PRODUCCIÓN - 0:PRUEBAS
// TokenObtenido = TOKEN OBTENIDO POR EL MÉDOTO INICIAL.

ArregloDeEstructuras resultado = s.ProcesaDte(xml_dte,xml_adicional,"1","1-2", "0", TokenObtenido);

XmlDocument xml = new XmlDocument();
xml.LoadXml(resultado.Any[0].OuterXml);
XmlNodeList xmllista = xml.SelectNodes("/item");

// Parametros de salida
string output = "";

foreach (XmlNode nodo in xmllista)
{
    output += "Descripción: " + nodo["DescripcionResultado"].InnerText + "\t\t\r\n";
    output += "ID Resultado FE: " + nodo["IdResultadoFE"].InnerText + "\t\t\r\n";
    output += "Resultado FE: " + nodo["ResultadoFE"].InnerText + "\t\t\r\n";
    output += "Url Pdf: " + nodo["UrlPdf"].InnerText + "\t\t\r\n";
    output += "Folio Asignado: " + nodo["FolioAsignado"].InnerText + "\t\t\r\n";
    output += "Tiempo de Ejecución: " + nodo["TiempoEjecucion"].InnerText + "\t\t\r\n";
}
MessageBox.Show(output);


RESPUESTAS DescripcionResultado:

TDUP = Ya Existe un Token Activo.

TVAL = Token Válido.

TEXP = Token Expirado.

TINV = Token Invalido.

RESPUESTAS (IdResultadoFE - ResultadoFE)

Número de resultado - Descripción de resultado

Ej: 0 - DTE procesado correctamente.

RESPUESTAS UrlPdf

Ruta del PDF procesado.


Consulta PDF

Método que permite Consultar los PDF (URL) al Servidor Central .

Services.APIFACTURAELECTRONICACHILE s = new Services.APIFACTURAELECTRONICACHILE();

// Parametros de entrada
// TIPODTE   = TIPO DE DOCUMENTO TRIBUTARIO.
// FOLIODTE  = NÚMERO DE FOLIO DEL DTE.
// AMBIENTE = 1:PRODUCCIÓN - 0:PRUEBAS
// TokenObtenido = valor obtenido por el método ObtenerToken.

ArregloDeEstructuras resultado = s.ConsultaPdf("33", "1", "0", TokenObtenido);

XmlDocument xml = new XmlDocument();
xml.LoadXml(resultado.Any[0].OuterXml);
XmlNodeList xmllista = xml.SelectNodes("/item");

// Parametros de salida
string output = "";

foreach (XmlNode nodo in xmllista)
{
    output += "Descripción: " + nodo["DescripcionResultado"].InnerText + "\t\t\r\n";
    output += "ID Resultado FE: " + nodo["IdResultadoFE"].InnerText + "\t\t\r\n";
    output += "Resultado FE: " + nodo["ResultadoFE"].InnerText + "\t\t\r\n";
    output += "Url Pdf: " + nodo["UrlPdf"].InnerText + "\t\t\r\n";
    output += "Tiempo de Ejecución: " + nodo["TiempoEjecucion"].InnerText + "\t\t\r\n";
}
MessageBox.Show(output);


RESPUESTAS DescripcionResultado:

TDUP = Ya Existe un Token Activo.

TVAL = Token Válido.

TEXP = Token Expirado.

TINV = Token Invalido.

RESPUESTAS (IdResultadoFE - ResultadoFE)

Número de resultado - Descripción de resultado

Ej: 0 - Impreso DTE generado correctamente.

RESPUESTAS UrlPdf

Ruta del PDF consultado.


Consulta XML

Método que permite Consultar los XML (URL) al Servidor Central .

Services.APIFACTURAELECTRONICACHILE s = new Services.APIFACTURAELECTRONICACHILE();

// Parametros de entrada
// TIPODTE   = TIPO DE DOCUMENTO TRIBUTARIO.
// FOLIODTE  = NÚMERO DE FOLIO DEL DTE.
// AMBIENTE = 1:PRODUCCIÓN - 0:PRUEBAS
// TokenObtenido = valor obtenido por el método ObtenerToken.

ArregloDeEstructuras resultado = s.ConsultaXml("33", "1", "0", TokenObtenido);

XmlDocument xml = new XmlDocument();
xml.LoadXml(resultado.Any[0].OuterXml);
XmlNodeList xmllista = xml.SelectNodes("/item");

// Parametros de salida
string output = "";

foreach (XmlNode nodo in xmllista)
{
    output += "Descripción: " + nodo["DescripcionResultado"].InnerText + "\t\t\r\n";
    output += "ID Resultado FE: " + nodo["IdResultadoFE"].InnerText + "\t\t\r\n";
    output += "Resultado FE: " + nodo["ResultadoFE"].InnerText + "\t\t\r\n";
    output += "Url Xml SII: " + nodo["UrlXmlSii"].InnerText + "\t\t\r\n";
    output += "Url Xml Receptor: " + nodo["UrlXmlReceptor"].InnerText + "\t\t\r\n";
    output += "Tiempo de Ejecución: " + nodo["TiempoEjecucion"].InnerText + "\t\t\r\n";
}
MessageBox.Show(output);


RESPUESTAS DescripcionResultado:

TDUP = Ya Existe un Token Activo.

TVAL = Token Válido.

TEXP = Token Expirado.

TINV = Token Invalido.

RESPUESTAS (IdResultadoFE - ResultadoFE)

Número de resultado - Descripción de resultado

Ej: 0 - XML DTE SII retornado correctamente.

RESPUESTAS UrlXmlSii

Ruta del xml enviado al SII consultado.

RESPUESTAS UrlXmlReceptor

Ruta del xml enviado al receptor consultado.


Consulta Estado DTE SII

Método que permite Consultar el estado en el SII de los DTEs.

Services.APIFACTURAELECTRONICACHILE s = new Services.APIFACTURAELECTRONICACHILE();

// Parametros de entrada
// TIPODTE   = TIPO DE DOCUMENTO TRIBUTARIO.
// FOLIODTE  = NÚMERO DE FOLIO DEL DTE.
// AMBIENTE = 1:PRODUCCIÓN - 0:PRUEBAS
// TokenObtenido = valor obtenido por el método ObtenerToken.

ArregloDeEstructuras resultado = s.ConsultaEstadoDte("33", "1", "0", TokenObtenido);

XmlDocument xml = new XmlDocument();
xml.LoadXml(resultado.Any[0].OuterXml);
XmlNodeList xmllista = xml.SelectNodes("/item");

// Parametros de salida
string output = "";

foreach (XmlNode nodo in xmllista)
{
    output += "Descripción: " + nodo["DescripcionResultado"].InnerText + "\t\t\r\n";
    output += "ID Resultado FE: " + nodo["IdResultadoFE"].InnerText + "\t\t\r\n";
    output += "Resultado FE: " + nodo["ResultadoFE"].InnerText + "\t\t\r\n";
    output += "Codigo Estado SII: " + nodo["CodEstadoSII"].InnerText + "\t\t\r\n";
    output += "Glosa Estado SII: " + nodo["GlosaEstadoSII"].InnerText + "\t\t\r\n";
    output += "Tiempo de Ejecución: " + nodo["TiempoEjecucion"].InnerText + "\t\t\r\n";
}
MessageBox.Show(output);


RESPUESTAS DescripcionResultado:

TDUP = Ya Existe un Token Activo.

TVAL = Token Válido.

TEXP = Token Expirado.

TINV = Token Invalido.

RESPUESTAS (IdResultadoFE - ResultadoFE)

Número de resultado - Descripción de resultado

Ej: 0 - Estado DTE SII retornado correctamente.

RESPUESTAS (CodEstadoSII - GlosaEstadoSII)

Código estado del DTE en el SII - Closa estado del DTE en el SII.

* Tabla informativa

CodEstadoSII GlosaEstadoSII TIPO DTE
0 Documento Recibido por el SII. Datos Coinciden con los Registrados TODOS MENOS BOLETA
1 Documento Recibido por el SII pero Datos NO Coinciden con los registrados TODOS MENOS BOLETA
3 Documento No Recibido por el SII TODOS MENOS BOLETA
4 Documento No Autorizado TODOS MENOS BOLETA
5 Documento Anulado TODOS MENOS BOLETA
11 Existe Nota de Credito que Modifica Textos Documento TODOS MENOS BOLETA
12 Existe Nota de Debito que Modifica Montos Documento TODOS MENOS BOLETA
13 Existe Nota de Credito que Modifica Montos Documento TODOS MENOS BOLETA
14 Existe Nota de Debito que Anula Documento TODOS MENOS BOLETA
15 Existe Nota de Credito que Anula Documento TODOS MENOS BOLETA
DOK Documento Recibido por el SII. Datos Coinciden con los Registrados SOLO BOLETA
FAN Documento Anulado SOLO BOLETA
FAU Documento No Recibido por el SII SOLO BOLETA

Notifica DTE

Método que permite notificar a los receptores los DTEs a su casila electrónica registrada en el SII.

Services.APIFACTURAELECTRONICACHILE s = new Services.APIFACTURAELECTRONICACHILE();



// Parametros de entrada

// TIPODTE   = TIPO DE DOCUMENTO TRIBUTARIO.

// FOLIODTE  = NÚMERO DE FOLIO DEL DTE.

// ADJUNTARPDF = 1: ADJUNTA PDF - 0: NO ADJUNTA PDF

// EMAILCC = EMAIL COPIA NOTIFICACIÓN.

// TokenObtenido = valor obtenido por el método ObtenerToken.



ArregloDeEstructuras resultado = s.NotificaDte("33", "230", "0", "moisesoe@gmail.com", TokenObtenido);



XmlDocument xml = new XmlDocument();

xml.LoadXml(resultado.Any[0].OuterXml);

XmlNodeList xmllista = xml.SelectNodes("/item");



// Parametros de salida

string output = "";



foreach (XmlNode nodo in xmllista)

{

    output += "Descripción: " + nodo["DescripcionResultado"].InnerText + "\t\t\r\n";

    output += "ID Resultado FE: " + nodo["IdResultadoFE"].InnerText + "\t\t\r\n";

    output += "Resultado FE: " + nodo["ResultadoFE"].InnerText + "\t\t\r\n";

    output += "Email Receptor: " + nodo["EmailNotificacion"].InnerText + "\t\t\r\n";

    output += "Tiempo de Ejecución: " + nodo["TiempoEjecucion"].InnerText + "\t\t\r\n";

}

MessageBox.Show(output);


* Este método solo funciona con DTE procesados en ambiente de producción.

RESPUESTAS DescripcionResultado:

TDUP = Ya Existe un Token Activo.

TVAL = Token Válido.

TEXP = Token Expirado.

TINV = Token Invalido.

RESPUESTAS (IdResultadoFE - ResultadoFE)

Número de resultado - Descripción de resultado

Ej: 0 - DTE notificado correctamente al receptor.

RESPUESTAS EmailNotificacion

Email del receptor al cual fue notificado el DTE.


Carga Folio

Método que permite cargar el xml de los Folios(CAF = Código de Autorización de Folios) al servidor central.

Services.APIFACTURAELECTRONICACHILE s = new Services.APIFACTURAELECTRONICACHILE();
            
String stringcaf = "<AUTORIZACION>"
+ "<CAF version=\"1.0\">"
+ "<DA>"
+ "  <RE>99999999-9</RE>"
+ " <RS>demo spa</RS>"
+ "<TD>33</TD>"
+ "<RNG>"
+ "   <D>1</D>"
+ "   <H>55</H>"
+ " </RNG>"
+ " <FA>2017-01-03</FA>"
+ " <RSAPK>"
+ "   <M>uDa0w829Kpc3mgTipZFM045+74IT86I0CYXJv+qjq4gpocRCsG8gpVA+h4QwXw6KEgzcfQU9sfTyplZT8zHAfQ==</M>"
+ "   <E>Aw==</E>"
+ " </RSAPK>"
+ "  <IDK>55</IDK>"
+ " </DA>"
+ " <FRMA algoritmo=\"SHA1withRSA\">XaLXfU0CCMc68/5iMQwsz6UxLh6VDLWZCaHIsBVbXDNsMWdzbcIR8IYj9mXP4TsNyw8xS6UuzO+sEMwdlfpHLw==</FRMA>"
+ "</CAF>"
+ "<RSASK>-----BEGIN RSA PRIVATE KEY-----"
+ "MIIBOgIBAAJBALg2tMPNvSqXN5oE4qWRTNOOfu+CE/OiNAmFyb/qo6uIKaHEQrBv"
+ "IKVQPoeEMF8OihIM3H0FPbH08qZWU/MxwH0CAQMCQHrPIy0z03G6JRFYlxkLiI0J"
+ "qfUBYqJsIrED29VHF8eu+Jl3ts5DK8HsSSvEuTwSlf/gN74FFY2Mv82+VDEB+isC"
+ "IQDxSFOAvvI3VQ6zc+Q1GvMVBoBVj9ypMxsAExIKmj8U8QIhAMNzPS+8GCetXx1R"
+ "+OVp/5QLvDNQIPQqhtLepssPb7RNAiEAoNriVdSheji0d6KYI2dMuK8AOQqTG3dn"
+ "VWIMBxF/Y0sCIQCCTNN1KBAac5S+NqXuRqpisn13isCixwSMlG8yCkp4MwIhAM8F"
+ "HtEbN4/3xezHqdpfRdNj782tEfXqb24N0GHiqpgW"
+ "-----END RSA PRIVATE KEY-----"
+ " </RSASK>"
+ "  <RSAPUBK>-----BEGIN PUBLIC KEY-----"
+ "MFowDQYJKoZIhvcNAQEBBQADSQAwRgJBALg2tMPNvSqXN5oE4qWRTNOOfu+CE/Oi"
+ "NAmFyb/qo6uIKaHEQrBvIKVQPoeEMF8OihIM3H0FPbH08qZWU/MxwH0CAQM="
+ " -----END PUBLIC KEY-----"
+ " </RSAPUBK>"
+ " </AUTORIZACION>";

// Parametros de entrada
// STRINGCAF  = STRING DEL XML CAF.
// AMBIENTE = 1:PRODUCCIÓN - 0:PRUEBAS
// TokenObtenido = valor obtenido por el método ObtenerToken.

ArregloDeEstructuras resultado = s.CargaFolio(stringcaf, "1", TokenObtenido);

XmlDocument xml = new XmlDocument();
xml.LoadXml(resultado.Any[0].OuterXml);
XmlNodeList xmllista = xml.SelectNodes("/item");

// Parametros de salida
string output = "";

foreach (XmlNode nodo in xmllista)
{
    output += "Descripción: " + nodo["DescripcionResultado"].InnerText + "\t\t\r\n";
    output += "ID Resultado FE: " + nodo["IdResultadoFE"].InnerText + "\t\t\r\n";
    output += "Resultado FE: " + nodo["ResultadoFE"].InnerText + "\t\t\r\n";
    output += "Tiempo de Ejecución: " + nodo["TiempoEjecucion"].InnerText + "\t\t\r\n";
}
MessageBox.Show(output);


* Este método solo funciona con DTE procesados en ambiente de producción.

RESPUESTAS DescripcionResultado:

TDUP = Ya Existe un Token Activo.

TVAL = Token Válido.

TEXP = Token Expirado.

TINV = Token Invalido.

RESPUESTAS (IdResultadoFE - ResultadoFE)

Número de resultado - Descripción de resultado

Ej: 0 - Caf cargado correctamente.