private void BuscarBtn_Click(object sender, EventArgs e) { //Muestra el dialogo para que seleccione el directorio DialogResult result = folderBrowserDialog1.ShowDialog(); if (result == DialogResult.OK) { // // El usuario selecciono el directorio. // DirectorioLbl.Text = folderBrowserDialog1.SelectedPath; string[] archivosEnDirectorio = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.xml"); //Muestra mensaje de confirmación para continuar DialogResult confirmacion = MessageBox.Show("Se encontraron un total de " + archivosEnDirectorio.Length.ToString() + " archivos.\n ¿Desea continuar con la cancelación?", "Confirmación", MessageBoxButtons.YesNo); if (confirmacion == DialogResult.Yes) { //Cifra el certificado personal de la empresa seleccionada try { //Obtiene el certificado y lo almacena var cer = new X509Certificate2(nombreCertificado, contraseña, X509KeyStorageFlags.MachineKeySet); System.Diagnostics.Debug.WriteLine("Procesando:" + cer.ToString()); //Recorre el directorio seleccionado para cancelar los archivos foreach (String nombreArchivo in archivosEnDirectorio) { //Obtiene datos requeridos del XML Comprobante comprobanteActual = Program.ObtenerComprobantes(nombreArchivo); var xml2 = ""; try { //Construye objeto XML para peticion //UUID,RFC,FECHADECANCELACIÓN,CERTIFICADOCIFRADO xml2 = Cancelador.Xml(comprobanteActual.UUID, comprobanteActual.RFC, DateTime.Now, cer); //CANCELAR un folio //Llama al servicio del PAC Tralix para realizar la cancelación var soap2 = Cancelador.Cancelar("https://timbrador.tralix.com:8081/", key, xml2); //Obtiene estatus de respuesta var status = Cancelador.Status(soap2); progresoTxt.Text = progresoTxt.Text + "Procesado: " + nombreArchivo + "\n "; progresoTxt.Text = progresoTxt.Text + "Estatus de cancelacion : " + status + "\n"; } catch (Exception ex) { //Error en construccion de peticion System.Diagnostics.Debug.WriteLine(ex.Message); System.Diagnostics.Debug.WriteLine(ex.InnerException.Message); progresoTxt.Text = progresoTxt.Text + "Error:" + ex.Message + "\n"; } } }catch (Exception ex) { //Error en obtener certificado var error = ex.Message; System.Diagnostics.Debug.WriteLine(error); progresoTxt.Text = progresoTxt.Text + "Error:" + error + "\n"; } } } }
/// <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); }