SDK viafirma platform

Procesar respuesta .Net

Clase en la aplicación de ejemplo

Para procesar la respuesta de viafirma platform nos ayudaremos de la clase Default.aspx dentro del directorio viafirma que tendremos a la eschucha en la aplicación, que deberá importar la calse Viafirma.ViafirmaClient , y tendrá que implementar los siguientes métodos:

  • ProcessResponseAutenticaction: viafirma platform ha recuperado correctamente los datos del certificado digital del usuario final y nos lo devuelve para que nuestra aplicación los procese y decida qué hacer con ellos. Dentro de este método se controla los siguientes aspectos:

    • cancel: respuesta cuando el usuario final ha cancelado el proceso voluntariamente (pulsó sobre el botón “cancelar”).

    • error: viafirma platform ha lanzado algún error y la autenticación no ha podido ser completada con éxito. Nuestra aplicación procesará el mensaje de error y poder continuar con la lógica necearia. Ej. “CA no reconocida, certificado revocado, certificado caducado, etc.”.

En la respuesta recibida, redirigirá a la página indicada. En este método son recuperados los datos del certificado digital, los cuales vendrán contenidos en el objeto UsuarioGenericoViafirma.

En el siguiente ejemplo, si la autenticación ha sido correcta, guardamos los datos del usuario en la request y redireccionamos al usuario final a una página de destino.

<%@ Page  Language="C#" Inherits="Viafirma.ViafirmaClient"  %>
<%--
Página para la gestión de la comunicación con Viafirma.
Nota: Esta página nunca sera visible por el usuario, solo es utilizada para gestionar las refirecciones y configuración específica.
--%>
<script runat="server" >

    // Al gargar la página se realiza todo el procesado para el intercambio de información con Viafirma.
public void Page_Load(Object sender, EventArgs e){
    //Es posible enviar ciertos parametros al servidor en este punto para obtener algunas funcionalidades adicinales
    //this.AddOptionalRequest(PEM); //Obliga a que el servidor envíe el certificado firmante
    //this.AddOptionalRequest(AUTO_SEND); //Si la plataforma detecta solo un certificado, lo utiliza por defecto
    try
    {
        ProcessViafirma();
    }
    catch (InvalidOperationException exc)
    {
        System.Console.WriteLine(exc.Message);
        String messageError = exc.Message;
        Uri url = new Uri(HttpContext.Current.Request.Url, HttpContext.Current.Response.ApplyAppPathModifier("~/errorPage.aspx?errorMessage=" + exc.Message));
        HttpContext.Current.Response.Redirect(url.AbsoluteUri);
    }

}

override public void ProcessResponseAutenticaction(Viafirma.Estado estado,Viafirma.UsuarioGenericoViafirma usuario){
    Viafirma.Log.Debug("Autenticación Viafirma realizada correctamente.");
    // Aquí ya tenemos todos los datos asociados al cliente. y redireccionar al usuario a la página destino
    // considerando el usuario ya autenticado.
    if(Viafirma.Estado.OK== estado){
        Session["resultadoAutenticacion"]= usuario;
        Uri url=new Uri(HttpContext.Current.Request.Url, HttpContext.Current.Response.ApplyAppPathModifier("~/resultadoAutenticacion.aspx"));
        HttpContext.Current.Response.Redirect(url.AbsoluteUri);
    }else if(Viafirma.Estado.FAIL==estado)
    {
        string error = getCodError();
        string mensage = getMessage();
        System.Console.WriteLine("Hay problemas al realizar la verificacion CodError="+ error + " Mensage="+mensage);
        Uri url = new Uri(HttpContext.Current.Request.Url, HttpContext.Current.Response.ApplyAppPathModifier("~/"));
        HttpContext.Current.Response.Redirect(url.AbsoluteUri);
    }else if(Viafirma.Estado.CANCEL==estado)
    {
        System.Console.WriteLine("El usuario canceló la operación");
        Uri url = new Uri(HttpContext.Current.Request.Url, HttpContext.Current.Response.ApplyAppPathModifier("~/"));
        HttpContext.Current.Response.Redirect(url.AbsoluteUri);
    }else{
        throw new Exception("Se ha producido un error al autenticar.");
    }
}

override public void ProcessResponseSign(Viafirma.Estado estado,Viafirma.FirmaInfoViafirma firma){
    Viafirma.Log.Debug("Firma Viafirma realizada correctamente.");
    // Aquí ya tenemos todos los datos asociados al cliente y a su firma.
    //redireccionamos al usuario a la página destino considerando el usuario ya ha finalizado la firma.
    if(Viafirma.Estado.OK== estado)
    {
        Session["resultadoFirma"]= firma;
        Uri url=new Uri(HttpContext.Current.Request.Url, HttpContext.Current.Response.ApplyAppPathModifier("~/resultadoFirma.aspx"));
        HttpContext.Current.Response.Redirect(url.AbsoluteUri);
    }
    else if (Viafirma.Estado.FAIL == estado)
    {
        string error = getCodError();
        string mensage = getMessage();
        // Hay problemas al validar.
        System.Console.WriteLine("Hay problemas al realizar la firma CodError="+ error + " Mensage="+mensage);
        throw new Exception("Hay problemas al realizar la verificacion CodError="+ error + " Mensage="+mensage);
    }
    else if (Viafirma.Estado.CANCEL == estado)
    {
        System.Console.WriteLine("El usuario canceló la operación");
        Uri url = new Uri(HttpContext.Current.Request.Url, HttpContext.Current.Response.ApplyAppPathModifier("~/"));
        HttpContext.Current.Response.Redirect(url.AbsoluteUri);

    }
    else
    {
        System.Console.WriteLine("Proceso cancelado por el usuario");
        // throw new Exception("Proceso cancelado por el usuario");

    }
}
</script>