2013-02-27 2 views
3

Следующий php-код не работает для меня, чтобы получить токен доступа В идентификаторе клиента и секретном ключе я заменил свой настоящий идентификатор клиента и ключ.Instagram Получить токен доступа из кода в 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 .. Я не могу понять, почему это не работает.

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

ответ

0

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

Кроме того, из http://php.net/manual/en/function.curl-setopt.php код

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

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

curl_setopt($ch, CURLOPT_POST, 1); 
0

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

$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' 
     ) 

) 
2

Поскольку это протокол HTTPS уже так что вам нужно поставить это на свой код

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

Это не о переадресацией Ури в местных или нет. Это связано с тем, что SSL_VERIFYPEER не установлен в вашей функции завивки

Смежные вопросы