【问题标题】:How do I call FB.ui in a Facebook Canvas app?如何在 Facebook Canvas 应用程序中调用 FB.ui?
【发布时间】:2013-03-27 12:24:48
【问题描述】:

我想创建一个使用 Facebook 登录的网站,用户可以通过简单的支付方式购买虚拟商品。

据我了解,Facebook 支付系统(弹出窗口等)仅适用于 Canvas 应用程序或移动设备。所以,我已经设置了我的应用命名空间和画布页面 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和FB.ui函数。这个对吗?我的印象是上面的PHP已经有了一些这样的数据,那么我真的需要重新连接Javascript来调用这些函数吗?当我这样做时,我只是将response.id 或其他用户数据设为“未定义”。

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

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

编辑

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

【问题讨论】:

  • 当然你需要初始化JS SDK才能使用它的任何方法。在 PHP 生成的页面中使用 JS 有什么问题?
  • 只是确认一下,这是否意味着我仍然需要使用 JS SDK 检查登录和权限,即使我在画布中,PHP 会提示用户登录和权限?这本身不是问题 - 我认为非功能可能来自“重复”检查。
  • “出于某种原因,在画布中似乎阻止了标准 JS SDK 的工作。” – 不,绝对不会。如果您已经在服务器端脚本中将用户定向到那里,那么您不必再次使用 JS SDK 进行登录流程。 FB.getLoginStatus 帮助您确定您是否拥有有效的用户会话(在需要时)。

标签: javascript facebook canvas sdk payment


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多