Instagram Получить токен доступа из кода в PHP

Следующий php-код не работает для меня, чтобы получить токен доступа. В идентификаторе клиента и секретном ключе я заменил свой реальный идентификатор и ключ клиента.

<?php
$client_id = 'MY CLIENT ID';
$client_secret = 'MY CLIENT SECRET';
$redirect_uri = 'http://localhost/instagram/demo.php';
$scope = 'basic+likes+comments+relationships';

$url = "https://api.instagram.com/oauth/authorize?client_id=$client_id&redirect_uri=$redirect_uri&scope=$scope&response_type=code";

if(!isset($_GET['code']))
{
    echo '<a href="'.$url.'">Login With Instagram</a>';
}
else
{
    $code = $_GET['code'];

$apiData = array(
  'client_id'       => $client_id,
  'client_secret'   => $client_secret,
  'grant_type'      => 'authorization_code',
  'redirect_uri'    => $redirect_uri,
  'code'            => $code
);

$apiHost = 'https://api.instagram.com/oauth/access_token';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiHost);
curl_setopt($ch, CURLOPT_POST, count($apiData));
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($apiData));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$jsonData = curl_exec($ch);
curl_close($ch);

var_dump($jsonData);
$user = @json_decode($jsonData); 

echo '<pre>';
print_r($user);
exit;
}
?>

Код выше всегда возвращает false. Я не могу понять, почему это не работает.

Кто-нибудь отлаживает этот код и сообщает мне, в чем проблема в моем коде?


person Kliptu    schedule 27.02.2013    source источник


Ответы (3)


Поскольку это уже https, вам нужно поместить это в свой код.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, false);

Дело не в том, что ваш URI перенаправления является локальным или нет. Это потому, что SSL_VERIFYPEER не установлен в вашем параметре curl

person Blackbone23    schedule 04.03.2017

Ну, есть несколько проблем с вашим кодом. Во-первых, кажется, что ваш redirect_uri — это локальный хост. Очевидно, что локальный хост для Instagram — это их собственные серверы. Вам необходимо указать полное доменное имя/доступный для всего мира URL-адрес.

Также из http://php.net/manual/en/function.curl-setopt.php код

curl_setopt($ch, CURLOPT_POST, count($apiData));

Должно быть просто

curl_setopt($ch, CURLOPT_POST, 1);
person Mark D    schedule 29.03.2013

Ваш код правильный, но вам нужно изменить

$redirect_uri = 'your site addres (not localhost)';

Пример:

$client_id        = 'YOUR_CLIENT_ID';
$client_secret    = 'YOUR CLIENT SECRET';
$redirect_uri     = 'http://www.YOUR_SERVER.com/instagram/demo.php';
$scope            = 'basic+likes+comments+relationships';

Если вы выполните этот сценарий с этим изменением, вы можете получить этот результат.

stdClass Object
(
    [access_token] => 'your_ID'.xxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    [user] => stdClass Object
        (
            [username] => 'your username'
            [bio] => 
            [website] => 
            [profile_picture] => 'your url picture profile' 
            [full_name] => 
            [id] => 'your_ID'
        )

)
person Javier    schedule 11.03.2016