1

我正在编写一个 Play 2.0.1 应用程序,它将部署在 Facebook 的画布页面中。我将 restFB 用于 Facebook API。

通过在https://developers.facebook.com/tools/explorer?method=GET手动创建访问令牌,我可以让我的应用程序访问 Facebook 用户名并将其呈现在 Facebook 上的 Canvas 页面 iFrame 中。

因此,我的应用程序控制器接收 POST 并呈现如下页面:

public static Result handle_fb_post() {         
    return redirect(routes.canvas.fb_render_profile_page());
}

public static Result fb_render_profile_page() {
     String accessToken = "<access token copied from facebook graph explorer>";     
     DefaultFacebookClient().getExtendedAccessToken(application_id, application_secret);
     FacebookClient facebookClient = new DefaultFacebookClient(accessToken);
     User fbUser = facebookClient.fetchObject("me", com.restfb.types.User.class);
     return ok(views.html.fbuser.render(fbUser));
}

我的路线设置为:

POST    /fbcanvas/  controllers.FBCanvas.handle_fb_post()
GET     /fbcanvas/profile controllers.FBCanvas.fb_render_profile_page()

但是,我如何才能访问 Facebook 在 POST 中发送给我的签名 JSON?我相信这也包含来自用户的访问令牌(假设他们已授权我的应用程序),如下所述:

https://developers.facebook.com/docs/samples/canvas/ (参见“signed_request 参数”部分)。

Java、PHP、Javascript 和 Python 有许多示例,但我找不到任何描述如何在 Play 2 中或使用 RestFB 执行此操作的示例。我尝试了许多不同的方法,但无法弄清楚如何在 Play 2 中访问已签名的请求。

谁能帮助并解释如何做到这一点?

4

1 回答 1

0

如果令牌在 POST 请求中作为 Json 发送,则可以通过

def handle_post() = Action { implicit request =>
  val jsonBody = request.body.asJson
  //process it
}
于 2012-11-13T21:44:27.343 回答