2012-09-27 109 views
2

因此,我一直试图弄清楚这一点(字面意思)。但是Im难住了。我想要做的就是保存访问令牌以备将来使用,并允许用户不必每次都“允许”应用程序。当我使用存储和检索的“done.php”中的访问令牌时,“GET”操作有效,但“POST”不起作用。PHP-为Tumblr API保存访问令牌

addblogs.php(该脚本,跑到报名之后,他们碰壁......现在它不是咸的访问令牌和商店,但它会)

include('functions.php'); 
require_once('tumblroauth/tumblroauth.php'); 
require_once('config.php'); 
session_start(); 
sec_session_start(); 
$tumblrblog = $_SESSION['tumblrblog']; 

$connection = new TumblrOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); 

$access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']); 

unset($_SESSION['oauth_token']); 
unset($_SESSION['oauth_token_secret']); 

if (200 == $connection->http_code) { 
$at = implode(",",$access_token); 

$insert_stmt = $mysqli->prepare("INSERT INTO tumblogs (tumblrblog, access_token) VALUES (?, ?)"); 
    $insert_stmt->bind_param('ss', $tumblrblog, $at); 
    $insert_stmt->execute(); 
print_r ($access_token); 

} else { 
    header('Location: ./clearsessions.php'); 
} 

DONE .PHP(Retreive和使用保存的访问令牌)

include('functions.php'); 
session_start(); 
sec_session_start(); 
require_once('tumblroauth/tumblroauth.php'); 
require_once('config.php'); 
$tumblrblog = $_SESSION['tumblrblog']; 

$stmt = $mysqli->prepare('SELECT access_token FROM `tumblogs` WHERE tumblrblog=? LIMIT 1'); 
$stmt->bind_param("s", $tumblrblog); 
$stmt->execute(); 
$stmt->bind_result($at); 
$stmt->fetch(); 

$access_token = explode(",", $at); 

$connection = new TumblrOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['0'], $access_token['1']); 

print_r($access_token['0']); 

$hostname = "$tumblrblog.tumblr.com"; 
$connection = new TumblrOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['0'], $access_token['1']); 
$userinfo = $connection->get('http://api.tumblr.com/v2/user/info'); 
print_r($userinfo); 
$pic_path = "dir/$tumblrblog/good/icon.png"; 
$pic = file_get_contents($pic_path); 
$connection->post('api.tumblr.com/v2/blog/$hostname/post', array('type' => 'text', 'body' => 'this is a test of Tumbloadr v2')); 

谢谢大家考虑看看!

布兰登

回答

2

在done.php我会核实你也通过打印$access_token[1]以及获取正确的访问令牌的秘密。另外,我会删除$连接中的一个,因此不需要执行两次。为了更有活力,你可以使用这个 $hostname = parse_url($blog->url,PHP_URL_HOST); 获得$ hostname这显然不是一个修复,但希望它有一点帮助。

1

为什么不在插入数据库之前序列化accessToken?我认为这将是在数据库中存储令牌的正确方法。你永远无法知道该标记是否包含“,”字符,那么你的爆炸会破坏整个访问令牌。

当我为Dropbox存储令牌时,我必须在使用它时序列化和反序列化。