php – 如何在查询字符串中将一些值传递给我的Facebook画布应用程序?
作者:互联网
我开发了一个Facebook画布应用程序,发布给用户新闻源,我希望能够允许用户点击新闻源中的链接,并将其带到我的应用程序以及将在应用程序中显示的一些数据(例如,在查询字符串中传递它.
当我创建将在用户的新闻源上发布的链接时,我将链接字段设置为 –
http://apps.facebook.com/myappname/?datatopass=mydata
这样,当用户单击此链接时,浏览器会将其定向到该链接.但是我无法访问$_GET [‘datatopass’]变量(使用PHP),它似乎是空白的.我已经尝试使用javascript输出window.location变量,我没有看到我传递的查询字符串,即使我在浏览器地址栏中看到它在上面的url.我看到的是我在facebook开发者应用程序中设置的网站网址以及facebook使用的状态和代码参数.它剥离了我的datatopass param,我希望能够在我的应用程序启动时阅读.
那么……我怎样才能传递我想要发送的数据?我知道如果您使用的是signed_request,则会有一个app_data字段,但据我所知,这仅适用于位于页面标签页中的应用.我正在使用iFrame canvas app方法.
当我查看我的apache服务器的访问日志时,我可以看到我的网站URL地址有一个POST条目,附带了我的附加查询字符串 –
my.domain.com 123.456.7.890 - - [23/Feb/2012:14:21:19 +0000] "POST /facebookapp/?datatopass=mydata HTTP/1.1" 200 300 "http://apps.facebook.com/myappname/?datatopass=mydata" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0"
接下来是GET条目 –
my.domain.com 123.456.7.890 - - [23/Feb/2012:14:21:20 +0000] "GET /facebookapp/directory/?state=99226fiawhoidhaoia09809a085d94832&code=ahfakshdlkfhalksj.... HTTP/1.1" 200 27094 "http://my.domain.com/facebookapp/?play=asd" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0"
我道歉,我真的不明白上面做了什么,但希望在帮助解决这个问题时提供额外的信息.
解决方法:
Facebook允许您通过app_data变量传递数据.此变量是已签名请求的一部分,是一个json编码的字符串.所以一个例子可能是这样的:
top.location.href = "http://www.facebook.com/pages/PAGENAME/PAGE_ID?sk=APP_ID&app_data=MYDATA";
此app_data变量成为Facebook签名请求的一部分.更多信息可以在这里找到:http://developers.facebook.com/docs/authentication/signed_request/
您只需解析已签名的请求,然后您可以通过app_data访问数据,如文档所示:
function parse_signed_request($signed_request, $secret) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);
if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
error_log('Unknown algorithm. Expected HMAC-SHA256');
return null;
}
// check sig
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
error_log('Bad Signed JSON signature!');
return null;
}
return $data;
}
function base64_url_decode($input) {
return base64_decode(strtr($input, '-_', '+/'));
}
那么你可以调用该函数并像这样访问app_data:
<?php
$signed_request = parse_signed_request($signed_request, $secret);
$signed_request['app_data'] = MYDATA;
?>
标签:php,facebook,get,query-string 来源: https://codeday.me/bug/20190726/1539859.html