Ejemplo n.º 1
0
        public static void CreaFactura()
        {
            string pathCer      = Directory.GetCurrentDirectory() + @"/Fiel/Certifiado.cer";
            string pathKey      = Directory.GetCurrentDirectory() + @"/Fiel/Key.key";
            string clavePrivada = "12345678a";

            //Obtenemos el numero
            string numeroCertificado, aa, b, c;

            SelloDigital.leerCER(pathCer, out aa, out b, out c, out numeroCertificado);


            //Llenamos la clase COMPROBANTE--------------------------------------------------------
            Comprobante oComprobante = new Comprobante();

            oComprobante.Version = "3.3";
            oComprobante.Serie   = "H";
            oComprobante.Folio   = "1";
            oComprobante.Fecha   = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");
            // oComprobante.Sello = "faltante"; //sig video
            oComprobante.FormaPago     = "1";
            oComprobante.NoCertificado = numeroCertificado;
            // oComprobante.Certificado = ""; //sig video
            oComprobante.SubTotal          = 10m;
            oComprobante.Moneda            = "MXN";
            oComprobante.Total             = 10;
            oComprobante.TipoDeComprobante = "I";
            oComprobante.MetodoPago        = "PUE";
            oComprobante.LugarExpedicion   = "44860";



            ComprobanteEmisor oEmisor = new ComprobanteEmisor();

            oEmisor.Rfc           = "AATJ9502061EA";
            oEmisor.Nombre        = "Jorge Humberto Alvarado Tostado";
            oEmisor.RegimenFiscal = "612";

            ComprobanteReceptor oReceptor = new ComprobanteReceptor();

            oReceptor.Nombre  = "Pepe SA DE CV";
            oReceptor.Rfc     = "BIO091204LB1";
            oReceptor.UsoCFDI = "G03";

            //asigno emisor y receptor
            oComprobante.Emisor   = oEmisor;
            oComprobante.Receptor = oReceptor;


            List <ComprobanteConcepto> lstConceptos = new List <ComprobanteConcepto>();
            ComprobanteConcepto        oConcepto    = new ComprobanteConcepto();

            oConcepto.Importe       = 10m;
            oConcepto.ClaveProdServ = "92111704";
            oConcepto.Cantidad      = 1;
            oConcepto.ClaveUnidad   = "H87";
            oConcepto.Descripcion   = "Un misil para la guerra";
            oConcepto.ValorUnitario = 10m;


            lstConceptos.Add(oConcepto);

            oComprobante.Conceptos = lstConceptos.ToArray();


            //Creamos el xml
            CreateXML(oComprobante);

            string cadenaOriginal = "";
            string pathxsl        = Directory.GetCurrentDirectory() + @"/Fiel/cadenaoriginal_3_3.xslt";

            System.Xml.Xsl.XslCompiledTransform transformador = new System.Xml.Xsl.XslCompiledTransform(true);
            transformador.Load(pathxsl);

            using (StringWriter sw = new StringWriter())
                using (XmlWriter xwo = XmlWriter.Create(sw, transformador.OutputSettings))
                {
                    transformador.Transform(pathXML, xwo);
                    cadenaOriginal = sw.ToString();
                }


            SelloDigital oSelloDigital = new SelloDigital();

            oComprobante.Certificado = oSelloDigital.Certificado(pathCer);
            oComprobante.Sello       = oSelloDigital.Sellar(cadenaOriginal, pathKey, clavePrivada);

            CreateXML(oComprobante);

            ////TIMBRE DEL XML
            ServiceReferenceFC.RespuestaCFDi respuestaCFDI = new ServiceReferenceFC.RespuestaCFDi();

            byte[] bXML = System.IO.File.ReadAllBytes(pathXML);

            ServiceReferenceFC.TimbradoClient oTimbrado = new ServiceReferenceFC.TimbradoClient();

            respuestaCFDI = oTimbrado.TimbrarTest("TEST010101ST1", "a", bXML);

            if (respuestaCFDI.Documento == null)
            {
                Console.WriteLine(respuestaCFDI.Mensaje);
            }
            else
            {
                System.IO.File.WriteAllBytes(pathXML, respuestaCFDI.Documento);
            }
        }
