如何在Facebook Canvas应用程序中调用FB.ui?

时间:2013-03-27 12:24:48

标签: javascript facebook canvas sdk payment

我想创建一个Facebook登录网站,简单付款允许用户购买虚拟商品。

根据我的理解,Facebook支付系统(弹出窗口等)仅适用于Canvas应用程序或移动设备。所以,我已经设置了我的app命名空间和画布页面url,以便app.facebook.com/###包含我想要的页面。

要检查用户是否已登录并已授予应用程序基本权限,我有:

<?php 

 $app_id = "###";

 $canvas_page = "http://apps.facebook.com/###";

 $auth_url = "https://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . urlencode($canvas_page);

 $signed_request = $_REQUEST["signed_request"];

 list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

 $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

 if (empty($data["user_id"])) {
        echo("<script> top.location.href='" . $auth_url . "'</script>");
 }
 else {
    echo $data["user_id"];
 }

?>

在页面正文中。显然,$ data对象中有一些用户数据可用。

但是,现在我想要一个付款按钮,我需要使用JS SDK来调用FB.ui(...)。更简单地说,只是访问FB.me(...)我需要经历并异步加载JS SDK,执行FB.init(...)并检查登录状态,以便我可以调用FB.me和{{ 1}}功能。它是否正确?我得到的印象是上面的PHP已经有了一些这样的数据,所以我真的需要重新连接Javascript来调用这些函数吗?当我这样做时,我只是将FB.ui或其他用户数据设为'未定义'。

一般来说,我只是想知道 - 如何在画布上运行的Facebook应用程序中使用基本api调用?

付款教程全部在JS中,但应用必须在画布中,并使用PHP重定向。

修改

我应该说清楚;与其他response.id函数一样,FB.me(...)返回undefined。 JS是标准的,从教程代码中复制并粘贴,异步加载sdk,包装FB.FB.init()中的其他函数。出于某种原因,在画布中似乎阻止标准JS SDK工作。

1 个答案:

答案 0 :(得分:1)

仅仅因为您使用PHP SDK并不意味着您不应该使用javascript SDK,因为实际上它们是一起使用构建的,通过客户端和服务器端创建更好的连接。 / p>

我使用javascript SDK来处理用户状态(已记录,是应用程序授权等),用于处理用户与来自facebook的插件及其各自响应的对话框和交互,以及处理由操作触发的事件用户。

在服务器端,我使用PHP SDK查询facebook或检索有关用户的信息,我也总是在服务器端验证用户。