0

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

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

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

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

номер один

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 дней, но нет токена пользователя, который действителен навсегда. Приложения не должны отправлять сообщения пользователю, если пользователь не использовал приложение в течение более длительного времени. Это, как говорится, вам не использовать токен для App Уведомления, проверьте документы: 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

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

Смежные вопросы