Я использую Instagram Subscription API для подписки на обновления в реальном времени Instagram. Я успешно подписался на несколько подписчиков на Instagram. Но теперь я получаю следующую ошибку при попытке подписаться:
meta": { "error_type": "OAuthAccessTokenException", "code": 400, "error_message": "The access_token provided is invalid." }
Раньше он никогда не запрашивал токен доступа для API подписки. Может кто-нибудь объяснить Instagram API.
Слишком старый, но я надеюсь, что это будет полезно для некоторых людей.
Создание подписки – это четырехэтапный процесс: –
Шаг первый: направьте пользователя на наш URL авторизации:
Запрос GET: – https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code
Шаг второй: получите перенаправление с Instagram
В ответ на шаг 1 Instagram предоставит вам http: // your-redirect-uri? Code = CODE для успеха, который вы будете использовать в третьем шаге. Примечание: CODE не является токеном доступа, вы будете использовать CODE для доступа к токену доступа.
Шаг третий: запросите access_token: –
POST CURL Запрос: –
curl -F 'client_id=CLIENT_ID' \ -F 'client_secret=CLIENT_SECRET' \ -F 'grant_type=authorization_code' \ -F 'redirect_uri=AUTHORIZATION_REDIRECT_URI' \ -F 'code=CODE' \ https://api.instagram.com/oauth/access_token
по успеху Данные DEMO
{ "access_token": "fb2e77d.47a0479900504cb3ab4a1f626d174d2d", "user": { "id": "1574083", "username": "snoopdogg", "full_name": "Snoop Dogg", "profile_picture": "..." } }
Шаг четвертый: создание подписки
Шаг четвертый имеет некоторые подэтапы. i) Запрос curl POST для API Instagram
curl -F 'client_id=CLIENT-ID' \ -F 'client_secret=CLIENT-SECRET' \ -F 'object=user' \ -F 'aspect=media' \ -F 'verify_token=myVerifyToken' \ -F 'callback_url=http://YOUR-CALLBACK/URL' \ https://api.instagram.com/v1/subscriptions/ Note: myVerifyToken should be a access token of any one user, subscription is not created separately for every user, one subscription will be working for all the authenticated user of this app. so you may manually provide one. You do not create subscription again and again, so do not make calls to create subscription, when ever you think you need one subscription then only create one or usually you will continue with one or delete and recreate one.
ii) В случае успеха Instagram предоставит
`https://your-callback.com/url/?hub.mode=subscribe&hub.challenge=15f7d1a91c1f40f8a748fd134752feb3&hub.verify_token=myVerifyToken` of which the callback page ( `http://YOUR-CALLBACK/URL` ) should only display `hub.challenge` that is:-
на странице обратного вызова, например: callback.php
<?php echo $_GET['hub_challenge']; //yes undescore in palce of dot. ?>
iii) Если API Instagram получит $_GET['hub_challenge']
то есть 15f7d1a91c1f40f8a748fd134752feb3
здесь он ответит на наш почтовый запрос, чтобы создать подписку с
что-то вроде
{ "meta": { "code": 200 }, "data": [ { "id": "1", "type": "subscribe", "object": "user", "aspect": "media", "callback_url": "https://your-callback.com/url/" } ] }
iii) Если успех, который вы можете указать в подписке с запросом GET, может быть непосредственно из вашего браузера. Запрос GET: – https://api.instagram.com/v1/subscriptions?client_secret=CLIENT-SECRET&client_id=CLIENT-ID
теперь, когда пользователи, прошедшие проверку подлинности, опубликуют страницу обратного вызова, получат запрос GET из Instagram api с некоторыми данными JSON, содержащими instagram user_id, которые вы получите как object_id и media_id, который является идентификатором сообщения. Вы можете поймать это и использовать его с приведенным ниже кодом, да, вы можете использовать лучший код, чем я, то есть GREAT.
$content = file_get_contents('php://input'); try { if ($content === false) { // Handle the error //echo 'Whoops! Something went wrong!'; file_put_contents('subscriptions.log', 'getting empty content', FILE_APPEND); } else { $content_object = json_decode($content)[0]; $error = json_last_error(); file_put_contents('subscriptions.log', $error, FILE_APPEND); $ig_id = $content_object->object_id; $media_id = $content_object->data->media_id; } } catch (Exception $e) { // Handle exception //echo 'Whoops! Wrongly encoded data receiving!'; file_put_contents('subscriptions.log', $e->getMessage(), FILE_APPEND); }