Exemplo n.º 1
0
        private void GuardarInformacion(TimbreWs33 topPComprobante, int idErrorSat, string strLAcuseReciboSat,
                                        Acuse acuseReciboSAT)
        {
            try
            {
                NtLinkTimbrado t = new NtLinkTimbrado();

                //si por falta de conexión no actualizo//
                if (idErrorSat == 103 || idErrorSat == 502 || idErrorSat == 501)
                {
                    return;
                }

                topPComprobante.Acuse      = strLAcuseReciboSat;
                topPComprobante.FechaEnvio = acuseReciboSAT.Fecha;

                if (idErrorSat != 0)
                {
                    topPComprobante.Error    = idErrorSat;
                    topPComprobante.StrError = acuseReciboSAT.Incidencia[0].MensajeIncidencia;
                    topPComprobante.Status   = 90;
                }
                else
                {
                    topPComprobante.Status = 1;
                }

                t.GuardarTimbre(topPComprobante);
            }
            catch (Exception ex)
            {
                Log.Error("Error al intentar salvar la información, Err:" + ex.ToString());
            }
        }
Exemplo n.º 2
0
        public static bool GuardaFactura(string fecha, string rfcEmisor, string rfcReceptor, string uudi, string xml, string hash, empresa emp, bool consumeSaldo, bool retenciones = false)
        {
            NtLinkTimbrado tim = new NtLinkTimbrado();
            TimbreWs33     tws = new TimbreWs33
            {
                FechaFactura = Convert.ToDateTime(fecha),
                RfcEmisor    = rfcEmisor,
                RfcReceptor  = rfcReceptor,
                Xml          = string.Empty,
                Status       = new int?(0),
                Uuid         = uudi,
                Hash         = hash.Replace("-", ""),
                Retenciones  = new bool?(retenciones)
            };
            bool result = tim.GuardarTimbre(tws);

            if (consumeSaldo)
            {
                if (tim.IncrementaSaldo(emp.IdEmpresa, (int)emp.idSistema.Value))
                {
                    TimbradoUtils.Logger.Info("Saldo consumido para IdEmpresa" + emp.IdEmpresa);
                }
                else
                {
                    TimbradoUtils.Logger.Error("No se pudo consumir saldo para IdEmpresa" + emp.IdEmpresa);
                }
            }
            if (result)
            {
                string directorio = Path.Combine(ConfigurationManager.AppSettings["RutaTimbrado"], tws.RfcEmisor, tws.FechaFactura.ToString("yyyyMMdd"));
                if (!Directory.Exists(directorio))
                {
                    Directory.CreateDirectory(directorio);
                }
                string fileName = Path.Combine(directorio, "Comprobante_" + uudi + ".xml");
                File.WriteAllText(fileName, xml, Encoding.UTF8);
                TimbradoUtils.Logger.Info(hash);
            }
            else
            {
                TimbradoUtils.Logger.Fatal("No se pudo guardar el comprobante con hash: " + hash);
            }
            return(result);
        }
Exemplo n.º 3
0
        public bool GuardarTimbre(TimbreWs33 timbre)
        {
            try
            {
                using (var db = new NtLinkLocalServiceEntities())
                {
                    db.CommandTimeout = 90;

                    if (timbre.IdTimbre == 0)
                    {
                        db.TimbreWs33.AddObject(timbre);
                    }
                    else
                    {
                        if (timbre.StrError == "Hist")
                        {
                            var thist = db.TimbreWsHistorico.FirstOrDefault(p => p.IdTimbre == timbre.IdTimbre);
                            thist.Status           = 2;
                            thist.AcuseCancelacion = timbre.AcuseCancelacion;
                            db.TimbreWsHistorico.ApplyCurrentValues(thist);
                        }
                        else
                        {
                            var t = db.TimbreWs33.FirstOrDefault(p => p.IdTimbre == timbre.IdTimbre);
                            db.TimbreWs33.ApplyCurrentValues(timbre);
                        }
                    }
                    db.SaveChanges();
                    return(true);
                }
            }
            catch (Exception ee)
            {
                Logger.Error(ee.Message);
                if (ee.InnerException != null)
                {
                    Logger.Error(ee.InnerException);
                }
                //throw;
                return(false);
            }
        }
