private void btnActivar_Click(object sender, EventArgs e)
        {
            string fileCer = txtCer.Text;
            string fileKey = txtKey.Text;
            string keyPass = txtPass.Text;

            Cursor.Current = Cursors.WaitCursor;
            WSConecFM.Resultados r_wsconect = new WSConecFM.Resultados();

            /*  CREAR LA CONFIGURACION DE CONEXION CON EL SERVICIO SOAP
             * *    Los parametros configurables son:
             * *    1.- string UserID; Nombre de usuario que se utiliza para la conexion con SOAP
             * *    2.- string UserPass; Contraseña del usuario para conectarse a SOAP
             * *    3.- string emisorRFC; RFC del contribuyente
             * *    4.- string archivoKey; archivo llave
             * *    5.- string strCer; archivo de certificado
             * *    6.- string clave; contraseña del archivo llave del certificado
             * *    7.- string urlActivarCancelacion; URL de la conexion con SOAP
             * La configuracion inicial es para el ambiente de pruebas
            */
            activarCancelacion activarC = new activarCancelacion();
            /*
             * Si desea cambiar alguna configuracion realizarla solo realizar lo siguiente
             * activarC.UserID = "Miusuario";  Por poner un ejemplo
            */
            activarC.archivoCer = fileCer;
            activarC.archivoKey = fileKey;
            activarC.clave = keyPass;

            ActivarCancelado activation = new ActivarCancelado();
            r_wsconect = activation.Activacion(activarC);
            Cursor.Current = Cursors.Default;
            MessageBox.Show(r_wsconect.message);
            Close();
        }
        /// <summary>
        /// Metodo para generar el comprobante mediante un Layout
        /// </summary>
        private void cmdTimbrarL_Click(object sender, EventArgs e)
        {
            /*
              * * Puedes encontrar más ejemplos y documentación sobre estos archivos aquí. (Factura, Nota de Crédito, Recibo de Nómina y más...)
              * * Link: https://github.com/facturacionmoderna/Comprobantes
              * * Nota: Si deseas información adicional contactanos en www.facturacionmoderna.com
            */

            Cursor.Current = Cursors.WaitCursor;
            string layoutFile = txtLayout.Text;
            string currentPath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName;
            string path = currentPath + "\\resultados";
            WSConecFM.Resultados r_wsconect = new WSConecFM.Resultados();

            // Crear instancia, para los para metros enviados a requestTimbradoCFDI
            requestTimbrarCFDI reqt = new requestTimbrarCFDI();
            reqt.proxy_url = "http://207.91.10.234";
            reqt.proxy_port = 8080;
            reqt.proxy_user = "******";
            reqt.proxy_pass = "******";

            Timbrado timbra = new Timbrado();
            r_wsconect = timbra.Timbrar(layoutFile, reqt);
            if (!r_wsconect.status)
            {
                MessageBox.Show(r_wsconect.message);
                Environment.Exit(-1);
            }
            byte[] byteXML = System.Convert.FromBase64String(r_wsconect.xmlBase64);
            System.IO.FileStream swxml = new System.IO.FileStream((path + ("\\" + (r_wsconect.uuid + ".xml"))), System.IO.FileMode.Create);
            swxml.Write(byteXML, 0, byteXML.Length);
            swxml.Close();
            if (reqt.generarCBB)
            {
                byte[] byteCBB = System.Convert.FromBase64String(r_wsconect.cbbBase64);
                System.IO.FileStream swcbb = new System.IO.FileStream((path + ("\\" + (r_wsconect.uuid + ".png"))), System.IO.FileMode.Create);
                swcbb.Write(byteCBB, 0, byteCBB.Length);
                swcbb.Close();
            }
            if (reqt.generarPDF)
            {
                byte[] bytePDF = System.Convert.FromBase64String(r_wsconect.pdfBase64);
                System.IO.FileStream swpdf = new System.IO.FileStream((path + ("\\" + (r_wsconect.uuid + ".pdf"))), System.IO.FileMode.Create);
                swpdf.Write(bytePDF, 0, bytePDF.Length);
                swpdf.Close();
            }
            if (reqt.generarTXT)
            {
                byte[] byteTXT = System.Convert.FromBase64String(r_wsconect.txtBase64);
                System.IO.FileStream swtxt = new System.IO.FileStream((path + ("\\" + (r_wsconect.uuid + ".txt"))), System.IO.FileMode.Create);
                swtxt.Write(byteTXT, 0, byteTXT.Length);
                swtxt.Close();
            }

            MessageBox.Show("Comprobante guardado en " + path + "\\");
            Cursor.Current = Cursors.Default;
            Close();
        }
        /// <summary>
        /// Metodo para cancelar un comprobante por medio de su UUID
        /// </summary>
        private void cmdCancelarUUID_Click(object sender, EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            string uuid = txtUUID.Text;

            WSConecFM.Resultados r_wsconect = new WSConecFM.Resultados();

            requestCancelarCFDI reqc = new requestCancelarCFDI();

            Cancelado conex = new Cancelado();
            r_wsconect = conex.Cancelar(reqc, uuid);

            MessageBox.Show(r_wsconect.message);
            Cursor.Current = Cursors.Default;
            Close();
        }