Ejemplo n.º 2
0
        public static string CreaFactura(string folio, string formaPago, string metodoDePago, List <ProductoSat> productos, float subtotal, string rfc, string rz, string usoCFDI, string mail)
        {
            string pathCer      = Directory.GetCurrentDirectory() + @"/Fiel/Certifiado.cer";
            string pathKey      = Directory.GetCurrentDirectory() + @"/Fiel/Key.key";
            string clavePrivada = "Jorge1995";

            //Obtenemos el numero
            string numeroCertificado, aa, b, c;

            SelloDigital.leerCER(pathCer, out aa, out b, out c, out numeroCertificado);


            //Llenamos la clase COMPROBANTE--------------------------------------------------------
            string      subt            = subtotal.ToString();
            string      impuetosImporte = (subtotal * 0.16).ToString();
            float       t            = subtotal * 1.16f;
            string      ts           = t.ToString();
            Comprobante oComprobante = new Comprobante();

            oComprobante.Version = "3.3";
            oComprobante.Serie   = "H";
            oComprobante.Folio   = folio;
            oComprobante.Fecha   = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");
            //oComprobante.Fecha = "2019-06-11T10:52:20";
            //oComprobante.Sello = "faltante"; //sig video
            oComprobante.FormaPago     = formaPago;
            oComprobante.NoCertificado = numeroCertificado;
            // oComprobante.Certificado = ""; //sig video
            oComprobante.SubTotal          = decimal.Parse(subt);
            oComprobante.Moneda            = "MXN";
            oComprobante.Total             = decimal.Parse(ts);
            oComprobante.TipoDeComprobante = "I";
            oComprobante.MetodoPago        = "PUE";
            oComprobante.LugarExpedicion   = "44860";



            ComprobanteEmisor oEmisor = new ComprobanteEmisor();

            oEmisor.Rfc           = "AATJ9502061EA";
            oEmisor.Nombre        = "Jorge Humberto Alvarado Tostado";
            oEmisor.RegimenFiscal = "612";

            ComprobanteReceptor oReceptor = new ComprobanteReceptor();

            oReceptor.Nombre  = rz;
            oReceptor.Rfc     = rfc;
            oReceptor.UsoCFDI = usoCFDI;

            //asigno emisor y receptor
            oComprobante.Emisor   = oEmisor;
            oComprobante.Receptor = oReceptor;


            List <ComprobanteConcepto>           lstConceptos = new List <ComprobanteConcepto>();
            ComprobanteConcepto                  oConcepto;
            ComprobanteConceptoImpuestos         impuestos;
            ComprobanteConceptoImpuestosTraslado imAux;

            ComprobanteConceptoImpuestosTraslado[] impuestosTrasladados;

            foreach (ProductoSat a in productos)
            {
                oConcepto               = new ComprobanteConcepto();
                impuestos               = new ComprobanteConceptoImpuestos();
                imAux                   = new ComprobanteConceptoImpuestosTraslado();
                impuestosTrasladados    = new ComprobanteConceptoImpuestosTraslado[1];
                oConcepto.Importe       = Math.Round(decimal.Parse((a.Subtotal).ToString()), 3);
                oConcepto.ClaveProdServ = a.CodigoSAT;
                oConcepto.Cantidad      = decimal.Parse(a.Cantidad.ToString());
                oConcepto.ClaveUnidad   = "H87";
                oConcepto.Descripcion   = a.Descripcion;
                oConcepto.ValorUnitario = decimal.Parse((a.Precio).ToString());
                //Impuestos
                imAux.Base                = decimal.Parse(a.Subtotal.ToString());
                imAux.ImporteSpecified    = true;
                imAux.TasaOCuotaSpecified = true;
                imAux.TipoFactor          = "Tasa";
                imAux.Importe             = Math.Round(decimal.Parse((a.Subtotal * 0.16).ToString()), 3);
                imAux.TasaOCuota          = decimal.Parse("0.160000");
                imAux.Impuesto            = "002";
                impuestosTrasladados[0]   = imAux;
                impuestos.Traslados       = impuestosTrasladados;
                oConcepto.Impuestos       = impuestos;
                lstConceptos.Add(oConcepto);
            }
            oComprobante.Conceptos = lstConceptos.ToArray();

            ComprobanteImpuestos         imComprobante           = new ComprobanteImpuestos();
            ComprobanteImpuestosTraslado imComprobanteTraladados = new ComprobanteImpuestosTraslado();

            ComprobanteImpuestosTraslado[] imComprobanteTraladadosArray = new ComprobanteImpuestosTraslado[1];

            imComprobanteTraladados.TipoFactor = "Tasa";
            imComprobanteTraladados.TasaOCuota = decimal.Parse("0.160000");
            imComprobanteTraladados.Impuesto   = "002";
            imComprobanteTraladados.Importe    = Math.Round(decimal.Parse(impuetosImporte), 3);

            imComprobanteTraladadosArray[0] = imComprobanteTraladados;

            imComprobante.Traslados = imComprobanteTraladadosArray;

            imComprobante.TotalImpuestosTrasladadosSpecified = true;
            imComprobante.TotalImpuestosTrasladados          = Math.Round(decimal.Parse(impuetosImporte), 2);
            oComprobante.Impuestos = imComprobante;



            //Creamos el xml
            CreateXML(oComprobante);

            string cadenaOriginal = "";
            string pathxsl        = Directory.GetCurrentDirectory() + @"/Fiel/cadenaoriginal_3_3.xslt";

            System.Xml.Xsl.XslCompiledTransform transformador = new System.Xml.Xsl.XslCompiledTransform(true);
            transformador.Load(pathxsl);

            using (StringWriter sw = new StringWriter())
                using (XmlWriter xwo = XmlWriter.Create(sw, transformador.OutputSettings))
                {
                    transformador.Transform(pathXML, xwo);
                    cadenaOriginal = sw.ToString();
                }


            SelloDigital oSelloDigital = new SelloDigital();

            oComprobante.Certificado = oSelloDigital.Certificado(pathCer);
            oComprobante.Sello       = oSelloDigital.Sellar(cadenaOriginal, pathKey, clavePrivada);

            CreateXML(oComprobante);

            ////TIMBRE DEL XML
            ServiceReferenceFC.RespuestaCFDi respuestaCFDI = new ServiceReferenceFC.RespuestaCFDi();

            byte[] bXML = System.IO.File.ReadAllBytes(pathXML);

            ServiceReferenceFC.TimbradoClient oTimbrado = new ServiceReferenceFC.TimbradoClient();

            respuestaCFDI = oTimbrado.Timbrar("AATJ9502061EA", "827984aaddd4126c9c67", bXML);

            if (respuestaCFDI.Documento == null)
            {
                return(respuestaCFDI.Mensaje);
            }
            else
            {
                System.IO.File.WriteAllBytes(pathXML, respuestaCFDI.Documento);
                ServiceReferenceFC.TimbradoClient pdf = new ServiceReferenceFC.TimbradoClient();
                bXML          = System.IO.File.ReadAllBytes(pathXML);
                respuestaCFDI = pdf.PDF("AATJ9502061EA", "827984aaddd4126c9c67", bXML, null);
                System.IO.File.WriteAllBytes(pathPDF, respuestaCFDI.Documento);
                Sql.InsertarFactura(folio, bXML);
                Sql.InsertarDatos("UPDATE  `venta` SET `facturada`= 1 WHERE id_venta=" + folio);
                string pXMl = @path + "\\" + folio + ".xml";
                string pPDF = @path + "\\" + folio + ".pdf";
                File.Move(pathXML, pXMl);
                File.Move(pathPDF, pPDF);
                try
                {
                    Email(mail, pXMl, pPDF);
                }
                catch (Exception e)
                {
                    return("Error: " + e.Message);
                }

                File.Delete(pXMl);
                File.Delete(pPDF);
            }
            return("");
        }