public string ConsultaCFDIRelacionadosRequest(string RfcPacEnviaSolicitud, string RfcReceptor, string RfcEmisor, string Uuid)
        {
            AccesoServicios ser           = new AccesoServicios();
            IList           uuidsCancelar = new List <string>();

            uuidsCancelar.Add(Uuid.ToUpper());
            string result;

            using (new NtLinkLocalServiceEntities())
            { string        path = "";
              NtLinkEmpresa nle  = new NtLinkEmpresa();
              if (!string.IsNullOrEmpty(RfcEmisor))
              {
                  empresa empresa = nle.GetByRfc(RfcEmisor);
                  SAT.CFDI.Cliente.Procesamiento.Encabezado encLMetadata2 = new SAT.CFDI.Cliente.Procesamiento.Encabezado(RfcEmisor, this.FechaHoy(), uuidsCancelar);
                  path = Path.Combine(ConfigurationManager.AppSettings["Resources"], RfcEmisor);
                  string pathCer = Path.Combine(path, "Certs", "csd.cer");
                  string pathKey = Path.Combine(path, "Certs", "csd.key");
                  string pass    = empresa.PassKey;
                  SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.SignatureType asignature = ser.Asignature(pathKey, encLMetadata2, pass, pathCer);
                  result = ser.ConsultaCFDIRelacionadosRequest(RfcPacEnviaSolicitud, RfcReceptor, RfcEmisor, Uuid, asignature);
              }
              else
              {
                  empresa empresa = nle.GetByRfc(RfcReceptor);
                  SAT.CFDI.Cliente.Procesamiento.Encabezado encLMetadata2 = new SAT.CFDI.Cliente.Procesamiento.Encabezado(RfcReceptor, this.FechaHoy(), uuidsCancelar);
                  path = Path.Combine(ConfigurationManager.AppSettings["Resources"], RfcReceptor);
                  string pathCer = Path.Combine(path, "Certs", "csd.cer");
                  string pathKey = Path.Combine(path, "Certs", "csd.key");
                  string pass    = empresa.PassKey;
                  SAT.CFDI.Cliente.Procesamiento.ServicioRelacionados.SignatureType asignature = ser.Asignature(pathKey, encLMetadata2, pass, pathCer);
                  result = ser.ConsultaCFDIRelacionadosRequest(RfcPacEnviaSolicitud, RfcReceptor, RfcEmisor, Uuid, asignature);
              } }
            return(result);
        }
Beispiel #2
0
        public static empresa ValidarUsuarioSinSaldo(string rfc)
        {
            NtLinkEmpresa em      = new NtLinkEmpresa();
            empresa       empresa = em.GetByRfc(rfc);
            empresa       result;

            if (empresa == null)
            {
                TimbradoUtils.Logger.Info(rfc + " No encontrado");
                result = null;
            }
            else
            {
                if (empresa.Bloqueado)
                {
                    TimbradoUtils.Logger.Info(empresa.RFC + "-> Bloqueado");
                    throw new FaultException("El RFC del emisor se encuentra bloqueado, favor de ponerse en contacto con atención al cliente");
                }
                if (empresa.Baja)
                {
                    TimbradoUtils.Logger.Info(empresa.RFC + "-> Baja");
                    throw new FaultException("El RFC del emisor se encuentra dado de baja, favor de ponerse en contacto con atención a clientes");
                }
                NtLinkSistema nls     = new NtLinkSistema();
                Sistemas      sistema = nls.GetSistema((int)empresa.idSistema.Value);
                if (sistema.Bloqueado)
                {
                    TimbradoUtils.Logger.Info(sistema.Rfc + "-> Bloqueado");
                    throw new FaultException("El RFC del emisor se encuentra dado de baja, favor de ponerse en contacto con atención a clientes");
                }
                result = empresa;
            }
            return(result);
        }
Beispiel #3
0
        /// <summary>
        /// Cancela un cfdi
        /// </summary>
        /// <param name="uuid">uuid del comprobante a cancelar</param>
        /// <param name="rfc">RFC del emisor</param>
        /// <returns>Acuse de cancelación del SAT</returns>
        public string CancelaCfdi(string uuid, string rfcEmisor, string expresion, string rfcReceptor)
        {
            Cancelador cancelador         = new Cancelador();
            string     respuesta          = null;
            string     acuse              = null;
            Cancelador canceladorConsulta = new Cancelador();
            string     consulta           = canceladorConsulta.ConsultaCFDI(expresion, uuid, rfcReceptor);
            string     result;

            if (consulta != "OK")
            {
                result = "Error al cancelar el comprobante: " + consulta;
            }
            else
            {
                NtLinkEmpresa nle = new NtLinkEmpresa(); //
                int           resultado;

                //int numero = 0;
                //if (!int.TryParse(rfcEmisor, out numero))
                //{
                empresa empresa = nle.GetByRfc(rfcEmisor);    //
                resultado = cancelador.Cancelar(uuid, rfcEmisor, ref respuesta, ref acuse);

                //}
                //else
                //{
                //    var emp = nle.GetById(numero);
                //    resultado = cancelador.CancelarPorID(uuid, emp.IdEmpresa, ref respuesta, ref acuse);//para repetidos rfc

                //}



                // int resultado = cancelador.Cancelar(uuid, rfcEmisor, ref respuesta, ref acuse);
                // int resultado = cancelador.Cancelar(uuid, empresa.IdEmpresa, ref respuesta, ref acuse);

                CertificadorService.Logger.Info(respuesta);
                CertificadorService.Logger.Info(acuse);
                CertificadorService.Logger.Info(resultado);
                if (resultado == 201 || resultado == 202)
                {
                    result = acuse;
                }
                else
                {
                    result = respuesta;
                }
            }
            return(result);
        }
