作為國內早期開放的社交平台,新浪微博提供了完善的 開發者平台,包含詳細的 API 文檔、多語言 SDK(PHP/Java/Python 等)及 Demo 範例。本文基於 PHP SDK,梳理 OAuth 2.0 授權碼模式的完整落地流程。
App Key (WB_AKEY) 和 App Secret (WB_SKEY)。weibo-oauth-class-with-image-avatar 包,解壓放入項目目錄。https://yourdomain.com/callback.php),必須與代碼中一致。核心類:WeiboOAuth(SDK 內置)。
<?php
require_once 'path/to/weibooauth.php'; // SDK 入口
$o = new WeiboOAuth(WB_AKEY, WB_SKEY);
$keys = $o->getRequestToken(); // 返回 ['oauth_token', 'oauth_token_secret']
// 必須存入 Session,後續換 Access Token 時需用
session_start();
$_SESSION['oauth_keys'] = $keys;
$authorize_url = $o->getAuthorizeURL($keys['oauth_token'], false, 'https://yourdomain.com/callback.php');
header("Location: $authorize_url");
exit();
callback.php,URL 會攜帶 oauth_verifier 參數。$_SESSION['oauth_keys'] 必須在步驟 1 正確保存,否則步驟 3 會因缺少 token 失敗。<?php // callback.php
session_start();
require_once 'path/to/weibooauth.php';
$o = new WeiboOAuth(
WB_AKEY,
WB_SKEY,
$_SESSION['oauth_keys']['oauth_token'],
$_SESSION['oauth_keys']['oauth_token_secret']
);
$last_key = $o->getAccessToken($_REQUEST['oauth_verifier']);
// $last_key 包含:oauth_token, oauth_token_secret, uid 等
// 建議:存入用戶表,關聯本地用戶 ID,避免重複授權
// saveToDB($user_id, $last_key);
使用 WeiboClient 類,攜帶 Access Token 即可調用各業務接口:
$c = new WeiboClient(WB_AKEY, WB_SKEY, $oauth_token, $oauth_token_secret);
$msg = $c->public_timeline(); // 獲取公共時間線最新 20 條微博
if ($msg === false || isset($msg['error_code'])) {
// 錯誤處理:token 過期、頻率限制、參數錯誤等
logError($msg);
return;
}
// 返回通常為 JSON 格式,直接 json_decode() 轉陣列
$data = json_decode($msg, true);
print_r($data);
error_code: 21327 (expired token) 時,需引導用戶重新授權。overtrue/weibo)。新浪微博 OAuth 2.0 流程核心在於:Request Token → 用戶授權 → Access Token 三步換證。關鍵點在於 Session 狀態保持、回調域一致性、Token 持久化存儲。掌握此流程,即可快速接入微博登錄、分享、數據分析等功能。