2013-02-27 169 views
3

以下php代码不能用于获取访问令牌 在客户端ID和密钥中,我用我的真实客户端ID和密钥替换。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到Instagram是他们自己的服务器。您需要提供FQDN /全球可访问的网址。

而且从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); 

这不是您的重定向URI是本地的。这是因为SSL_VERIFYPEER未设置在卷曲选项中