我正在编写一个 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 中访问已签名的请求。
谁能帮助并解释如何做到这一点?