当用户点击“赞”按钮时,我想更改页面内容(它会直接用新内容重新加载页面)。
我可以这样做,但只有先点击登录按钮才能获得我帐户的基本信息。我不想要这一步。
我想要的例子是https://www.facebook.com/Dior(标签Dior VIII)。
答案 0 :(得分:0)
有一个名为getSignedRequest()
的方法。调用此方法。如果当前用户已经是Facebook页面的粉丝,则此方法返回:
$faceboook->getSignedRequest()
答案 1 :(得分:0)
您需要使用其中一个SDK实现例程。 Facebook将所谓的已签名请求传递给所有画布应用程序,并在iframe中运行。除其他外,它包括当前用户喜欢该页面的信息。您需要检索信息并检查类似状态。
对于PHP,这将是这样的:
<?php
require(facebook.php); // include Facebook PHP SDK
$app_id = "your_app_id";
$app_secret = "your_app_secret";
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $app_secret,
'cookie' => true
));
$signed_request = $facebook->getSignedRequest();
if($signed_request = $this->parsePageSignedRequest()) {
if($signed_request->page->liked) {
// output fan content
} else {
// output non-fan content
}
}
function parsePageSignedRequest() {
if (isset($_REQUEST['signed_request'])) {
$encoded_sig = null;
$payload = null;
list($encoded_sig, $payload) = explode('.', $_REQUEST['signed_request'], 2);
$sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
$data = json_decode(base64_decode(strtr($payload, '-_', '+/'), true));
return $data;
}
return false;
}
?>
答案 2 :(得分:0)
使用FB.Event.Subscribe and edge.create可以更轻松地执行此操作。 JavaScript代码位于http://fivespot.me/like-reveal-simple.txt
。
将此添加到您的目标网页,在用户喜欢yoursite.com/afterlike.html
之后更改应用程序ID和您要重定向的链接。
这是最简单有效的方法。
答案 3 :(得分:0)
页面获得已签名的请求。对此进行解码以确定用户是否喜欢该页面。在PHP中:
<?php
$signedRequestObject = parse_signed_request( $_POST["signed_request"],YOUR_APPLICATION_SECRET );
if ($signedRequestObject["page"]){
// This means this signed_request was generated on a page.
if ($signedRequestObject["page"]["liked"]){
// the page was liked
}
}
//Used functions
function parse_signed_request($signed_request, $secret) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$sig = $this->base64_url_decode($encoded_sig);
$data = json_decode($this->base64_url_decode($payload), true);
if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
echo 'Unknown algorithm. Expected HMAC-SHA256 : ';
return false;
}
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
echo = 'Bad Signed JSON signature!';
return false;
}
return $data;
}
function base64_url_decode($input) {
return base64_decode(strtr($input, '-_', '+/'));
}
?>