Icono del sitio Programando a medianoche

Como obtener el parámetro signed_request de la api de Facebook desde C#

Facebook ofrece un mecanismo para enviar datos a nuestra aplicación llamado signed_request. Este parámetro es una concatenación de un código HMAC SHA-256, un punto (.) y un objecto JSON codificado en base64. Este objeto contiene información acerca del usuario como el id, rango de edad, etc.

Cuando nos encontramos dentro de un tab de Facebook, este mecanismo nos permite obtener cierta información del usuario previamente a pedir los permisos. De esta manera podemos por ejemplo ofrecer distintas pantallas de bienvenida dependiendo de si al usuario le gusta o no la página.

Utilizando el sdk de C#

Para obtener el signed_request utilizando C# hacemos lo siguiente:

  1. Instalamos el paquete Json.net utilizando la extensión NuGet de Visual Studio : PM> Install-Package Newtonsoft.Json
  2. Incluimos el siguiente fragmento de código en nuestra página:
if (Request.Params["signed_request"] != null)
{
    string payload = Request.Params["signed_request"].Split('.')[1];
    var encoding = new UTF8Encoding();
    var decodedJson = payload.Replace("=", string.Empty).Replace('-', '+').Replace('_', '/');
    var base64JsonArray = Convert.FromBase64String(decodedJson.PadRight(decodedJson.Length + (4 - decodedJson.Length % 4) % 4, '='));
    var json = encoding.GetString(base64JsonArray);
    var o = JObject.Parse(json);
    var lPid = Convert.ToString(o.SelectToken("page.id")).Replace("\"", "");
    var lLiked = Convert.ToString(o.SelectToken("page.liked")).Replace("\"", "");
    var lUserId = Convert.ToString(o.SelectToken("user_id")).Replace("\"", "");
}

Al decodificar el objeto, obtenemos en formato string los valores de id de usuario (lUserId), id de la página (lPid) y un booleano (lLiked) indicando si el usuario hizo click sobre el botón de «Me gusta» de la página.

Salir de la versión móvil