Проблема с регистрацией достижения в Facebook

Редактирование решения: оказалось, что вы не можете использовать PHP SDK для возврата правильного токена приложения, а также вы не можете выбрать параметры OpenGraph в разделе приложений на сайте разработчика, нажать «Получить код» и получить токен доступа к приложению оттуда.. вы должны сделать это:

$token_url = 'https://graph.facebook.com/oauth/access_token?client_id=' . $fbConfig['appId'] . '&client_secret=' . $fbConfig['appSecret'] . '&grant_type=client_credentials';
$accessToken = explode('=',file_get_contents($token_url));
$accessToken = $accessToken[1];

Исходная проблема: с помощью PHP SDK я безуспешно пытался зарегистрировать свои достижения. Я продолжаю получать следующую ошибку: «Этот метод должен вызываться с помощью приложения access_token».

Однако, когда я ввожу токен, который использую, в opengraph (https://graph.facebook.com/app?access_token=ACCESS_TOKEN), я правильно получаю информацию о своем приложении.

Вот методы, которые я пробовал до сих пор для регистрации своих достижений:

$param = array(
    'access_token' => $accessToken,
    'achievement' => 'http://domain.com/path/to/my/achievement/page',
    'display_order' => $achievements['achievementWeight']
);
$achievement = $fb->api('/'.$this->CI->config->item('app_id').'/achievements', 'POST', $param);

$superCurl = "curl -F 'achievement=" . $achieveUrl . "&access_token=" . $accessToken . "' https://graph.facebook.com/" . $appId . "/achievements";
exec($superCurl,$result);


$url = 'https://graph.facebook.com/' . $this->CI->config->item('app_id') . '/achievements?access_token=' . $accessToken;
$c = curl_init ($url);
curl_setopt($c, CURLOPT_HEADER, false);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $param);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
if(curl_errno($c)){
    $this->CI->firephp->log(curl_error($c));
}
$page = curl_exec ($c);
curl_close ($c);

Все всегда возвращается, говоря, что ему нужен access_token.


person Enzo    schedule 04.04.2012    source источник


Ответы (1)


См. документ Аутентификация в качестве приложения. Вы должны использовать токен доступа приложения, который позволяет действовать от имени приложения - в этом случае (и некоторых других) недостаточно токена доступа пользователя.

person Igy    schedule 04.04.2012
comment
Я знаю. Я проверил, что access_token, который я использую, является токеном доступа приложения в соответствии со ссылкой API графа, о которой я упоминал выше. Он возвращает информацию о приложении, ничего о пользователе. - person Enzo; 05.04.2012
comment
Извините, возможно, я неправильно понял. Вы должны иметь возможность использовать токен доступа к приложению, полученный с помощью метода по ссылке, которой я поделился, — это должно позволить вам читать типы достижений, создавать типы достижений и публиковать новые достижения для пользователя, который предоставил вам Предупреждение о разрешении publish_actions: если в настройках вашего приложения указано, что это нативное/настольное приложение, секрету приложения не будет доверять, и вы не сможете его использовать. - person Igy; 05.04.2012
comment
К сожалению, это не работает, я просто постоянно получаю сообщение об ошибке... вздох. Мне каким-то образом удалось получить 2 достижения, которые я могу вытащить и предоставить пользователям, но я не могу ни добавить новые, ни отредактировать 2, которые я получил, ни удалить их. Это становится довольно разочаровывающим. - person Enzo; 05.04.2012
comment
Там может быть открытый отчет об ошибке, если вы можете достоверно (или ненадежно) воспроизвести тот факт, что вы все делаете правильно, и это все еще не работает. - person Igy; 05.04.2012
comment
Наконец-то исправлено это.. вы не можете использовать PHP SDK или другие вещи, которые вам говорят использовать в документации.. Я обновил свой основной пост, указав, как вы должны получить правильный токен доступа, который ОТЛИЧАЕТСЯ от тот, о котором говорит их материал OpenGraph. - person Enzo; 05.04.2012