【问题标题】:Store the right signed request after page like在页面之后存储正确的签名请求
【发布时间】:2013-12-22 11:00:45
【问题描述】:

我有一个小的 Facebook 应用程序,它的开头有一个“点赞门”。用户必须喜欢该页面才能使用该应用程序。应用程序本身有一些子页面,所以如果我想让子页面工作,我必须将签名的请求存储到 $_SESSION 变量中。我的问题是签名请求仅在应用加载时发送,此时用户尚未喜欢该页面。所以如果这次保存了签名的请求,$signed_request["page"]["liked"] 将总是返回 FALSE... 如何重新加载签名的请求?

FQL 和 $like_data = $facebook->api('/me/likes/PAGE-ID/');不好,因为我想要页面之后的权限对话框。

这是现在的代码:

    $page_id = $signed_request["page"]["id"];
$like_status = $signed_request["page"]["liked"];

    if(!$like_status){
        header("Location: notfan.php");
        exit;
    }else{
        if (!isset($_SESSION["SR"]))
            {
                $_SESSION["SR"] = $_REQUEST["signed_request"];
            }else{
                $encoded_sig = null;
                $payload = null;
                list($encoded_sig, $payload) = explode('.', $_SESSION["SR"], 2);
                $sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
                $signed_request = $data = json_decode(base64_decode(strtr($payload, '-_', '+/'), true));
                $signed_request = objectToArray($signed_request);
            }
    }

非常感谢!

【问题讨论】:

    标签: php facebook facebook-graph-api facebook-php-sdk


    【解决方案1】:

    每次在请求中遇到签名请求就保存:当用户点赞页面时,Facebook会做一个页面重新加载并重新发送签名请求

    编辑: 您正在设置 $like_status 并在您知道是否有签名请求之前以及在设置 $like_status 的值之前对其进行检查。

    我会先检查请求参数,然后是会话,然后填充 $like_status 变量,然后检查 $like_status。

    类似这样的:

    if( isset($_POST['signed_request']) )
    {
            $_SESSION["SR"] = $_REQUEST["signed_request"];
    }
    if (!isset($_SESSION["SR"]))
        {
            //shouldn't even happen now when page is opened through facebook, 
            //so you might want some error handling here
        }
    $encoded_sig = null;
    $payload = null;
    list($encoded_sig, $payload) = explode('.', $_SESSION["SR"], 2);
    $sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
    $signed_request = $data = json_decode(base64_decode(strtr($payload, '-_', '+/'), true));
    $signed_request = objectToArray($signed_request);
    $page_id = $signed_request["page"]["id"];
    $like_status = $signed_request["page"]["liked"];
    
    if(!$like_status){
        header("Location: notfan.php");
        exit;
    }
    

    【讨论】:

    • 你能帮我解决一下我的代码吗?我试过但没有为我工作,签名的请求是空的......
    • 稍微修改了我的答案。 PHP不是我的专长,但应该是这样的。
    猜你喜欢
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    相关资源
    最近更新 更多