/// <summary> /// Genera el mensaje XML de Ticket de Requerimiento de Acceso (TRA). /// Genera un Sistema de Gestion de Contenidos (CMS) del Ticket de Requerimiento de Acceso (TRA) con el certificado. /// Codifica el CMS en Base64 /// Invoca al WebService de Autentificacion y Autorizacion (WSAA) con el CMS Firmado y Recibo la respuesta Ticket de Autorizacion (TA) /// Extrae y valido la informacion de Autorizacion (TA) /// </summary> /// <param name="pCertificado_Peticion">Objeto Certificado de Peticion</param> /// <remarks></remarks> public Entidades.Tickets_Acceso Gestionar_TA(Entidades.CertificadosX509 pCertificado_Peticion) { Entidades.Tickets_Acceso objEntidadesTicket_Rta = new Entidades.Tickets_Acceso(); XmlDocument Xml_LoginTicket_Peticion = new XmlDocument(); byte[] LoginTicket_Peticion_Firmada = null; string Codificado_CMS_Login_TicketPeticion = ""; string loginTicket_Respuesta = ""; // PASO 1: Genero el mensaje XML de Ticket de Requerimiento de Acceso (TRA). Xml_LoginTicket_Peticion = Generar_XML_TRA(pCertificado_Peticion); // PASO 2: Genero un Sistema de Gestion de Contenidos (CMS) del Ticket de Requerimiento de Acceso (TRA) con el certificado. LoginTicket_Peticion_Firmada = Firmar_XML_TRA(Xml_LoginTicket_Peticion); // PASO 3: Codifico el CMS en Base64 Codificado_CMS_Login_TicketPeticion = Codificar_CMS_TRA(LoginTicket_Peticion_Firmada); // PASO 4: Invoco al WebService de Autentificacion y Autorizacion (WSAA) con el CMS Firmado y Recibo la respuesta Ticket de Autorizacion (TA) loginTicket_Respuesta = Obtener_TA_Respuesta(Codificado_CMS_Login_TicketPeticion, pCertificado_Peticion); // PASO 5: Extraigo y valido la informacion de Autorizacion (TA) objEntidadesTicket_Rta = Obtener_Entidad_Respuesta(loginTicket_Respuesta); return objEntidadesTicket_Rta; }
/// <summary> /// Delega a la Capa de Datos devolver un Ticket de Acceso Vigente de la B.D. /// </summary> /// <returns></returns> public Entidades.Tickets_Acceso TraerTicketActivo() { Entidades.Tickets_Acceso objEntidadesTicket_Acceso = new Entidades.Tickets_Acceso(); objEntidadesTicket_Acceso = objDatosTickets_Acceso.TraerTicketActivo(); return objEntidadesTicket_Acceso; }
/// <summary> /// Control del Botón de Pedir Ticket de Acceso. /// Si hay uno vigente en la B.D. utiliza este, sino pide uno nuevo al WebService. /// </summary> private void pedirTicketAcceso() { objEntidadesConfiguracionCertificado = objLogicaConfiguracionCertificado.TraerConfiguracion(); /*Verifica si tiene una configuracion cargada en la B.D.*/ if (objEntidadesConfiguracionCertificado.Cuit != 0) { /*Tiene una configuracion cargada*/ //Entidades.Tickets objEntidadesTicket_Rta = new Entidades.Tickets(); Entidades.Tickets_Acceso objEntidadesTicket_Acceso = new Entidades.Tickets_Acceso(); Logica.Tickets_Acceso objLogicaTicket_Acceso = new Logica.Tickets_Acceso(); //Devuelve un Ticket Vigente guardado en la B.D. objEntidadesTicket_Acceso = objLogicaTicket_Acceso.TraerTicketActivo(); if (objEntidadesTicket_Acceso.Id_Ticket == 0) { /*No hay ningún Ticket de Acceso habilitado en la base de Datos, se pedirá uno nuevo*/ Entidades.CertificadosX509 objEntidadesCertificado = new Entidades.CertificadosX509(); Logica.CertificadosX509 objLogicaCertificado = new Logica.CertificadosX509(); objEntidadesCertificado.IdServicioNegocio = DEFAULT_SERVICIO; if (objEntidadesConfiguracionCertificado.TipoAprobacion == 'P') { objEntidadesCertificado.UrlWsaaWsdl = SERVIDOR_WSAA_PRODUCCION; } else { objEntidadesCertificado.UrlWsaaWsdl = SERVIDOR_WSAA_HOMOLOGACION; } /*Pido en el WebService un Nuevo Ticket de Acceso*/ Logica.Tickets objTicketRespuesta = new Logica.Tickets(); objEntidadesTicket_Acceso = objTicketRespuesta.Gestionar_TA(objEntidadesCertificado); objEntidadesTicket_Acceso.Cuit = objEntidadesConfiguracionCertificado.Cuit; objEntidadesTicket_Acceso.TipoAprobacion = objEntidadesConfiguracionCertificado.TipoAprobacion; if (objEntidadesTicket_Acceso.Sign != null) { Logica.Tickets_Acceso objTicketsAcceso = new Logica.Tickets_Acceso(); //Guarda el ticket en la B.D. objTicketsAcceso.Agregar(objEntidadesTicket_Acceso); } } mostrarDatosTicketAcceso(objEntidadesTicket_Acceso); } else { MessageBox.Show("Para utilizar el programa primero debe cargar el certificado desde Configuracion -> Certificado"); } }
/// <summary> /// Detecta si el WebService WSFEv1 de AFIP está funcionando /// </summary> /// <returns></returns> public bool estadoWS() { bool estado = false; Entidades.Tickets_Acceso objEntidadesTicket_Acceso = new Entidades.Tickets_Acceso(); Logica.Tickets_Acceso objLogicaTicket_Acceso = new Logica.Tickets_Acceso(); objEntidadesTicket_Acceso = objLogicaTicket_Acceso.TraerTicketActivo(); //Llamo al Webservice para recuperar los Paises Logica.WebServices_AFIP objLogicaWebServiceAfip = new Logica.WebServices_AFIP(); if (objEntidadesTicket_Acceso.TipoAprobacion == 'P') //Producción { /*WebService Producción*/ if (objLogicaWebServiceAfip.FEDummy() == Entidades.WebServices_AFIP.RespuestaWS.Correcta) { estado = true; } else { estado = false; } } else { /*WebService Homologacion*/ if (objLogicaWebServiceAfip.FEDummy_Homologacion() == Entidades.WebServices_AFIP.RespuestaWS.Correcta) { estado = true; } else { estado = false; } } return estado; }
/// <summary> /// Control Botón Actualizar /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnActualizarUltimosNros_Click(object sender, EventArgs e) { Entidades.Tickets_Acceso objEntidadesTicket_Acceso = new Entidades.Tickets_Acceso(); Logica.Tickets_Acceso objLogicaTicket_Acceso = new Logica.Tickets_Acceso(); objEntidadesTicket_Acceso = objLogicaTicket_Acceso.TraerTicketActivo(); //Asigno Punto de Venta int ptoVenta = Convert.ToInt32(cboPtosVenta.SelectedValue); //Llamo al Webservice para recuperar los Ultimos Nros. de Comprobantes Logica.WebServices_AFIP objLogicaWebServiceAfip = new Logica.WebServices_AFIP(); if (objEntidadesTicket_Acceso.TipoAprobacion == 'P') //Producción { /*WebService Producción*/ if (objLogicaWebServiceAfip.FECompUltimoAutorizado(objEntidadesTicket_Acceso, ptoVenta) == Entidades.WebServices_AFIP.RespuestaWS.Correcta) { MessageBox.Show("Últimos Nros. de Comprobantes actualizados desde el WebService"); } else { MessageBox.Show("El WebService devolvió un Error/Evento. Por favor revise los Logs"); } } else { /*WebService Homologacion*/ if (objLogicaWebServiceAfip.FECompUltimoAutorizado_Homologacion(objEntidadesTicket_Acceso, ptoVenta) == Entidades.WebServices_AFIP.RespuestaWS.Correcta) { MessageBox.Show("Últimos Nros. de Comprobantes actualizados desde el WebService"); } else { MessageBox.Show("El WebService devolvió un Error/Evento. Por favor revise los Logs"); } } TraerTodos(); }
/// <summary> /// Control del Botón Actualizar Puntos de Venta /// Llama al WebService para obtener los Puntos de Venta y guardarlos en la B.D. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnActualizarPtoVenta_Click(object sender, EventArgs e) { Entidades.Tickets_Acceso objEntidadesTicket_Acceso = new Entidades.Tickets_Acceso(); Logica.Tickets_Acceso objLogicaTicket_Acceso = new Logica.Tickets_Acceso(); objEntidadesTicket_Acceso = objLogicaTicket_Acceso.TraerTicketActivo(); //Llamo al Webservice para recuperar los Puntos de Venta Logica.WebServices_AFIP objLogicaWebServiceAfip = new Logica.WebServices_AFIP(); if (objEntidadesTicket_Acceso.TipoAprobacion == 'P') //Producción { /*WebService Producción*/ if (objLogicaWebServiceAfip.FEParamGetPtosVenta(objEntidadesTicket_Acceso) == Entidades.WebServices_AFIP.RespuestaWS.Correcta) { MessageBox.Show("Puntos de Venta actualizados desde el WebService"); } else { MessageBox.Show("El WebService devolvió un Error/Evento. Por favor revise los Logs"); } } else { /*WebService Homologacion*/ if (objLogicaWebServiceAfip.FEParamGetPtosVenta_Homologacion(objEntidadesTicket_Acceso) == Entidades.WebServices_AFIP.RespuestaWS.Correcta) { MessageBox.Show("Puntos de Venta actualizados desde el WebService"); } else { MessageBox.Show("El WebService devolvió un Error/Evento. Por favor revise los Logs"); } } TraerTodos(); }
/// <summary> /// Obtengo la informacion del Ticket de Autorizacion (TA) /// y obtengo un objeto Ticket Autorizacion /// </summary> /// <param name="pLoginRespuesta">Respuesta TA</param> /// <returns></returns> public Entidades.Tickets_Acceso Obtener_Entidad_Respuesta(string pLoginRespuesta) { Entidades.Tickets_Acceso objEntidadesTicket_Rta = new Entidades.Tickets_Acceso(); try { Xml_LoginTicket_Respuesta = new XmlDocument(); Xml_LoginTicket_Respuesta.LoadXml(pLoginRespuesta); objEntidadesTicket_Rta.Id_Ticket = UInt32.Parse(Xml_LoginTicket_Respuesta.SelectSingleNode("//uniqueId").InnerText); objEntidadesTicket_Rta.Fecha_Generacion = DateTime.Parse(Xml_LoginTicket_Respuesta.SelectSingleNode("//generationTime").InnerText); objEntidadesTicket_Rta.Fecha_Expiracion = DateTime.Parse(Xml_LoginTicket_Respuesta.SelectSingleNode("//expirationTime").InnerText); objEntidadesTicket_Rta.Sign = Xml_LoginTicket_Respuesta.SelectSingleNode("//sign").InnerText; objEntidadesTicket_Rta.Token = Xml_LoginTicket_Respuesta.SelectSingleNode("//token").InnerText; } catch (Exception exAnalizarLoginTicketResponse) { throw new Exception("ERROR: Clase: Logica.Tickets. Metodo: Obtener_Entidad_Respuesta. Detalle: " + exAnalizarLoginTicketResponse.Message); } return objEntidadesTicket_Rta; }
/// <summary> /// Control Botón Actualizar desde AFIP /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnTraerCbtes_Click(object sender, EventArgs e) { Entidades.Tickets_Acceso objEntidadesTicket_Acceso = new Entidades.Tickets_Acceso(); Logica.Tickets_Acceso objLogicaTicket_Acceso = new Logica.Tickets_Acceso(); Entidades.Comprobantes objEntidadesComprobantes = new Entidades.Comprobantes(); objEntidadesTicket_Acceso = objLogicaTicket_Acceso.TraerTicketActivo(); //Asigno Punto de Venta int ptoVenta = Convert.ToInt32(cboPtosVenta.SelectedValue); //Asigno Tipo de Comprobante int tipoCbte = Convert.ToInt32(cboTipoCbte.SelectedValue); //Llamo al Webservice para recuperar los Comprobantes Aprobados Logica.WebServices_AFIP objLogicaWebServiceAfip = new Logica.WebServices_AFIP(); if (objEntidadesTicket_Acceso.TipoAprobacion == 'P') //Producción { if (chkFiltroNros.Checked == true) { /*WebService Producción*/ if (objLogicaWebServiceAfip.FECompConsultar(objEntidadesTicket_Acceso, ptoVenta, tipoCbte, Convert.ToInt64(txtNroCbteDesde.Text), Convert.ToInt64(txtNroCbteHasta.Text)) == Entidades.WebServices_AFIP.RespuestaWS.Correcta) { MessageBox.Show("Comprobantes Autorizados desde el WebService"); } else { MessageBox.Show("El WebService devolvió un Error/Evento. Por favor revise los Logs"); } } else { /*WebService Producción*/ if (objLogicaWebServiceAfip.FECompConsultar(objEntidadesTicket_Acceso, ptoVenta, tipoCbte) == Entidades.WebServices_AFIP.RespuestaWS.Correcta) { MessageBox.Show("Comprobantes Autorizados desde el WebService"); } else { MessageBox.Show("El WebService devolvió un Error/Evento. Por favor revise los Logs"); } } } else { if (chkFiltroNros.Checked == true) { /*WebService Homologacion*/ if (objLogicaWebServiceAfip.FECompConsultar_Homologacion(objEntidadesTicket_Acceso, ptoVenta, tipoCbte, Convert.ToInt64(txtNroCbteDesde.Text), Convert.ToInt64(txtNroCbteHasta.Text)) == Entidades.WebServices_AFIP.RespuestaWS.Correcta) { MessageBox.Show("Comprobantes Autorizados desde el WebService"); } else { MessageBox.Show("El WebService devolvió un Error/Evento. Por favor revise los Logs"); } } else { /*WebService Homologacion*/ if (objLogicaWebServiceAfip.FECompConsultar_Homologacion(objEntidadesTicket_Acceso, ptoVenta, tipoCbte) == Entidades.WebServices_AFIP.RespuestaWS.Correcta) { MessageBox.Show("Comprobantes Autorizados desde el WebService"); } else { MessageBox.Show("El WebService devolvió un Error/Evento. Por favor revise los Logs"); } } } TraerTodos(ptoVenta, tipoCbte); }
/// <summary> /// Actualiza desde el WebService los Últimos Nros de Comprobantes Autorizados /// </summary> private void actualizarUltAutorizadosRTA() { lblTablaUltAutorizadosRTA.ForeColor = Color.Black; lblTablaUltAutorizadosRTA.Text = "Procesando..."; lblTablaUltAutorizadosRTA.Refresh(); Entidades.Tickets_Acceso objEntidadesTicket_Acceso = new Entidades.Tickets_Acceso(); Logica.Tickets_Acceso objLogicaTicket_Acceso = new Logica.Tickets_Acceso(); objEntidadesTicket_Acceso = objLogicaTicket_Acceso.TraerTicketActivo(); /*Busco Todos los Puntos de Venta que existen*/ int ptoVenta; Logica.PtosVenta objLogicaPtosVenta = new Logica.PtosVenta(); DataTable puntosVentaDT = objLogicaPtosVenta.TraerTodos(); foreach(DataRow ptoVentafila in puntosVentaDT.Rows) { //Asigno Punto de Venta ptoVenta = Convert.ToInt32(ptoVentafila["Id_PtoVenta"]); //Llamo al Webservice para recuperar los Ultimos Nros. de Comprobantes Logica.WebServices_AFIP objLogicaWebServiceAfip = new Logica.WebServices_AFIP(); if (objEntidadesTicket_Acceso.TipoAprobacion == 'P') //Producción { /*WebService Producción*/ if (objLogicaWebServiceAfip.FECompUltimoAutorizado(objEntidadesTicket_Acceso, ptoVenta) == Entidades.WebServices_AFIP.RespuestaWS.Correcta) { lblTablaUltAutorizadosRTA.ForeColor = Color.Green; lblTablaUltAutorizadosRTA.Text = "OK"; lblTablaUltAutorizadosRTA.Refresh(); } else { lblTablaUltAutorizadosRTA.ForeColor = Color.Red; lblTablaUltAutorizadosRTA.Text = "ERROR"; lblTablaUltAutorizadosRTA.Refresh(); } } else { /*WebService Homologacion*/ if (objLogicaWebServiceAfip.FECompUltimoAutorizado_Homologacion(objEntidadesTicket_Acceso, ptoVenta) == Entidades.WebServices_AFIP.RespuestaWS.Correcta) { lblTablaUltAutorizadosRTA.ForeColor = Color.Green; lblTablaUltAutorizadosRTA.Text = "OK"; lblTablaUltAutorizadosRTA.Refresh(); } else { lblTablaUltAutorizadosRTA.ForeColor = Color.Red; lblTablaUltAutorizadosRTA.Text = "ERROR"; lblTablaUltAutorizadosRTA.Refresh(); } } } }
/// <summary> /// Actualiza desde el WebService la Tabla de Puntos de Ventas /// </summary> private void actualizarTablaPuntosVenta() { lblTablaPuntosVentaRTA.ForeColor = Color.Black; lblTablaPuntosVentaRTA.Text = "Procesando..."; lblTablaPuntosVentaRTA.Refresh(); Entidades.Tickets_Acceso objEntidadesTicket_Acceso = new Entidades.Tickets_Acceso(); Logica.Tickets_Acceso objLogicaTicket_Acceso = new Logica.Tickets_Acceso(); objEntidadesTicket_Acceso = objLogicaTicket_Acceso.TraerTicketActivo(); //Llamo al Webservice para recuperar los Puntos de Venta Logica.WebServices_AFIP objLogicaWebServiceAfip = new Logica.WebServices_AFIP(); if (objEntidadesTicket_Acceso.TipoAprobacion == 'P') //Producción { /*WebService Producción*/ if (objLogicaWebServiceAfip.FEParamGetPtosVenta(objEntidadesTicket_Acceso) == Entidades.WebServices_AFIP.RespuestaWS.Correcta) { lblTablaPuntosVentaRTA.ForeColor = Color.Green; lblTablaPuntosVentaRTA.Text = "OK"; lblTablaPuntosVentaRTA.Refresh(); } else { lblTablaPuntosVentaRTA.ForeColor = Color.Red; lblTablaPuntosVentaRTA.Text = "ERROR"; lblTablaPuntosVentaRTA.Refresh(); } } else { /*WebService Homologacion*/ if (objLogicaWebServiceAfip.FEParamGetPtosVenta_Homologacion(objEntidadesTicket_Acceso) == Entidades.WebServices_AFIP.RespuestaWS.Correcta) { lblTablaPuntosVentaRTA.ForeColor = Color.Green; lblTablaPuntosVentaRTA.Text = "OK"; lblTablaPuntosVentaRTA.Refresh(); } else { lblTablaPuntosVentaRTA.ForeColor = Color.Red; lblTablaPuntosVentaRTA.Text = "ERROR"; lblTablaPuntosVentaRTA.Refresh(); } } }
/// <summary> /// Pide un Nuevo Ticket de Acceso con las configuraciones cargadas /// </summary> /// <returns></returns> private bool pedirNuevoTicketAcc() { bool respuesta = false; lblPedirNuevoTicketAccRTA.ForeColor = Color.Black; lblPedirNuevoTicketAccRTA.Text = "Procesando..."; lblPedirNuevoTicketAccRTA.Refresh(); /*Pide la configuración desde la B.D.*/ Entidades.Configuracion_Certificado objEntidadesConfiguracionCertificado = new Entidades.Configuracion_Certificado(); Logica.Configuracion_Certificado objLogicaConfiguracionCertificado = new Logica.Configuracion_Certificado(); objEntidadesConfiguracionCertificado = objLogicaConfiguracionCertificado.TraerConfiguracion(); /*Creo un Certificado a partir de la configuración que recuperé desde la B.D.*/ Entidades.CertificadosX509 objEntidadesCertificado = new Entidades.CertificadosX509(); const string DEFAULT_SERVICIO = "wsfe"; const string SERVIDOR_WSAA_PRODUCCION = "https://wsaa.afip.gov.ar/ws/services/LoginCms?WSDL"; const string SERVIDOR_WSAA_HOMOLOGACION = "https://wsaahomo.afip.gov.ar/ws/services/LoginCms?WSDL"; objEntidadesCertificado.IdServicioNegocio = DEFAULT_SERVICIO; if (objEntidadesConfiguracionCertificado.TipoAprobacion == 'P') { objEntidadesCertificado.UrlWsaaWsdl = SERVIDOR_WSAA_PRODUCCION; } else { objEntidadesCertificado.UrlWsaaWsdl = SERVIDOR_WSAA_HOMOLOGACION; } /*Pido en el WebService un Nuevo Ticket de Acceso*/ Entidades.Tickets_Acceso objEntidadesTicket_Acceso = new Entidades.Tickets_Acceso(); Logica.Tickets_Acceso objLogicaTicket_Acceso = new Logica.Tickets_Acceso(); Logica.Tickets objTicketRespuesta = new Logica.Tickets(); objEntidadesTicket_Acceso = objTicketRespuesta.Gestionar_TA(objEntidadesCertificado); objEntidadesTicket_Acceso.Cuit = objEntidadesConfiguracionCertificado.Cuit; objEntidadesTicket_Acceso.TipoAprobacion = objEntidadesConfiguracionCertificado.TipoAprobacion; if (objEntidadesTicket_Acceso.Sign != null) { Logica.Tickets_Acceso objTicketsAcceso = new Logica.Tickets_Acceso(); //Guarda el ticket en la B.D. objTicketsAcceso.Agregar(objEntidadesTicket_Acceso); lblPedirNuevoTicketAccRTA.ForeColor = Color.Green; lblPedirNuevoTicketAccRTA.Text = "OK"; lblPedirNuevoTicketAccRTA.Refresh(); respuesta = true; } else { lblPedirNuevoTicketAccRTA.ForeColor = Color.Red; lblPedirNuevoTicketAccRTA.Text = "ERROR"; lblPedirNuevoTicketAccRTA.Refresh(); } return respuesta; }