2012-09-27 157 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存儲令牌時,我必須在使用它時序列化和反序列化。