Exemplo n.º 4
0
        public int CancelarRet(string uuid, string rfc, ref string respuesta, ref string acuse)
        {
            int result;

            try
            {
                Cancelador.Logger.Info("Cancelando comprobante: " + uuid);
                CanceladorRetenciones can = new CanceladorRetenciones();
                IList uuidsCancelar       = new List <string>();
                uuidsCancelar.Add(uuid.ToUpper());
                using (new NtLinkLocalServiceEntities())
                {
                    NtLinkEmpresa nle     = new NtLinkEmpresa();
                    empresa       empresa = nle.GetByRfc(rfc);
                    if (empresa == null)
                    {
                        respuesta = "300 - El usuario con el que se quiere conectar es inválido";
                        acuse     = "";
                        result    = 300;
                    }
                    else
                    {
                        NtLinkTimbrado tim    = new NtLinkTimbrado();
                        TimbreWs33     timbre = tim.ObtenerTimbre(uuid);
                        if (timbre == null)
                        {
                            TimbreWsHistorico timbreHist = tim.ObtenerTimbreHist(uuid);
                            if (timbreHist == null)
                            {
                                string path    = Path.Combine(ConfigurationManager.AppSettings["Resources"], rfc);
                                string pathCer = Path.Combine(path, "Certs", "csd.cer");
                                string pathKey = Path.Combine(path, "Certs", "csd.key");
                                string pass    = empresa.PassKey;
                                if (File.Exists(pathKey + ".pem"))
                                {
                                    pathKey += ".pem";
                                }
                                string ext = Path.GetExtension(pathKey);
                                RSACryptoServiceProvider key2 = OpensslKey.DecodePrivateKey(File.ReadAllBytes(pathKey), pass, ext);
                                string ac2 = can.CancelaCfdi(uuid, key2, rfc, pathCer);
                                if (string.IsNullOrEmpty(ac2))
                                {
                                    acuse     = "No se pudo conectar al servicio de cancelación del SAT";
                                    respuesta = "1205 - No se pudo conectar al servicio de cancelación del SAT";
                                    result    = 1205;
                                    return(result);
                                }
                                acuse = ac2;
                                AcuseCancelacion acuseCan2 = AcuseCancelacion.Parse(ac2);
                                if (acuseCan2.Status == null)
                                {
                                    Cancelador.Logger.Error(acuse);
                                    respuesta = "1300 - XML mal formado";
                                    result    = 1300;
                                    return(result);
                                }
                                if (acuseCan2.Status != "1201" && acuseCan2.Status != "1202")
                                {
                                    Cancelador.Logger.Error(acuse);
                                    respuesta = acuseCan2.Status;
                                    throw new FaultException(respuesta);
                                }
                                Cancelador.Logger.Info(acuse);
                                string directorio = Path.Combine(ConfigurationManager.AppSettings["RutaTimbrado"], rfc, acuseCan2.FechaCancelacion);
                                if (!Directory.Exists(directorio))
                                {
                                    Directory.CreateDirectory(directorio);
                                }
                                string fileName = Path.Combine(directorio, "Cancelacion_" + uuid.ToString() + ".xml");
                                File.WriteAllText(fileName, acuse, Encoding.UTF8);
                                respuesta = acuseCan2.Status + " - " + Constantes.ErroresValidacion[int.Parse(acuseCan2.Status)];
                                result    = Convert.ToInt32(acuseCan2.Status);
                                return(result);
                            }
                            else
                            {
                                timbre                  = new TimbreWs33();
                                timbre.RfcEmisor        = timbreHist.RfcEmisor;
                                timbre.RfcReceptor      = timbreHist.RfcReceptor;
                                timbre.AcuseCancelacion = timbreHist.AcuseCancelacion;
                                timbre.IdTimbre         = timbreHist.IdTimbre;
                                timbre.Uuid             = timbreHist.Uuid;
                                timbre.StrError         = "Hist";
                            }
                        }
                        if (timbre.RfcEmisor != rfc)
                        {
                            respuesta = "203 - UUID No corresponde el RFC del emisor y de quien solicita la cancelación.";
                            acuse     = "";
                            result    = 203;
                        }
                        else if (timbre.AcuseCancelacion != null)
                        {
                            respuesta = "202 - UUID Previamente cancelado";
                            acuse     = timbre.AcuseCancelacion;
                            result    = 202;
                        }
                        else
                        {
                            string path    = Path.Combine(ConfigurationManager.AppSettings["Resources"], rfc);
                            string pathCer = Path.Combine(path, "Certs", "csd.cer");
                            string pathKey = Path.Combine(path, "Certs", "csd.key");
                            string pass    = empresa.PassKey;
                            if (File.Exists(pathKey + ".pem"))
                            {
                                pathKey += ".pem";
                            }
                            string ext = Path.GetExtension(pathKey);
                            RSACryptoServiceProvider key3 = OpensslKey.DecodePrivateKey(File.ReadAllBytes(pathKey), pass, ext);
                            string ac3 = can.CancelaCfdi(uuid, key3, rfc, pathCer);
                            if (string.IsNullOrEmpty(ac3))
                            {
                                acuse     = "No se pudo conectar al servicio de cancelación del SAT";
                                respuesta = "1205 - No se pudo conectar al servicio de cancelación del SAT";
                                result    = 1205;
                            }
                            else
                            {
                                acuse = ac3;
                                AcuseCancelacion acuseCan3 = AcuseCancelacion.Parse(ac3);
                                if (acuseCan3.Status == null)
                                {
                                    Cancelador.Logger.Error(acuse);
                                    respuesta = "1300 - XML mal formado";
                                    result    = 1300;
                                }
                                else
                                {
                                    if (acuseCan3.Status != "1201" && acuseCan3.Status != "1202")
                                    {
                                        Cancelador.Logger.Error(acuse);
                                        respuesta = acuseCan3.Status;
                                        throw new FaultException(respuesta);
                                    }
                                    Cancelador.Logger.Info(acuse);
                                    timbre.Status = new int?(2);
                                    string directorio = Path.Combine(ConfigurationManager.AppSettings["RutaTimbrado"], timbre.RfcEmisor, timbre.FechaFactura.ToString("yyyyMMdd"));
                                    if (!Directory.Exists(directorio))
                                    {
                                        Directory.CreateDirectory(directorio);
                                    }
                                    string fileName = Path.Combine(directorio, "Cancelacion_" + timbre.Uuid.ToString() + ".xml");
                                    File.WriteAllText(fileName, acuse, Encoding.UTF8);
                                    tim.GuardarTimbre(timbre);
                                    respuesta = acuseCan3.Status + " - " + Constantes.ErroresValidacion[int.Parse(acuseCan3.Status)];
                                    result    = Convert.ToInt32(acuseCan3.Status);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Cancelador.Logger.Error("(cancelar) Error: " + ex.Message + ((ex.InnerException == null) ? "" : ("\nExcepción Interna:" + ex.InnerException.Message)));
                throw;
            }
            return(result);
        }
Exemplo n.º 5
0
        public int Cancelar(string uuid, string rfc, ref string respuesta, ref string acuse)
        //  public int Cancelar(string uuid, int idempresa, ref string respuesta, ref string acuse)
        {
            int result;

            try
            {
                Cancelador.Logger.Info("Cancelando comprobante: " + uuid);
                IList uuidsCancelar = new List <string>();
                uuidsCancelar.Add(uuid.ToUpper());
                using (new NtLinkLocalServiceEntities())
                {
                    NtLinkEmpresa nle     = new NtLinkEmpresa();
                    empresa       empresa = nle.GetByRfc(rfc);
                    // empresa empresa = nle.GetById(idempresa);
                    if (empresa == null)
                    {
                        respuesta = "300 - El usuario con el que se quiere conectar es inválido";
                        acuse     = "";
                        result    = 300;
                    }
                    else
                    {
                        NtLinkTimbrado tim    = new NtLinkTimbrado();
                        TimbreWs33     timbre = tim.ObtenerTimbre(uuid);
                        if (timbre == null)
                        {
                            TimbreWsHistorico timbreHist = tim.ObtenerTimbreHist(uuid);
                            if (timbreHist == null)
                            {
                                string path    = Path.Combine(ConfigurationManager.AppSettings["Resources"], empresa.RFC);
                                string pathCer = Path.Combine(path, "Certs", "csd.cer");
                                string pathKey = Path.Combine(path, "Certs", "csd.key");
                                string pass    = empresa.PassKey;
                                SAT.CFDI.Cliente.Procesamiento.Encabezado encLMetadata2          = new SAT.CFDI.Cliente.Procesamiento.Encabezado(empresa.RFC, this.FechaHoy(), uuidsCancelar);
                                SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.Acuse ac2 = null;
                                acuse = this.EnviarCancelacionSAT(encLMetadata2, pathKey, pass, pathCer, ref ac2);
                                if (string.IsNullOrEmpty(acuse))
                                {
                                    acuse = "No se pudo conectar al servicio de cancelación del SAT";
                                }
                                int intEstatus2 = this.TraerEstatusSAT(uuid, ac2);
                                if (intEstatus2 != 201 && intEstatus2 != 202)
                                {
                                    Cancelador.Logger.Error(acuse);
                                    respuesta = intEstatus2 + " - " + Constantes.ErroresValidacion[intEstatus2];
                                    throw new FaultException(respuesta);
                                }
                                Cancelador.Logger.Info(acuse);
                                string directorio = Path.Combine(ConfigurationManager.AppSettings["RutaTimbrado"], ac2.RfcEmisor, ac2.Fecha.ToString("yyyyMMdd"));
                                if (!Directory.Exists(directorio))
                                {
                                    Directory.CreateDirectory(directorio);
                                }
                                string fileName = Path.Combine(directorio, "Cancelacion_" + uuid.ToString() + ".xml");
                                File.WriteAllText(fileName, acuse, Encoding.UTF8);
                                respuesta = intEstatus2 + " - " + Constantes.ErroresValidacion[intEstatus2];
                                result    = intEstatus2;
                                return(result);
                            }
                            else
                            {
                                timbre                  = new TimbreWs33();
                                timbre.RfcEmisor        = timbreHist.RfcEmisor;
                                timbre.RfcReceptor      = timbreHist.RfcReceptor;
                                timbre.AcuseCancelacion = timbreHist.AcuseCancelacion;
                                timbre.IdTimbre         = timbreHist.IdTimbre;
                                timbre.Uuid             = timbreHist.Uuid;
                                timbre.StrError         = "Hist";
                            }
                        }
                        if (timbre.RfcEmisor != empresa.RFC)
                        {
                            respuesta = "203 - UUID No corresponde el RFC del emisor y de quien solicita la cancelación.";
                            acuse     = "";
                            result    = 203;
                        }
                        else if (timbre.AcuseCancelacion != null)
                        {
                            respuesta = "202 - UUID Previamente cancelado";
                            acuse     = timbre.AcuseCancelacion;
                            result    = 202;
                        }
                        else
                        {
                            string path    = Path.Combine(ConfigurationManager.AppSettings["Resources"], empresa.RFC);
                            string pathCer = Path.Combine(path, "Certs", "csd.cer");
                            string pathKey = Path.Combine(path, "Certs", "csd.key");
                            string pass    = empresa.PassKey;
                            SAT.CFDI.Cliente.Procesamiento.Encabezado encLMetadata3          = new SAT.CFDI.Cliente.Procesamiento.Encabezado(empresa.RFC, this.FechaHoy(), uuidsCancelar);
                            SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.Acuse ac3 = null;
                            acuse = this.EnviarCancelacionSAT(encLMetadata3, pathKey, pass, pathCer, ref ac3);
                            if (string.IsNullOrEmpty(acuse))
                            {
                                acuse = "No se pudo conectar al servicio de cancelación del SAT";
                            }
                            int intEstatus3 = this.TraerEstatusSAT(uuid, ac3);
                            if (intEstatus3 != 201 && intEstatus3 != 202)
                            {
                                Cancelador.Logger.Error(acuse);
                                respuesta = intEstatus3 + " - " + Constantes.ErroresValidacion[intEstatus3];
                                throw new FaultException(respuesta);
                            }
                            Cancelador.Logger.Info(acuse);
                            timbre.Status = new int?(2);
                            string directorio = Path.Combine(ConfigurationManager.AppSettings["RutaTimbrado"], timbre.RfcEmisor, timbre.FechaFactura.ToString("yyyyMMdd"));
                            if (!Directory.Exists(directorio))
                            {
                                Directory.CreateDirectory(directorio);
                            }
                            string fileName = Path.Combine(directorio, "Cancelacion_" + timbre.Uuid.ToString() + ".xml");
                            File.WriteAllText(fileName, acuse, Encoding.UTF8);
                            tim.GuardarTimbre(timbre);
                            respuesta = intEstatus3 + " - " + Constantes.ErroresValidacion[intEstatus3];
                            result    = intEstatus3;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Cancelador.Logger.Error("(cancelar) Error: " + ex.Message + ((ex.InnerException == null) ? "" : ("\nExcepción Interna:" + ex.InnerException.Message)));
                throw;
            }
            return(result);
        }
Exemplo n.º 6
0
        public RespuestaCancelacion Cancelar(string requestCancelacion)
        {
            Cancelador.Logger.Info(requestCancelacion);
            AccesoServicios serv = new AccesoServicios();
            XmlSerializer   ser  = new XmlSerializer(typeof(SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.Cancelacion), "http://cancelacfd.sat.gob.mx");

            SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.Cancelacion cancelacion = null;
            RespuestaCancelacion result;

            try
            {
                cancelacion = (ser.Deserialize(new StringReader(requestCancelacion)) as SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.Cancelacion);
                NtLinkTimbrado nlt = new NtLinkTimbrado();
            }
            catch (SerializationException ee)
            {
                Cancelador.Logger.Error(ee);
                result = new RespuestaCancelacion
                {
                    Acuse        = null,
                    MensajeError = "Request mal formado " + ee.Message,
                    StatusUuids  = new List <StatusUuid>()
                };
                return(result);
            }
            catch (Exception ee2)
            {
                Cancelador.Logger.Error(ee2);
                result = new RespuestaCancelacion
                {
                    Acuse        = null,
                    MensajeError = "Request mal formado ",
                    StatusUuids  = new List <StatusUuid>()
                };
                return(result);
            }
            SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.Acuse respuesta = serv.CancelaCfdi(cancelacion);
            List <StatusUuid> res           = new List <StatusUuid>();
            MemoryStream      acuseStream   = new MemoryStream();
            XmlSerializer     xmlSerializer = new XmlSerializer(typeof(SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.Acuse));

            xmlSerializer.Serialize(acuseStream, respuesta);
            acuseStream.Seek(0L, SeekOrigin.Begin);
            StreamReader acuseReader = new StreamReader(acuseStream);
            string       acuse       = acuseReader.ReadToEnd();

            Cancelador.Logger.Info(acuse);
            if (respuesta.Folios != null && respuesta.Folios.Length > 0)
            {
                SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.AcuseFolios[] folios = respuesta.Folios;
                for (int i = 0; i < folios.Length; i++)
                {
                    SAT.CFDI.Cliente.Procesamiento.ServicioCancelacionCFDI.AcuseFolios acuseFoliose = folios[i];
                    NtLinkTimbrado tim    = new NtLinkTimbrado();
                    TimbreWs33     timbre = tim.ObtenerTimbre(acuseFoliose.UUID);
                    if (timbre == null)
                    {
                        TimbreWsHistorico timbreHist = tim.ObtenerTimbreHist(acuseFoliose.UUID);
                        if (timbreHist != null)
                        {
                            timbre                  = new TimbreWs33();
                            timbre.RfcEmisor        = timbreHist.RfcEmisor;
                            timbre.RfcReceptor      = timbreHist.RfcReceptor;
                            timbre.AcuseCancelacion = timbreHist.AcuseCancelacion;
                            timbre.IdTimbre         = timbreHist.IdTimbre;
                            timbre.Uuid             = timbreHist.Uuid;
                            timbre.StrError         = "Hist";
                        }
                    }
                    if (timbre != null)
                    {
                        if (acuseFoliose.EstatusUUID == "201" || acuseFoliose.EstatusUUID == "202")
                        {
                            timbre.Status = new int?(2);
                        }
                        timbre.AcuseCancelacion = acuse;
                        tim.GuardarTimbre(timbre);
                        res.Add(new StatusUuid
                        {
                            Uuid   = acuseFoliose.UUID,
                            Status = acuseFoliose.EstatusUUID
                        });
                    }
                }
            }
            RespuestaCancelacion resultado = new RespuestaCancelacion
            {
                Acuse       = acuse,
                StatusUuids = res
            };

            result = resultado;
            return(result);
        }
Exemplo n.º 7
0
        public bool EnvioSAT(TimbreWs33 topPComprobante)
        {
            try
            {
                GeneradorCadenasCfd gen = new GeneradorCadenasCfd();
                string     strLAcuseReciboSAT;
                byte[]     result;
                int        idErrorSAT;
                Encabezado encLMetadata;
                //SHA1 sha = new SHA1CryptoServiceProvider();
                string strComprobante = null;
                if (string.IsNullOrEmpty(topPComprobante.Xml))
                {
                    var directorio = Path.Combine(ConfigurationManager.AppSettings["RutaTimbrado"],
                                                  topPComprobante.RfcEmisor, topPComprobante.FechaFactura.ToString("yyyyMMdd"));
                    if (!Directory.Exists(directorio))
                    {
                        Directory.CreateDirectory(directorio);
                    }
                    var fileName = Path.Combine(directorio, "Comprobante_" + topPComprobante.Uuid + ".xml");
                    strComprobante = File.ReadAllText(fileName, Encoding.UTF8);
                }
                else
                {
                    strComprobante = topPComprobante.Xml;
                }

                Comprobante comprobante = GeneradorCfdi.GetComprobanteFromString(strComprobante);
                //byte[] bytLCadenaOriginal = Encoding.UTF8.GetBytes(gen.CadenaOriginal(strComprobante));
                //result = sha.ComputeHash(bytLCadenaOriginal);
                string strLRfcEmisor = comprobante.Emisor.Rfc;
                //  string strLHash = topPComprobante.Hash;
                //  string version = comprobante.Version;
                string version = "3.3";

                //string strLCertificadoSAT = comprobante.Complemento.timbreFiscalDigital.NoCertificadoSAT;
                string strLCertificadoSAT = ConfigurationManager.AppSettings["NoCertificadoPac"];

                string   strLUUID          = comprobante.Complemento.timbreFiscalDigital.UUID;
                DateTime datLFechaTimbrado = comprobante.Complemento.timbreFiscalDigital.FechaTimbrado;
                string   strLPathArchivo   = AppDomain.CurrentDomain.BaseDirectory +
                                             ConfigurationManager.AppSettings["PathXMLTemporales"] + Guid.NewGuid() + ".xml";
                //Quitar addenda si tiene
                XElement xe      = XElement.Load(new StringReader(strComprobante));
                XElement addenda = xe.Elements(Constantes.CFDVersionNamespace + "Addenda").FirstOrDefault();

                if (addenda != null)
                {
                    addenda.Remove();
                }
                var tw = new SidetecStringWriter(Encoding.UTF8);
                xe.Save(tw, SaveOptions.DisableFormatting);
                string xml = tw.ToString();
                //escribimos el archivo en una carpeta para que el proceso de envio SAT lo tome//
                File.WriteAllText(strLPathArchivo, xml, Encoding.UTF8);
                //armamos el encabezado//
                encLMetadata = new Encabezado(strLRfcEmisor, version, strLCertificadoSAT, strLUUID, datLFechaTimbrado, strLPathArchivo);

                Log.Info("Enviando CFDI al SAT.");
                Log.Info("Se enviará el comprobante con el identificador: " + topPComprobante.IdTimbre);
                Log.Info("Encabezado." + encLMetadata.version + "|" + encLMetadata.UUID + "|" + encLMetadata.NumeroCertificado + "|" + encLMetadata.RfcEmisor + "|" + encLMetadata.Xml);

                var acuseReciboSAT = EnviarCFDIalSAT(encLMetadata);

                if (acuseReciboSAT != null)
                {
                    idErrorSAT = acuseReciboSAT.CodEstatus.Equals("Comprobante Rechazado",
                                                                  StringComparison.InvariantCultureIgnoreCase)
                                     ? Convert.ToInt32(acuseReciboSAT.Incidencia[0].CodigoError)
                                     : 0;
                    if (idErrorSAT != 501 || idErrorSAT != 502)
                    {
                    }
                    var acuseStream   = new MemoryStream();
                    var xmlSerializer = new XmlSerializer(typeof(SAT.CFDI.Cliente.Procesamiento.ServicioRecepcionCFDI.Acuse));
                    xmlSerializer.Serialize(acuseStream, acuseReciboSAT);
                    acuseStream.Seek(0, SeekOrigin.Begin);
                    var acuseReader = new StreamReader(acuseStream);
                    strLAcuseReciboSAT = acuseReader.ReadToEnd();
                    var directorio = Path.Combine(ConfigurationManager.AppSettings["RutaTimbrado"],
                                                  topPComprobante.RfcEmisor, topPComprobante.FechaFactura.ToString("yyyyMMdd"));
                    if (!Directory.Exists(directorio))
                    {
                        Directory.CreateDirectory(directorio);
                    }
                    var fileName = Path.Combine(directorio, "Acuse_" + topPComprobante.Uuid + ".xml");
                    File.WriteAllText(fileName, strLAcuseReciboSAT);
                }
                else
                {
                    idErrorSAT         = 103;
                    strLAcuseReciboSAT = "";
                }
                //idErrorSAT = TraerEstatusSAT(strLAcuseReciboSAT);

                Log.Info("Código de retorno SAT: " + idErrorSAT);
                GuardarInformacion(topPComprobante, idErrorSAT, strLAcuseReciboSAT, acuseReciboSAT);

                File.Delete(strLPathArchivo);

                return(true);
            }
            catch (Exception ex)
            {
                Log.Error("Error al intentar enviar el CFD al SAT, Err:" + ex.ToString());
                return(false);
            }
        }
Exemplo n.º 8
0
        public bool EnvioSatRet(TimbreWs33 topPComprobante)
        {
            try
            {
                GeneradorCadenasCfd gen = new GeneradorCadenasCfd();
                string     strLAcuseReciboSAT;
                byte[]     result;
                int        idErrorSAT;
                Encabezado encLMetadata;
                SHA1       sha            = new SHA1CryptoServiceProvider();
                string     strComprobante = null;
                if (string.IsNullOrEmpty(topPComprobante.Xml))
                {
                    var directorio = Path.Combine(ConfigurationManager.AppSettings["RutaTimbrado"],
                                                  topPComprobante.RfcEmisor, topPComprobante.FechaFactura.ToString("yyyyMMdd"));
                    if (!Directory.Exists(directorio))
                    {
                        Directory.CreateDirectory(directorio);
                    }
                    var fileName = Path.Combine(directorio, "Comprobante_" + topPComprobante.Uuid + ".xml");
                    strComprobante = File.ReadAllText(fileName, Encoding.UTF8);
                }
                else
                {
                    strComprobante = topPComprobante.Xml;
                }
                Retenciones comprobante = TimbradoUtils.DesSerializarRetenciones(strComprobante);
                //byte[] bytLCadenaOriginal = Encoding.UTF8.GetBytes(gen.CadenaOriginal(strComprobante));
                //result = sha.ComputeHash(bytLCadenaOriginal);
                string strLRfcEmisor = comprobante.Emisor.RFCEmisor;
                string strLHash      = topPComprobante.Hash;
                //Quitar addenda si tiene
                XElement xe      = XElement.Load(new StringReader(strComprobante));
                XElement addenda = xe.Elements(Constantes.CFDVersionNamespace + "Addenda").FirstOrDefault();

                if (addenda != null)
                {
                    addenda.Remove();
                }
                var tw = new SidetecStringWriter(Encoding.UTF8);
                xe.Save(tw, SaveOptions.DisableFormatting);
                Log.Info("Enviando CFDI al SAT.");
                Log.Info("Se enviará el comprobante con el identificador: " + topPComprobante.IdTimbre);

                var acuseReciboSAT = ret.EnviarRetencion(strComprobante, topPComprobante.Uuid);
                if (acuseReciboSAT != null)
                {
                    idErrorSAT = acuseReciboSAT.codEstatus.Equals("Comprobante Rechazado",
                                                                  StringComparison.InvariantCultureIgnoreCase)
                                     ? Convert.ToInt32(acuseReciboSAT.listaIncidencia[0].CodigoError)
                                     : 0;
                    var acuseStream   = new MemoryStream();
                    var xmlSerializer = new XmlSerializer(typeof(CertificadorWs.Business.Retenciones.AcuseRecepcionRetencion));
                    xmlSerializer.Serialize(acuseStream, acuseReciboSAT);
                    acuseStream.Seek(0, SeekOrigin.Begin);
                    var acuseReader = new StreamReader(acuseStream);
                    strLAcuseReciboSAT = acuseReader.ReadToEnd();
                    var directorio = Path.Combine(ConfigurationManager.AppSettings["RutaTimbrado"],
                                                  topPComprobante.RfcEmisor, topPComprobante.FechaFactura.ToString("yyyyMMdd"));
                    if (!Directory.Exists(directorio))
                    {
                        Directory.CreateDirectory(directorio);
                    }
                    var fileName = Path.Combine(directorio, "Acuse_" + topPComprobante.Uuid + ".xml");
                    File.WriteAllText(fileName, strLAcuseReciboSAT);
                }
                else
                {
                    idErrorSAT         = 103;
                    strLAcuseReciboSAT = "";
                }
                //idErrorSAT = TraerEstatusSAT(strLAcuseReciboSAT);

                Log.Info("Código de retorno SAT: " + idErrorSAT);
                GuardarInformacion(topPComprobante, idErrorSAT, strLAcuseReciboSAT, acuseReciboSAT);

                return(true);
            }
            catch (Exception ex)
            {
                Log.Error("Error al intentar enviar el CFD al SAT, Err:" + ex.ToString());
                return(false);
            }
        }
Exemplo n.º 9
0
        public bool EnvioSAT(Comprobante comprobante, TimbreWs33 topPComprobante, string cadenaOriginal)
        {
            try
            {
                string     strLAcuseReciboSAT;
                byte[]     result;
                int        idErrorSAT;
                Encabezado encLMetadata;
                SHA1       sha = new SHA1CryptoServiceProvider();
                byte[]     bytLCadenaOriginal = Encoding.UTF8.GetBytes(cadenaOriginal);
                result = sha.ComputeHash(bytLCadenaOriginal);
                string strLRfcEmisor = comprobante.Emisor.Rfc;
                string strLHash      = BitConverter.ToString(result).Replace("-", string.Empty);
                // string version = comprobante.Version;
                string version = "3.3";
                // string strLCertificadoSAT = comprobante.Complemento.timbreFiscalDigital.NoCertificadoSAT;
                string strLCertificadoSAT = ConfigurationManager.AppSettings["NoCertificadoPac"];

                string   strLUUID          = comprobante.Complemento.timbreFiscalDigital.UUID;
                DateTime datLFechaTimbrado = comprobante.Complemento.timbreFiscalDigital.FechaTimbrado;
                string   strLPathArchivo   = ConfigurationManager.AppSettings["PathXMLTemporales"] + strLUUID + ".xml";

                //escribimos el archivo en una carpeta para que el proceso de envio SAT lo tome//
                File.WriteAllText(strLPathArchivo, topPComprobante.Xml, Encoding.UTF8);
                //armamos el encabezado//
                encLMetadata = new Encabezado(strLRfcEmisor, version, strLCertificadoSAT, strLUUID, datLFechaTimbrado, strLPathArchivo);

                Log.Info("Enviando CFDI al SAT.");
                Log.Info("Se enviará el comprobante con el identificador: " + topPComprobante.Uuid);

                var acuseReciboSAT = EnviarCFDIalSAT(encLMetadata);
                if (acuseReciboSAT != null)
                {
                    idErrorSAT = acuseReciboSAT.CodEstatus.Equals("Comprobante Rechazado",
                                                                  StringComparison.InvariantCultureIgnoreCase)
                                     ? Convert.ToInt32(acuseReciboSAT.Incidencia[0].CodigoError)
                                     : 0;
                    var acuseStream   = new MemoryStream();
                    var xmlSerializer = new XmlSerializer(typeof(SAT.CFDI.Cliente.Procesamiento.ServicioRecepcionCFDI.Acuse));
                    xmlSerializer.Serialize(acuseStream, acuseReciboSAT);
                    acuseStream.Seek(0, SeekOrigin.Begin);
                    var acuseReader = new StreamReader(acuseStream);
                    strLAcuseReciboSAT = acuseReader.ReadToEnd();
                }
                else
                {
                    idErrorSAT         = 103;
                    strLAcuseReciboSAT = "";
                }
                //idErrorSAT = TraerEstatusSAT(strLAcuseReciboSAT);

                Log.Info("Código de retorno SAT: " + idErrorSAT);
                GuardarInformacion(topPComprobante, idErrorSAT, strLAcuseReciboSAT, acuseReciboSAT);

                //File.Delete(strLPathArchivo);

                return(true);
            }
            catch (Exception ex)
            {
                Log.Error("Error al intentar enviar el CFD al SAT, Err:" + ex.ToString());
                return(false);
            }
        }