Facebook PHP SDK — токен доступа, несколько приложений

В данный момент я работаю с Facebook API и у меня небольшая проблема (никогда не работал с API). Я использую последнюю версию PHP SDK 4.0, и люди входят в приложение, которое сохраняет свой токен доступа в базе данных. Пользователи могут добавлять несколько приложений Facebook (идентификаторы / секреты клиентов) в свой профиль, чтобы хранить свои приложения, которые выполняют уведомления, в одном месте.

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу использовать токен доступа, полученный во время входа в систему с приложениями, которые добавляют пользователи. Поэтому моя проблема в том, что мне нужно запросить новый токен доступа без какого-либо взаимодействия с пользователем.

Возможно, есть другой способ, которым я не вижу использования токена доступа, который я получаю в процессе входа в систему с идентификаторами / секретами клиента, которые добавляют пользователи.

Я всегда получаю одну из следующих двух ошибок, когда использую любую пару Client ID / Secret, которую добавил пользователь. (Это означает, что они не совпадают с идентификатором клиента / секретным токеном доступа, который был создан при входе в систему)

Номер один

Unsupported post request. Please read the Graph API documentation at https://developers.facebook.com/docs/graph-api

Номер два

Invalid appsecret_proof provided in the API argument

Вот пример того, что мне нужно сделать.

// Grab an app from the database
$app = App::find($button->app_id);

// Client ID/Secret
$client_id = $app->app_id;
$client_secret = $app->app_secret;

// Grab the access token for the Client ID/Secret from Facebook
$accessToken = explode('=', file_get_contents(
'https://graph.facebook.com/oauth/access_token?client_id=' . $client_id . '&client_secret=' . $client_secret . '&grant_type=client_credentials'
))[1];

// Init the SDK and set the Client ID/Secret
FacebookSession::setDefaultApplication($client_id, $client_secret);

// Find the user
$user = User::find($request->get('user_id'));

// Create a new session
$session = new FacebookSession($user->access_token);

// If the session has been created
if ($session) {
$canvasPage = 'http://google.com/';
$message = 'This is a test message';
$referrer = 'ref-for-google-canvas';

$response = (new FacebookRequest(
$session, 'POST', '/' . $user->id . '/notifications', array(
'access_token' => $accessToken,
'href'         => $canvasPage,
'template'     => $message,
'ref'          => $referrer
)
))->execute();
}

0

Решение

Пользовательские токены действительны только в течение 2 часов. Вы можете продлить их на 60 дней, но нет токена пользователя, который действителен вечно. Приложения не должны иметь возможность отправлять сообщения пользователю, если пользователь не использовал приложение в течение более длительного времени. При этом вы не используете токен пользователя для уведомлений приложений, ознакомьтесь с документами: https://developers.facebook.com/docs/games/notifications

Все, что вам нужно, это токен приложения, и он действителен вечно:

$app_token = $appId . '|' . $appSecret;

Об ошибке appsecret_proof: вы, вероятно, активировали ее в настройках приложения. Либо отключите его, либо добавьте appsecret_proof к каждому вызову API на сервере. Подробнее об этом читайте в документации на Facebook: https://developers.facebook.com/docs/graph-api/securing-requests

Кстати, отправка уведомлений приложения очень проста без PHP SDK, посмотрите эту статью: http://blog.limesoda.com/2014/08/app-notifications-facebook-apps/ — это на немецком языке, но единственная важная часть для вас — код в любом случае.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]