Je me bats vraiment dans la façon dont je suis censé obtenir mon jeton d'accès pour Instagram,
J'ai enregistré un nouveau client puis j'ai utilisé cette URL
pour renseigner l'ID des clients et rediriger l'URL.
J'ai ensuite été redirigé vers une page où il affichait un code dans l'URL, mais à partir de là, je n'ai pas la moindre idée d'où identifiant puis obtenir mon jeton d'accès.
Le lien vers la documentation officielle de l'API est http://instagram.com/developer/authentication/
Longstory short - deux étapes:
Obtenir le code
Ouvrir https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=code avec les informations de http://instagram.com/developer/clients/manage/
Obtenir un jeton d'accès
curl \-F 'client_id=CLIENT-ID' \
-F 'client_secret=CLIENT-SECRET' \
-F 'grant_type=authorization_code' \
-F 'redirect_uri=YOUR-REDIRECT-URI' \
-F 'code=CODE' \
https://api.instagram.com/oauth/access_token
Presque toutes les réponses que les gens ont envoyées jusqu'à présent ne traitent que de la gestion des jetons d'accès sur le front-end, en suivant la procédure "d'authentification implicite" côté client d'Instagram. Cette méthode est moins sécurisée et non recommandée selon la documentation API d'Instagram.
En supposant que vous utilisez un serveur, les documents Instagram échouent en quelque sorte à fournir une réponse claire sur l'échange de code pour un jeton, car ils ne donnent qu'un exemple de demande cURL. Pour résumer, vous devez envoyer une requête POST à leur serveur avec le code fourni et toutes les informations de votre application. Ils renverront un objet utilisateur comprenant les informations de l'utilisateur et le jeton.
Je ne sais pas dans quelle langue vous écrivez, mais j'ai résolu ceci dans Node.js avec le module de requête npm dans lequel vous pouvez trouver ici .
J'ai analysé l'URL et utilisé cette information pour envoyer la demande de publication
var code = req.url.split('code=')[1];
request.post(
{ form: { client_id: configAuth.instagramAuth.clientID,
client_secret: configAuth.instagramAuth.clientSecret,
grant_type: 'authorization_code',
redirect_uri: configAuth.instagramAuth.callbackURL,
code: code
},
url: 'https://api.instagram.com/oauth/access_token'
},
function (err, response, body) {
if (err) {
console.log("error in Post", err)
}else{
console.log(JSON.parse(body))
}
}
);
Bien sûr, remplacez le contenu de configAuth par vos propres informations. Vous n'utilisez probablement pas Node.js, mais nous espérons que cette solution vous aidera à traduire votre propre solution dans la langue dans laquelle vous l'utilisez.
J'ai eu le même problème avant, mais je change l'URL dans cette
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token
L'API Instagram est destinée non seulement à vous, mais également à tout utilisateur Instagram susceptible de s'authentifier avec votre application. J'ai suivi les instructions sur le site Web Instagram Dev . En utilisant la première méthode (Explicit), j'ai pu le faire assez facilement sur le serveur.
Étape 1) Ajoutez à votre page Web un lien ou un bouton sur lequel un utilisateur pourrait cliquer pour lancer le processus d'authentification:
<a href="https://api.instagram.com/oauth/authorize/?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI&response_type=code">Get Started</a>
YOUR_CLIENT_ID
et YOUR_REDIRECT_URI
vous seront attribués une fois que vous aurez enregistré votre application dans le système Instagram, avec YOUR_CLIENT_SECRET
utilisé ci-dessous.
Étape 2) Sur l'URI défini pour votre application, identique à YOUR_REDIRECT_URI
, vous devez accepter la réponse du serveur Instagram. Le serveur Instagram vous communiquera une variable code
dans la demande. Ensuite, vous devez utiliser cette code
et d’autres informations sur votre application pour faire une autre demande directement à partir de votre serveur afin d’obtenir le access_token
. Je l'ai fait en python en utilisant le framework Django, comme suit:
dirigez Django vers la fonction response
dans urls.py
:
from Django.conf.urls import url
from . import views
app_name = 'main'
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^response/', views.response, name='response'),
]
Voici la fonction response
, traitant la demande, views.py
:
from Django.shortcuts import render
import urllib
import urllib2
import json
def response(request):
if 'code' in request.GET:
url = 'https://api.instagram.com/oauth/access_token'
values = {
'client_id':'YOUR_CLIENT_ID',
'client_secret':'YOUR_CLIENT_SECRET',
'redirect_uri':'YOUR_REDIRECT_URI',
'code':request.GET.get('code'),
'grant_type':'authorization_code'
}
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
response_string = response.read()
insta_data = json.loads(response_string)
if 'access_token' in insta_data and 'user' in insta_data:
#authentication success
return render(request, 'main/response.html')
else:
#authentication failure after step 2
return render(request, 'main/auth_error.html')
Elif 'error' in req.GET:
#authentication failure after step 1
return render(request, 'main/auth_error.html')
Ce n'est qu'un moyen, mais le processus devrait être presque identique dans PHP ou dans tout autre langage côté serveur.
Désactivez l'oauth implicite sous l'autorisation de sécurité et ALORS chargez ceci:
https://api.instagram.com/oauth/authorize/?client_id=CLIENT-ID&redirect_uri=REDIRECT-URI&response_type=token
Spécifiez REDIRECT-URI dans votre compte et tapez-le exactement comme spécifié.
Le jeton d'accès est renvoyé sous forme de fragment d'URI après avoir autorisé l'application à utiliser vos données Instagram. Cela devrait ressembler à ceci:
Essaye ça:
http://dmolsen.com/2013/04/05/generating-access-tokens-for-instagram/
après avoir obtenu le code, vous pouvez faire quelque chose comme:
curl -F 'client_id=[your_client_id]' -F 'client_secret=[your_secret_key]' -F 'grant_type=authorization_code' -F 'redirect_uri=[redirect_url]' -F 'code=[code]' https://api.instagram.com/oauth/access_token
Cela a bien fonctionné pour moi:
http://jelled.com/instagram/access-token
Pour votre information, je l’ai utilisé en combinaison avec le plugin jQuery Instagram que vous trouverez ici; http://potomak.github.com/jquery-instagram
100% travaille ce code
<a id="button" class="instagram-token-button" href="https://api.instagram.com/oauth/authorize/?client_id=CLIENT_ID&redirect_uri=REDIRECT_URL&response_type=code">Click here to get your Instagram Access Token and User ID</a>
<?PHP
if (isset($_GET['code'])) {
$code = $_GET['code'];
$client_id='< YOUR CLIENT ID >';
$redirect_uri='< YOUR REDIRECT URL >';
$client_secret='< YOUR CLIENT SECRET >';
$url='https://api.instagram.com/oauth/access_token';
$request_fields = array(
'client_id' => $client_id,
'client_secret' => $client_secret,
'grant_type' => 'authorization_code',
'redirect_uri' => $redirect_uri,
'code' => $code
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
$request_fields = http_build_query($request_fields);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request_fields);
$results = curl_exec($ch);
$results = json_decode($results,true);
$access_token = $results['access_token'];
echo $access_token;
exit();
}
?>
En utilisant https://www.hurl.it/ i a pu voir ceci: { "Code": 400, "Error_type": "OAuthException", "error_message": "Le code correspondant n'a pas été trouvé ou a déjà été utilisé." }
alors: vous devez obtenir un nouveau code pour chaque requête.