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

Código estado del DTE en el SII.

RESPUESTAS GlosaEstadoSII

Closa estado del DTE en el SII.


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.