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()); } }
public void LecturaBase() { try { NtLinkTimbrado timbradoData = new NtLinkTimbrado(); ProcesoEnvioSAT proLEnvioSAT = new ProcesoEnvioSAT(); string strLRutaValidacion; int intMRegistros = Convert.ToInt32(ConfigurationManager.AppSettings["NumRegistros"]); if (intMRegistros <= 0) { intMRegistros = 1000; } Log.Info("NumRegistros"); while (_activo) { try { //lectura a base de datos Log.Info("Obtener datos"); List <TimbreWs33> topLListaComp = timbradoData.ObtenerTimbres(); if (topLListaComp.Count() > 0) { Log.Info("Se enviaran " + topLListaComp.Count() + " CFD's al SAT"); foreach (var topComprobante in topLListaComp) { if (topComprobante.Retenciones == true) //se agrego para retenciones rgv { proLEnvioSAT.EnvioSatRet(topComprobante); //se agrego para retenciones rgv } else//se agrego para retenciones rgv { proLEnvioSAT.EnvioSAT(topComprobante); } } } else { Log.Info("No existen CFD's por enviar el proceso se pausará: " + Convert.ToInt32(ConfigurationManager.AppSettings["TiempoDormido"]) / 1000 + " segundos."); Thread.Sleep(Convert.ToInt32(ConfigurationManager.AppSettings["TiempoDormido"])); } } catch (Exception ex) { Log.Error("(Lectura Base) Error interno: " + ex); } } } catch (Exception ex) { Log.Error("(Lectura Base) Error de inicio: " + ex); } }
private void button2_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(txtId.Text)) { NtLinkTimbrado tim = new NtLinkTimbrado(); var timbre = tim.ObtenerTimbre(int.Parse(txtId.Text)); ProcesoEnvioSAT envio = new ProcesoEnvioSAT(); var res = envio.EnvioSAT(timbre); txtLogEnvio.Text = "Enviado: " + res.ToString(); } }
public int ValidaTimbrePrevio(XElement element, string hash, ref string comprobante, ref string uid) { try { var complemento = element.Elements(Constantes.CFDVersionNamespace + "Complemento").FirstOrDefault(); if (complemento != null) { var timbre = complemento.Elements(Constantes.CFDTimbreFiscalVersionNamespace + "TimbreFiscalDigital"). FirstOrDefault(); if (timbre != null) { return(307); } } NtLinkTimbrado tim = new NtLinkTimbrado(); if (ConfigurationManager.AppSettings["Pruebas"] != "true") { if (tim.ExisteTimbre(hash)) { var cfdi = tim.ObtenerTimbreHash(hash); uid = cfdi.Uuid; if (string.IsNullOrEmpty(cfdi.Xml)) { var directorio = Path.Combine(rutaTimbrado, cfdi.RfcEmisor, cfdi.FechaFactura.ToString("yyyyMMdd")); if (!Directory.Exists(directorio)) { Directory.CreateDirectory(directorio); } var fileName = Path.Combine(directorio, "Comprobante_" + cfdi.Uuid + ".xml"); comprobante = File.ReadAllText(fileName, Encoding.UTF8); } else { comprobante = cfdi.Xml; } Logger.Warn("Hash Duplicado: " + hash); return(307); } } return(0); } catch (Exception ee) { Logger.Error("", ee); return(307); } }
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); }
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); }
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); }