Example #4
0
        private void btnActivar_Click(object sender, EventArgs e)
        {
            string fileCer = txtCer.Text;
            string fileKey = txtKey.Text;
            string keyPass = txtPass.Text;

            Cursor.Current = Cursors.WaitCursor;
            WSConecFM.Resultados r_wsconect = new WSConecFM.Resultados();

            /*  CREAR LA CONFIGURACION DE CONEXION CON EL SERVICIO SOAP
             * *    Los parametros configurables son:
             * *    1.- string UserID; Nombre de usuario que se utiliza para la conexion con SOAP
             * *    2.- string UserPass; Contraseña del usuario para conectarse a SOAP
             * *    3.- string emisorRFC; RFC del contribuyente
             * *    4.- string archivoKey; archivo llave
             * *    5.- string strCer; archivo de certificado
             * *    6.- string clave; contraseña del archivo llave del certificado
             * *    7.- string urlActivarCancelacion; URL de la conexion con SOAP
             * La configuracion inicial es para el ambiente de pruebas
             */
            activarCancelacion activarC = new activarCancelacion();

            /*
             * Si desea cambiar alguna configuracion realizarla solo realizar lo siguiente
             * activarC.UserID = "Miusuario";  Por poner un ejemplo
             */
            activarC.archivoCer = fileCer;
            activarC.archivoKey = fileKey;
            activarC.clave      = keyPass;

            ActivarCancelado activation = new ActivarCancelado();

            r_wsconect     = activation.Activacion(activarC);
            Cursor.Current = Cursors.Default;
            MessageBox.Show(r_wsconect.message);
            Close();
        }
        public Resultados Timbrar(string layout, WSConecFM.requestTimbrarCFDI RequestTimbrarCFDI)
        {
            Resultados result = new Resultados();

            try
            {
                if (File.Exists(layout))
                {
                    StreamReader objReader = new StreamReader(layout, Encoding.UTF8);
                    layout = objReader.ReadToEnd();
                    objReader.Close();
                }

                // Codificar a base 64 el layout
                layout = Convert.ToBase64String(Encoding.UTF8.GetBytes(layout));

                // Agregar el XML codificado en base64 a la peticion SOAP
                RequestTimbrarCFDI.text2CFDI = layout;

                // indicar que no deseamos esperar confirmación del server, sino que debe enviar los datos al mismo tiempo que se realiza la solicitud.
                System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidarCertificado);

                // set this before any web requests or WCF calls
                if (RequestTimbrarCFDI.proxy_url != "") {
                    WebRequest.DefaultWebProxy = new WebProxy(new Uri(RequestTimbrarCFDI.proxy_url + ":" + RequestTimbrarCFDI.proxy_port))
                    {
                        Credentials = new NetworkCredential(RequestTimbrarCFDI.proxy_user, RequestTimbrarCFDI.proxy_pass),
                    };
                }

                //  Conexion con el WS de Facturacion Moderna
                BasicHttpBinding binding = new BasicHttpBinding();
                setBinding(binding);

                // Direccion del servicio SOAP de Prueba
                EndpointAddress endpoint = new EndpointAddress(RequestTimbrarCFDI.urlTimbrado);

                // Crear instancia al servisio SOAP de Timbrado
                WSLayoutFacturacionModerna.Timbrado_ManagerPort WSFModerna = new WSLayoutFacturacionModerna.Timbrado_ManagerPortClient(binding, endpoint);

                // Ejecutar servicio de Timbrado
                Object objResponse = WSFModerna.requestTimbrarCFDI(RequestTimbrarCFDI);

                if (objResponse != null)
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    XmlDeclaration xmlDeclaration;
                    XmlElement xmlElementBody;
                    xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "uft-8", "no");
                    xmlElementBody = xmlDoc.CreateElement("Container");
                    xmlDoc.InsertBefore(xmlElementBody, xmlDoc.DocumentElement);
                    XmlElement xmlParentNode;
                    xmlParentNode = xmlDoc.CreateElement("responseSoap");
                    xmlDoc.DocumentElement.PrependChild(xmlParentNode);
                    XmlNode[] nodosXmlResponse = (XmlNode[])objResponse;
                    foreach (XmlNode nodo in nodosXmlResponse)
                    {
                        if (nodo.InnerText.Length >= 1)
                        {
                            XmlElement xmlElemetResponse;
                            xmlElemetResponse = xmlDoc.CreateElement(nodo.Name.ToString());
                            XmlText xmlTextNode;
                            xmlTextNode = xmlDoc.CreateTextNode(nodo.InnerText.ToString());
                            xmlParentNode.AppendChild(xmlElemetResponse);
                            xmlElemetResponse.AppendChild(xmlTextNode);
                        }
                    }

                    //-->>Accedemos a los nodos de la respuesta del xml para obenter los valores retornados en base64 (xml, pdf, cbb, txt)
                    XmlElement xmlElementCFDI;
                    //-->>Xml certificado (CFDI)
                    xmlElementCFDI = (XmlElement)xmlDoc.GetElementsByTagName("xml").Item(0);

                    // Obtener UUID del Comprobante
                    XmlDocument cfdiXML = new XmlDocument();
                    byte[] binary = Convert.FromBase64String(xmlElementCFDI.InnerText);
                    String strOriginal = System.Text.Encoding.UTF8.GetString(binary);
                    cfdiXML.LoadXml(strOriginal);
                    XmlElement xmlElementTimbre;
                    xmlElementTimbre = (XmlElement)cfdiXML.GetElementsByTagName("tfd:TimbreFiscalDigital").Item(0);
                    result.uuid = xmlElementTimbre.GetAttribute("UUID");

                    result.xmlBase64 = xmlElementCFDI.InnerText;

                    //-->>Representación impresa del CFDI en formato PDF
                    if (RequestTimbrarCFDI.generarPDF)
                    {
                        XmlElement xmlElementPDF = (XmlElement)xmlDoc.GetElementsByTagName("pdf").Item(0);
                        result.pdfBase64 = xmlElementPDF.InnerText;
                    }

                    //-->>Representación impresa del CFDI en formato TXT
                    if (RequestTimbrarCFDI.generarTXT)
                    {
                        XmlElement xmlElementTXT = (XmlElement)xmlDoc.GetElementsByTagName("txt").Item(0);
                        result.txtBase64 = xmlElementTXT.InnerText;
                    }

                    //-->>Representación impresa del CFDI en formato PNG
                    if (RequestTimbrarCFDI.generarCBB)
                    {
                        XmlElement xmlElementCBB = (XmlElement)xmlDoc.GetElementsByTagName("png").Item(0);
                        result.cbbBase64 = xmlElementCBB.InnerText;
                    }
                    result.code = "T000";
                    result.message = "Comprobante Generado con exito";
                    result.status = true;
                    return result;
                }
                else
                {
                    result.code = "T00N";
                    result.message = "El servicio de timbrado respondio con NULL";
                    result.status = false;
                    return result;
                }
            }
            catch(Exception e)
            {
                result.code = "EX-001";
                result.message = "Error: " + e.Message;
                result.status = false;
                return result;
            }
        }
        public Resultados Activacion(WSConecFM.activarCancelacion activarCancelacion)
        {
            Resultados result = new Resultados();
            string cer = activarCancelacion.archivoCer;
            string key = activarCancelacion.archivoKey;
            string clv = activarCancelacion.clave;
            try
            {
                if (File.Exists(cer))
                {
                    X509Certificate2 cert = new X509Certificate2(cer);
                    cer = Convert.ToBase64String(cert.Export(X509ContentType.Cert), Base64FormattingOptions.InsertLineBreaks);
                    cer = cer.Replace("\n", "");
                } else
                    // Codificar a base 64 el contenido del certificado
                    cer = Convert.ToBase64String(Encoding.UTF8.GetBytes(cer));
                // Agregar el certificado codificado en base64 a la peticion SOAP
                activarCancelacion.archivoCer = cer;

                if (File.Exists(key))
                {
                    byte[] llavePrivadaBytes = System.IO.File.ReadAllBytes(@key);
                    key = Convert.ToBase64String(llavePrivadaBytes);

                } else
                    // Codificar a base 64 el contenido del archivo  key
                    key = Convert.ToBase64String(Encoding.UTF8.GetBytes(key));
                // Agregar el certificado codificado en base64 a la peticion SOAP
                activarCancelacion.archivoKey = key;

                //  Conexion con el WS de Facturacion Moderna
                BasicHttpBinding binding = new BasicHttpBinding();
                setBinding(binding);

                // Direccion del servicio SOAP de Prueba
                EndpointAddress endpoint = new EndpointAddress(activarCancelacion.urlActivarCancelacion);

                // Crear instancia al servisio SOAP de cancelado
                WSLayoutFacturacionModerna.Timbrado_ManagerPort WSFModerna = new WSLayoutFacturacionModerna.Timbrado_ManagerPortClient(binding, endpoint);

                // Ejecutar servicio de Cancelado
                Object response = WSFModerna.activarCancelacion(activarCancelacion);
                if (response != null)
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    XmlDeclaration xmlDeclaration;
                    XmlElement xmlElementBody;
                    xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "uft-8", "no");
                    xmlElementBody = xmlDoc.CreateElement("Container");
                    xmlDoc.InsertBefore(xmlElementBody, xmlDoc.DocumentElement);
                    XmlElement xmlParentNode;
                    xmlParentNode = xmlDoc.CreateElement("responseSoap");
                    xmlDoc.DocumentElement.PrependChild(xmlParentNode);
                    XmlNode[] nodosXmlResponse = (XmlNode[])response;
                    foreach (XmlNode nodo in nodosXmlResponse)
                    {
                        if (nodo.InnerText.Length >= 1)
                        {
                            XmlElement xmlElemetResponse;
                            xmlElemetResponse = xmlDoc.CreateElement(nodo.Name.ToString());
                            XmlText xmlTextNode;
                            xmlTextNode = xmlDoc.CreateTextNode(nodo.InnerText.ToString());
                            xmlParentNode.AppendChild(xmlElemetResponse);
                            xmlElemetResponse.AppendChild(xmlTextNode);
                        }
                    }
                    XmlElement xmlElementMsg = (XmlElement)xmlDoc.GetElementsByTagName("mensaje").Item(0);
                    XmlElement xmlElementCode = (XmlElement)xmlDoc.GetElementsByTagName("codigo").Item(0);
                    result.message = xmlElementMsg.InnerText;
                    result.code = xmlElementCode.InnerText;
                    result.status = true;
                    return result;
                }
                else
                {
                    result.code = "C00N";
                    result.message = "El servicio de Cancelado respondio con NULL";
                    result.status = false;
                    return result;
                }
            }
            catch (Exception e)
            {
                result.code = "EX-001";
                result.message = "Error: " + e.Message;
                result.status = false;
                return result;
            }
        }
        public Resultados Cancelar(WSConecFM.requestCancelarCFDI RequestCancelarCFDI, string uuid)
        {
            Resultados result = new Resultados();

            try
            {
                RequestCancelarCFDI.uuid = uuid;

                // set this before any web requests or WCF calls
                if (RequestCancelarCFDI.proxy_url != "")
                {
                    WebRequest.DefaultWebProxy = new WebProxy(new Uri(RequestCancelarCFDI.proxy_url + ":" + RequestCancelarCFDI.proxy_port))
                    {
                        Credentials = new NetworkCredential(RequestCancelarCFDI.proxy_user, RequestCancelarCFDI.proxy_pass),
                    };
                }

                //  Conexion con el WS de Facturacion Moderna
                BasicHttpBinding binding = new BasicHttpBinding();
                setBinding(binding);

                // Direccion del servicio SOAP de Prueba
                EndpointAddress endpoint = new EndpointAddress(RequestCancelarCFDI.urlCancelado);

                // Crear instancia al servisio SOAP de cancelado
                WSLayoutFacturacionModerna.Timbrado_ManagerPort WSFModerna = new WSLayoutFacturacionModerna.Timbrado_ManagerPortClient(binding, endpoint);

                // Ejecutar servicio de Cancelado
                Object response = WSFModerna.requestCancelarCFDI(RequestCancelarCFDI);
                if (response != null)
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    XmlDeclaration xmlDeclaration;
                    XmlElement xmlElementBody;
                    xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "uft-8", "no");
                    xmlElementBody = xmlDoc.CreateElement("Container");
                    xmlDoc.InsertBefore(xmlElementBody, xmlDoc.DocumentElement);
                    XmlElement xmlParentNode;
                    xmlParentNode = xmlDoc.CreateElement("responseSoap");
                    xmlDoc.DocumentElement.PrependChild(xmlParentNode);
                    XmlNode[] nodosXmlResponse = (XmlNode[])response;
                    foreach (XmlNode nodo in nodosXmlResponse)
                    {
                        if (nodo.InnerText.Length >= 1)
                        {
                            XmlElement xmlElemetResponse;
                            xmlElemetResponse = xmlDoc.CreateElement(nodo.Name.ToString());
                            XmlText xmlTextNode;
                            xmlTextNode = xmlDoc.CreateTextNode(nodo.InnerText.ToString());
                            xmlParentNode.AppendChild(xmlElemetResponse);
                            xmlElemetResponse.AppendChild(xmlTextNode);
                        }
                    }
                    XmlElement xmlElementMsg = (XmlElement)xmlDoc.GetElementsByTagName("Message").Item(0);
                    result.message = xmlElementMsg.InnerText;
                    result.code = "C000";
                    result.status = true;
                    return result;
                }
                else
                {
                    result.code = "C00N";
                    result.message = "El servicio de Cancelado respondio con NULL";
                    result.status = false;
                    return result;
                }
            }
            catch (Exception e)
            {
                result.code = "EX-001";
                result.message = "Error: " + e.Message;
                result.status = false;
                return result;
            }
        }
        /// <summary>
        /// Metodo para generar el comprobante fiscal
        /// </summary>
        private void cmdTimbraXML_Click(object sender, EventArgs e)
        {
            /*
              * * Puedes encontrar más ejemplos y documentación sobre estos archivos aquí. (Factura, Nota de Crédito, Recibo de Nómina y más...)
              * * Link: https://github.com/facturacionmoderna/Comprobantes
              * * Nota: Si deseas información adicional contactanos en www.facturacionmoderna.com
            */

            // Especificación de rutas especificas
            string currentPath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName;
            string keyfile = currentPath + "\\utilerias\\certificados\\20001000000200000278.key";
            string certfile = currentPath + "\\utilerias\\certificados\\20001000000200000278.cer";
            string xsltPath;
            if (checkBox1.Checked)
                xsltPath = currentPath + "\\utilerias\\xslt_retenciones\\retenciones.xslt";
            else
                xsltPath = currentPath + "\\utilerias\\xslt3_2\\cadenaoriginal_3_2.xslt";
            string password = "******";
            string xmlfile = txtXML.Text;
            string resultPath = currentPath + "\\resultados";

            Cursor.Current = Cursors.WaitCursor;
            if (!System.IO.File.Exists(xmlfile)) {
                MessageBox.Show("El archivo "+ xmlfile + " No existe");
                Environment.Exit(-1);
            }
            if (!System.IO.File.Exists(keyfile))
            {
                MessageBox.Show("El archivo " + keyfile + " No existe");
                Environment.Exit(-1);
            }
            if (!System.IO.File.Exists(certfile))
            {
                MessageBox.Show("El archivo " + certfile + " No existe");
                Environment.Exit(-1);
            }

            /* Crear instancia al objeto comprobante */
            Comprobante.Utilidades obj = new Comprobante.Utilidades();

            /*  OBTENER LA INFORMACION DEL CERTIFICADO
             * *    Los parametros enviados son:
             * *    1.- Ruta del certificado
            */
            string cert_b64 = "";
            string cert_No = "";
            if (obj.getInfoCertificate(certfile))
            {
                cert_b64 = obj.getCertificate();
                cert_No = obj.getCertificateNumber();
            }
            else
            {
                MessageBox.Show(obj.getMessage());
                Environment.Exit(-1);
            }

            /*  AGREGAR INFORMACION DEL CERTIFICADO AL XML ANTES DE GENERAR LA CADENA ORIGINA
             * *    Los parametros enviados son:
             * *    1.- Xml (Puede ser una cadena o una ruta)
             * *    2.- Certificado codificado en base 64
             * *    3.- Numero de certificado
             * Retorna el XML Modificado
            */
            string newXml = obj.addDigitalStamp(xmlfile, cert_b64, cert_No);
            if (newXml.Equals(""))
            {
                MessageBox.Show(obj.getMessage());
                Environment.Exit(-1);
            }
            xmlfile = newXml;

            /* GENERAR CADENA ORIGINAL
             * *   Los paramteros enviado son:
             * *    1.- xml (Puede ser una cadena o una ruta)
             * *    2.- xslt (Ruta del archivo xslt, con el cual se construye la cadena original)
             * *   Retorna la cadena original
            */

            string cadenaO = obj.createOriginalChain(xmlfile, xsltPath);
            if (cadenaO.Equals(""))
            {
                MessageBox.Show(obj.getMessage());
                Environment.Exit(-1);
            }

            /* GENERAR EL SELLO DEL COMPROBANTE
             * *    Los parametros enviado son:
             * *    1.- archivo de llave privada (.key)
             * *    2.- Contraseña del archivo de llave privada
             * *    3.- Cadena Original (Puede ser una cadena o una ruta)
             * Retorna el sello en r_comprobante.message
            */
            string sello = obj.createDigitalStamp(keyfile, password, cadenaO);
            if (sello.Equals(""))
            {
                MessageBox.Show(obj.getMessage());
                Environment.Exit(-1);
            }

            /*  AGREGAR LA INFORMACION DEL SELLO AL XML
             * *    Los parametros enviados son:
             * *    1.- Xml (Puede ser una cadena o una ruta)
             * *    2.- Sello del comprobante
             * Retorna el XML Modificado
            */
            newXml = obj.addDigitalStamp(xmlfile, sello);
            if (newXml.Equals(""))
            {
                MessageBox.Show(obj.getMessage());
                Environment.Exit(-1);
            }

            /*  CREAR LA CONFIGURACION DE CONEXION CON EL SERVICIO SOAP
             * *    Los parametros configurables son:
             * *    1.- string UserID; Nombre de usuario que se utiliza para la conexion con SOAP
             * *    2.- string UserPass; Contraseña del usuario para conectarse a SOAP
             * *    3.- string emisorRFC; RFC del contribuyente
             * *    4.- Boolean generarCBB; Indica si se desea generar el CBB
             * *    5.- Boolean generarTXT; Indica si se desea generar el TXT
             * *    6.- Boolean generarPDF; Indica si se desea generar el PDF
             * *    7.- string urlTimbrado; URL de la conexion con SOAP
             * La configuracion inicial es para el ambiente de pruebas
            */

            WSConecFM.Resultados r_wsconect = new WSConecFM.Resultados();
            requestTimbrarCFDI reqt = new requestTimbrarCFDI();
            /*
             * Si desea cambiar alguna configuracion, solo realizar lo siguiente
             * reqt.generarPDF = true;  Por poner un ejemplo
            */

            /*  TIMBRAR XML
             * *    Los parametros enviados son:
             * *    1.- XML; (Acepta una ruta o una cadena)
             * *    2.- Objeto con las configuraciones de conexion con SOAP
             * Retorna un objeto con los siguientes valores codificado en base 64:
             * *    1.- xml en base 64
             * *    2.- pdf en base 64
             * *    3.- png en base 64
             * *    4.- txt en base 64
             * Los valores de retorno van a depender de la configuracion enviada a la función
             */
            Timbrado timbra = new Timbrado();
            r_wsconect = timbra.Timbrar(newXml, reqt);
            if (!r_wsconect.status)
            {
                MessageBox.Show(r_wsconect.message);
                Environment.Exit(-1);
            }
            byte[] byteXML = System.Convert.FromBase64String(r_wsconect.xmlBase64);
            System.IO.FileStream swxml = new System.IO.FileStream((resultPath + ("\\" + (r_wsconect.uuid + ".xml"))), System.IO.FileMode.Create);
            swxml.Write(byteXML, 0, byteXML.Length);
            swxml.Close();
            if (reqt.generarCBB) {
                byte[] byteCBB = System.Convert.FromBase64String(r_wsconect.cbbBase64);
                System.IO.FileStream swcbb = new System.IO.FileStream((resultPath + ("\\" + (r_wsconect.uuid + ".png"))), System.IO.FileMode.Create);
                swcbb.Write(byteCBB, 0, byteCBB.Length);
                swcbb.Close();
            }
            if (reqt.generarPDF)
            {
                byte[] bytePDF = System.Convert.FromBase64String(r_wsconect.pdfBase64);
                System.IO.FileStream swpdf = new System.IO.FileStream((resultPath + ("\\" + (r_wsconect.uuid + ".pdf"))), System.IO.FileMode.Create);
                swpdf.Write(bytePDF, 0, bytePDF.Length);
                swpdf.Close();
            }
            if (reqt.generarTXT)
            {
                byte[] byteTXT = System.Convert.FromBase64String(r_wsconect.txtBase64);
                System.IO.FileStream swtxt = new System.IO.FileStream((resultPath + ("\\" + (r_wsconect.uuid + ".txt"))), System.IO.FileMode.Create);
                swtxt.Write(byteTXT, 0, byteTXT.Length);
                swtxt.Close();
            }

            MessageBox.Show("Comprobante guardado en "+ resultPath + "\\");
            Cursor.Current = Cursors.Default;
            Close();
        }