我想创建一个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工作。
答案 0 :(得分:1)
仅仅因为您使用PHP SDK并不意味着您不应该使用javascript SDK,因为实际上它们是一起使用构建的,通过客户端和服务器端创建更好的连接。 / p>
我使用javascript SDK来处理用户状态(已记录,是应用程序授权等),用于处理用户与来自facebook的插件及其各自响应的对话框和交互,以及处理由操作触发的事件用户。
在服务器端,我使用PHP SDK查询facebook或检索有关用户的信息,我也总是在服务器端验证用户。