Elbette yapabilirsin! documentation belirtildiği gibi, Facebook signed_request
size bazı ekstra ayrıntıları gönderecektir:
kullanıcı Facebook Sayfa gider, bunlar Sayfa Sekme sonraki kullanılabilir sekme pozisyonunda ilave göreceksiniz. Genel olarak, bir Sayfa Sekmesi, Tuval Sayfası ile tam olarak aynı şekilde yüklenen . Bir kullanıcı Sayfa Sekmesini seçtiğinde, bir ek parametresi, sayfa ile signed_request parametresini alırsınız. Bu parametresi, parametresine sahip bir JSON nesnesini (geçerli sayfasının sayfa kimliği), yöneticiyi (kullanıcı yönetici ise) beğenir ve beğendi (kullanıcı sayfayı beğenmişse). Bir Tuval Sayfasında olduğu gibi, kullanıcısı uygulamanızı yetkilendirene kadar, uygulamanız için erişilebilen tüm uygulamasına erişemezsiniz.
gibi benim tutorial olması gereken bir şey alınan kod:
<?php
if(empty($_REQUEST["signed_request"])) {
// no signed request where found which means
// 1- this page was not accessed through a Facebook page tab
// 2- a redirection was made, so the request is lost
echo "signed_request was not found!";
} else {
$app_secret = "APP_SECRET";
$data = parse_signed_request($_REQUEST["signed_request"], $app_secret);
if (empty($data["page"]["liked"])) {
echo "You are not a fan!";
} else {
echo "Welcome back fan!";
}
}
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, '-_', '+/'));
}
?>
GÜNCELLEME KODU: önceki kod çalışacak iken. İsteğin geçerliliğini kontrol ederek değildi. Bu, birisinin isteği değiştirip yanlış bilgi gönderebileceği anlamına gelir ('un true
!'a ayarlanması gibi) (). Kod, signed_request
documentation yaklaşımını izleyerek güncellendi.
Teşekkürler! Bunu anladım, ama başka birinin bilmesi gereken durumlarda cevabını yazdığın için minnettarım. – John
Harika cevap ve öğretici. –