예제 #1
0
        static void Main(string[] args)
        {
            // TODO: Add SF_API_PLATFORM = '-dos-net';

            if (args.Length < 3)
            {
                Console.Error.WriteLine(@"
Envia un archivo DTE en formato JSON al SII.

SUPERFACTURA [usuario] [contraseña] [ambiente] [archivo] [opciones]

  usuario	: Correo electrónico de su cuenta de SuperFactura.
  contraseña	: Contraseña de su cuenta de SuperFactura.
  ambiente	: Usar 'cer' para certificación o 'pro' para producción.
  archivo	: Archivo en formato JSON o XML con los datos del DTE.
  opciones	: Opcional. Cadena en formato JSON con opciones adicionales.

Documentación: https://superfactura.cl/pages/otros-lenguajes
Envíe sus consultas a: [email protected]
				"                );
                Environment.Exit(1);
            }

            string user        = args[0];
            string pass        = args[1];
            string ambiente    = args[2];
            string dteFile     = null;
            string optionsJSON = null;

            if (args.Length >= 4)
            {
                dteFile = args[3];
            }
            if (args.Length >= 5)
            {
                optionsJSON = args[4];
            }

            API     api;
            dynamic options = null;

            if (optionsJSON != null)
            {
                options = JsonConvert.DeserializeObject(optionsJSON);
            }

            if (options != null && options.url != null)
            {
                // Conexión a un servidor local
                api = new API((string)options.url, user, pass);
            }
            else
            {
                // Conexión a la nube de SuperFactura
                api = new API(user, pass);
            }

            string printer  = null;
            string saveHTML = null;

            if (options != null)
            {
                if (options.savePDF != null)
                {
                    api.SetSavePDF((string)options.savePDF);
                }

                if (options.saveXML != null)
                {
                    api.SetSaveXML((string)options.saveXML);
                }

                printer = GetAndRemove(options, "printer");
                if (printer != null)
                {
                    options["getEscPos"] = 1;
                }

                saveHTML = GetAndRemove(options, "saveHTML");
                if (saveHTML != null)
                {
                    options["getHTML"] = 1;
                }
            }

            if (optionsJSON != null)
            {
                optionsJSON = JsonConvert.SerializeObject(options);
                api.AddOptions(optionsJSON);
            }

            // string json = System.IO.File.ReadAllText(dteFile, System.Text.Encoding.GetEncoding("ISO-8859-1"));
            string json = System.IO.File.ReadAllText(dteFile, System.Text.Encoding.Default);

            try
            {
                APIResult res = api.SendDTE(json, ambiente);
                // Console.WriteLine("Se creó el DTE con folio " + res.folio);
                // {"ok":true,"folio":"125"}
                Console.WriteLine("{\"ok\":" + (res.ok ? "true" : "false") + ",\"folio\":\"" + res.folio + "\"}");

                if (printer != null)
                {
                    res.PrintEscPos(printer);
                }

                if (saveHTML != null)
                {
                    api.WriteFile(saveHTML + ".html", System.Text.Encoding.Default.GetBytes(res.html));
                }
            }
            catch (Exception e)
            {
                // IMPORTANTE: Este mensaje se debe mostrar al usuario para poder darle soporte.
                // OBS: Lo tiramos por StdOut (en vez de StdErr para asegurar de que sea capturado por los usuarios.
                Console.WriteLine(e.Message);
            }
        }
예제 #2
0
        static void Main(string[] args)
        {
            // No se envía usuario ni contraseña, ya que estos datos serán centralizados en el servidor.
            API api = new API("http://127.0.0.1:9080");

            // Enviar documentID (importante para evitar documentos duplicados en caso de falla de red y reenvío):
            // Si se envía un ID ya utilizado, se retornará el mismo documento, en vez de crear uno nuevo.
            string documentID = "F123";             // El ID debe ser único por documento. Si se envía un ID ya usado, la API retornará el documento enviado anteriormente.

            api.SetOption("documentID", documentID);

            // Solicitar muestra impresa en formato EscPos para impresoras térmicas
            api.SetOption("getEscPos", true);

            // Solicitar descarga del PDF
            // api.SetSavePDF(@"C:\Users\kripp\Desktop\dte-" + documentID);

            // Solicitar descarga del XML firmado
            // api.SetSaveXML(@"C:\Users\kripp\Desktop\dte-" + documentID);

            // Aca se costruye el JSON con el contenido del documento.
            string json = @"
{
	""Encabezado"" : {
		""IdDoc"" : {
			""TipoDTE"" : ""33""
		},
		""Emisor"" : {
			""RUTEmisor"" : ""99581150-2""
		},
		""Receptor"" : {
			""RUTRecep"" : ""1-9"",
			""RznSocRecep"" : ""Test"",
			""GiroRecep"" : ""Giro"",
			""DirRecep"" : ""Dirección"",
			""CmnaRecep"" : ""Comuna"",
			""CiudadRecep"" : ""Ciudad""
		}
	},
	""Detalles"" : [
		{
			""NmbItem"" : ""Item 1"",
			""DscItem"" : ""Descripción del item 1"",
			""QtyItem"" : ""3"",
			""UnmdItem"" : ""KG"",
			""PrcItem"" : ""100""
		},
		{
			""NmbItem"" : ""Item 2"",
			""DscItem"" : ""Descripción del item 2"",
			""QtyItem"" : ""5"",
			""UnmdItem"" : ""KG"",
			""PrcItem"" : ""65""
		}
	]
}
";

            try
            {
                APIResult res = api.SendDTE(json, "cer");

                Console.WriteLine("Se creó el DTE con folio " + res.folio);

                // Imprimir el documento a una impresora Esc/Pos conectada en LPT1
                res.PrintEscPos("LPT1:");

                // Mostrar XML firmado
                // Console.WriteLine(res.xml);
            }
            catch (Exception e)
            {
                Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory);

                // IMPORTANTE: Este mensaje se debe mostrar al usuario para poder darle soporte.
                Console.WriteLine(e.Message);
            }
        }