我想创建一个使用 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
andFB.ui
函数。这个对吗?我的印象是上面的PHP已经有了一些这样的数据,那么我真的需要重新连接Javascript来调用这些函数吗?当我这样做时,我只是将response.id
或其他用户数据设为“未定义”。
一般来说,我只想知道 - 如何在画布上运行的 Facebook 应用程序中使用基本的 api 调用?
付款教程全部在 JS 中,但应用程序必须在画布中,使用 PHP 重定向。
编辑
我应该说清楚的;FB.me(...)
与其他FB.
函数一样返回未定义。JS 是标准的,从教程代码中复制粘贴,异步加载 sdk,包装FB.init()
和其他功能在window.fbAsyncInit
. 出于某种原因,在画布中似乎会阻止标准 JS SDK 工作。