我正在尝试使用 Facebook API 为用户保存分数。我只是从他们的示例中复制并粘贴代码,但我仍然收到以下错误:
{"error":{"message":"不支持的发布请求。","type":"GraphMethodException","code":100}}
这是代码
<?php
$app_id = 'YOUR_APP_ID';
$app_secret = 'YOUR_APP_SECRET';
$canvas_page_url = 'YOUR_CANVAS_PAGE_URL';
// The Achievement URL
$achievement = 'YOUR_ACHIEVEMENT_URL';
$achievement_display_order = 1;
// The Score
$score = 'USER_SCORE';
// Authenticate the user
session_start();
if(isset($_REQUEST["code"])) {
$code = $_REQUEST["code"];
}
if(empty($code) && !isset($_REQUEST['error'])) {
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
$dialog_url = 'https://www.facebook.com/dialog/oauth?'
. 'client_id=' . $app_id
. '&redirect_uri=' . urlencode($canvas_page_url)
. '&state=' . $_SESSION['state']
. '&scope=publish_actions';
print('<script> top.location.href=\'' . $dialog_url . '\'</script>');
exit;
} else if(isset($_REQUEST['error'])) {
// The user did not authorize the app
print($_REQUEST['error_description']);
exit;
};
// Get the User ID
$signed_request = parse_signed_request($_POST['signed_request'],
$app_secret);
$uid = $signed_request['user_id'];
// Get an App Access Token
$token_url = 'https://graph.facebook.com/oauth/access_token?'
. 'client_id=' . $app_id
. '&client_secret=' . $app_secret
. '&grant_type=client_credentials';
$token_response = file_get_contents($token_url);
$params = null;
parse_str($token_response, $params);
$app_access_token = $params['access_token'];
// POST a user score
print('Publish a User Score<br/>');
$score_URL = 'https://graph.facebook.com/' . $uid . '/scores';
$score_result = https_post($score_URL,
'score=' . $score
. '&access_token=' . $app_access_token
);
print('<br/><br/>');
function https_post($uri, $postdata) {
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
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, '-_', '+/'));
}
?>