Beispiel #4
0
        public static empresa ValidarAplicacion(string hash, string rfc)
        {
            empresa result;

            if (hash == null)
            {
                result = null;
            }
            else if (hash != ConfigurationManager.AppSettings["HashFacturacion"])
            {
                result = null;
            }
            else
            {
                NtLinkEmpresa em      = new NtLinkEmpresa();
                empresa       empresa = em.GetByRfc(rfc);
                if (empresa == null)
                {
                    TimbradoUtils.Logger.Info(rfc + " No encontrado");
                    result = null;
                }
                else
                {
                    if (empresa.Bloqueado)
                    {
                        TimbradoUtils.Logger.Info(empresa.RFC + "-> Bloqueado");
                        throw new FaultException("El RFC del emisor se encuentra bloqueado, favor de ponerse en contacto con atención al cliente");
                    }
                    if (empresa.Baja)
                    {
                        TimbradoUtils.Logger.Info(empresa.RFC + "-> Baja");
                        throw new FaultException("El RFC del emisor se encuentra dado de baja, favor de ponerse en contacto con atención a clientes");
                    }
                    NtLinkSistema nls     = new NtLinkSistema();
                    Sistemas      sistema = nls.GetSistema((int)empresa.idSistema.Value);
                    if (sistema.Bloqueado)
                    {
                        TimbradoUtils.Logger.Info(sistema.Rfc + "-> Bloqueado");
                        throw new FaultException("El RFC del emisor se encuentra bloqueado, favor de ponerse en contacto con atención a clientes");
                    }
                    if ((sistema.TipoSistema != 3 || sistema.TipoSistema != 0) && sistema.SaldoTimbrado <= 0)
                    {
                        TimbradoUtils.Logger.Info("Saldo: " + sistema.SaldoTimbrado);
                        throw new FaultException("No cuentas con saldo suficiente para timbrar documentos, contacta a tu ejecutivo de ventas");
                    }
                    result = empresa;
                }
            }
            return(result);
        }
        public string ProcesarRespuestaAceptacionRechazo(string RfcReceptor, string RfcPacEnviaSolicitud, List <Folios> F)
        {
            AccesoServicios ser           = new AccesoServicios();
            IList           uuidsCancelar = new List <string>();

            foreach (Folios f in F)
            {
                uuidsCancelar.Add(f.UUDI.ToUpper());
            }
            List <SolicitudAceptacionRechazoFolios> Folio = new List <SolicitudAceptacionRechazoFolios>();

            foreach (Folios f in F)
            {
                SolicitudAceptacionRechazoFolios x = new SolicitudAceptacionRechazoFolios();
                x.UUID = f.UUDI;
                if (f.Respuesta.ToString() == "Aceptacion")
                {
                    x.Respuesta = TipoAccionPeticionCancelacion.Aceptacion;
                }
                else
                {
                    x.Respuesta = TipoAccionPeticionCancelacion.Rechazo;
                }
                Folio.Add(x);
            }
            string result;

            using (new NtLinkLocalServiceEntities())
            {
                NtLinkEmpresa nle     = new NtLinkEmpresa();
                empresa       empresa = nle.GetByRfc(RfcReceptor);
                string        fecha   = this.FechaHoy();
                SAT.CFDI.Cliente.Procesamiento.Encabezado encLMetadata2 = new SAT.CFDI.Cliente.Procesamiento.Encabezado(RfcReceptor, fecha, uuidsCancelar);
                string path    = Path.Combine(ConfigurationManager.AppSettings["Resources"], RfcReceptor);
                string pathCer = Path.Combine(path, "Certs", "csd.cer");
                string pathKey = Path.Combine(path, "Certs", "csd.key");
                string pass    = empresa.PassKey;
                SAT.CFDI.Cliente.Procesamiento.ServicioAceptacionRechazo.SignatureType asignature = ser.AsignatureProceso(pathKey, encLMetadata2, pass, pathCer);
                result = ser.ProcesarRespuestaAceptacionRechazo(RfcReceptor, fecha, RfcPacEnviaSolicitud, Folio, asignature);
            }
            return(result);
        }
        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);
        }
        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);
        }