0

我正在尝试将单个变量传递给 Facebook 页面应用程序。对话 url 如下所示:

$data = json_encode('{"pid":"'.$places_id.'"}');

https://www.facebook.com/dialog/pagetab?app_id=APP_ID&app_data=".$data."&next=REDIRECT_URI

该应用程序的安装工作正常,但签名请求参数不包含 app_data 字段。

在 Facebook 页面选项卡上,我使用 PHP 来检索签名的请求数据:

require 'facebook.php';
$app_id = "APP_ID";
$app_secret = "APP_SECRET";
$facebook = new Facebook(array(
    'appId' => $app_id,
    'secret' => $app_secret,
    'cookie' => true
));
$signed_request = $facebook->getSignedRequest();

当我在我的 Facebook 页面选项卡上打印签名的请求数组时,我得到以下信息

Array ( 
[algorithm] => HMAC-SHA256 
[issued_at] => 1372693029 
[page] => Array ( [id] => ID [liked] => [admin] => 1 ) 
[user] => Array ( [country] => de [locale] => en_US [age] => Array ( [min] => 21 ) ) )

有任何想法吗?

4

1 回答 1

0

问题是对话框页面没有使用 app_data 参数。您需要使用地址中的参数和数据重定向回应用程序。因此,您需要将 REDIRECT_URI 更改为具有该自定义 GET 值的特定 Facebook 应用程序 URL。

编辑

Facebook API 中的getLoginUrl()方法有助于简化事情。请注意在返回 URI 中定义 app_data 数组的区域。

$canvas = "http://www.facebook.com/{PAGE_NAME}/app_{APP_ID}";
$url = $facebook->getLoginUrl(array(
    'canvas' => 1,
    'fbconnect' => 0,
    'display' => 'page',
    'req_perms' => '',
    'next' => $canvas."?app_data[]=share",
    'cancel_url' => $canvas
));
于 2013-07-01T16:22:21.510 回答