Too old but I hope will be helpful to some people.
Creating a subscription is 4 step process:-
Step One: Direct your user to our authorization URL:-
GET request :- https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code
Step Two: Receive the redirect from Instagram
As a response of step 1, Instagram will provide you a http://your-redirect-uri?code=CODE on success, which you will use in step three.
Note: CODE is not access token, you will use CODE to get access token.
Step Three: Request the access_token:-
POST CURL Request :-
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
on success DEMO Data
{
"access_token": "fb2e77d.47a0479900504cb3ab4a1f626d174d2d",
"user": {
"id": "1574083",
"username": "snoopdogg",
"full_name": "Snoop Dogg",
"profile_picture": "..."
}
}
Step Four: Creating a Subscription
Step Four has some sub steps.
i) POST curl request to Instagram API
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) On success Instagram will provide
`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:-
on callback page eg: callback.php
<?php echo $_GET['hub_challenge']; //yes undescore in palce of dot. ?>
iii) If the Instagram API will get $_GET['hub_challenge']
that is 15f7d1a91c1f40f8a748fd134752feb3
here it will reply for our post request to create a subscription with
something like
{
"meta": {
"code": 200
},
"data": [
{
"id": "1",
"type": "subscribe",
"object": "user",
"aspect": "media",
"callback_url": "https://your-callback.com/url/"
}
]
}
iii) If success you can list out the subscription with a GET request may be directly from your browser.
GET Request:- https://api.instagram.com/v1/subscriptions?client_secret=CLIENT-SECRET&client_id=CLIENT-ID
now when ever the authenticated users will post the callback page will get a GET request from Instagram api with some JSON data containing instagram user_id that you will get as object_id and media_id that is the post id.
You can catch that and use that with the below code, yes you can use better code than me , that is 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);
}