#php #laravel #instagram
#php #laravel #Instagram
Вопрос:
я просто хочу получать сообщения пользователей в моем приложении laravel. это даже хорошо, если мой пользователь должен ввести свой пароль от имени пользователя, потому что я хочу один раз просмотреть все сообщения и текст, а затем они могут сменить пароль. что касается того, что я пробовал до сих пор: 1-я создал приложение по этой ссылке :
https://developers.facebook.com/apps/
затем я генерирую User Token
и App Token
после этого я вызвал этот api :
https://graph.instagram.com/17841405793187218?fields=id,usernameamp;access_token=myAppToken
я поместил свой токен приложения в этот api, но это показало мне эту ошибку :
{
"error": {
"message": "Access token does not contain a valid app ID",
"type": "OAuthException",
"code": 190,
"fbtrace_id": "Agc0R_wnDwoCzgNuXt2gt1y"
}
}
теперь я не знаю, даже если я на правильном пути или нет, но просто я хочу сканировать все сообщения пользователей. заранее спасибо
Комментарии:
1. «Токен доступа не содержит действительного идентификатора приложения» кажется довольно понятным. Похоже, вы что-то неправильно настроили на стороне сервера.
2. вы можете попробовать Laravel Socialite (композитору требуется laravel / socialite)
3. Вы следовали инструкциям по developers.facebook.com/docs/instagram-basic-display-api/guides /… чтобы получить an
access_token
для вашего пользователя?
Ответ №1:
Вам следует использовать Laravel Socialite, поскольку это упростит весь процесс.
Следуйте инструкциям по установке здесь https://laravel.com/docs/8.x/socialite Не забудьте указать учетные данные fb в своем config/service.php
like so:
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect' => env('FACEBOOK_REDIRECT_URL'),
],
Теперь, когда мы настроили Socialite для работы с Facebook, мы должны перенаправить пользователя на страницу входа в Facebook, где он введет свои учетные данные.
Определите маршрут входа:
Route::get('facebook', 'FacebookLoginController@redirectToProvider');
Определите контроллер и метод:
class FacebookLoginController extends Controller
{
/**
* Redirect the user to the FB authentication page.
*
* @return SymfonyComponentHttpFoundationRedirectResponse
*/
public function redirectToProvider(RedirectToProviderRequest $request)
{
return Socialite::driver('facebook')->scopes(['instagram_basic'])->asPopup()->usingGraphVersion('v7.0')->redirect();
}
}
После того, как пользователь ввел свои учетные данные и разрешил вашему приложению доступ к его данным, нам нужно получить токен доступа, чтобы совершать вызовы api fb от его имени.
Определите маршрут обратного вызова в том же контроллере:
Route::get('facebook/callback','FacebookLoginController@handleProviderCallback');
Определите метод обратного вызова в контроллере:
public function handleProviderCallback(Request $request)
{
if ($request->input('error') == "access_denied")
{
return 'user has decline the authorization';
}
$user = Socialite::driver('facebook')->usingGraphVersion('v7.0')->user();
$token = $user->token;
$refreshToken = $user->refreshToken;
$id = $user->getId();
}
Отсюда у вас есть токен доступа ( $token
) для вызова api fb.
Пожалуйста, обратите внимание, что пользователь может отменить авторизацию, поэтому, вероятно, захочет перехватить ошибку при обратном вызове. Я не включил все функции обработки ошибок, поскольку это может усложнить код
Комментарии:
1. я скоро проверю это и сообщу вам ответ, только одно: пользователь Instagram проходит, а координаты facebook совпадают, потому что я хочу получать сообщения пользователей в Instagram, а вы в ответ указали учетную запись facebook, которая меня немного смутила, и спасибо за ответ
2. Да, вы правы. Facebook объединил api instagram в graph. Вы должны пройти через facebook, чтобы получить сообщение в Instagram. developers.facebook.com/docs/instagram-api
Ответ №2:
Глядя на документацию, я думаю, что секрет приложения следует использовать для генерации токена доступа, пожалуйста, ознакомьтесь с этим шагом: Шаг 5: Обмен кода на токен в документации: https://developers.facebook.com/docs/instagram-basic-display-api/getting-started