我正在编写一个Play 2.0.1应用程序,该应用程序将部署在Facebook的画布页面中。我正在使用restFB作为Facebook API。
通过在https://developers.facebook.com/tools/explorer?method=GET手动创建访问令牌,我可以让我的应用程序访问Facebook用户的名称,并在Facebook的Canvas页面iFrame中呈现它。
因此,我的app控制器收到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中访问已签名的请求。
任何人都可以帮忙解释如何做到这一点吗?
答案 0 :(得分:0)
如果令牌在POST请求中作为Json发送,您可以通过
获取它def handle_post() = Action { implicit request =>
val jsonBody = request.body.asJson
//process it
}