首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 接入新浪微博 OAuth2 登錄完整流程:SDK 配置、授權跳轉、Access Token 獲取與用戶信息調用

     編輯:PHP 相關知識

PHP 接入新浪微博 OAuth2 登錄完整流程

微博開放平台採用 OAuth2.0 授權碼模式。本文基於官方 PHP SDK(saetv2.ex.class.php),詳細拆解:應用創建、SDK 配置、授權跳轉、回調處理換取 Access Token、調用用戶信息接口的完整代碼流程。

前置準備

  1. 微博開放平台創建「網頁應用」,獲取 App Key、App Secret、設置授權回調頁(需可公網訪問)。
  2. 下載官方 PHP SDK,解壓至項目目錄。

1. 配置文件 config.php

<?php
header('Content-Type: text/html; charset=UTF-8');
define('WB_AKEY', '你的App Key');
define('WB_SKEY', '你的App Secret');
define('WB_CALLBACK_URL', 'https://你的域名/callback.php'); // 必須與後台設置一致
// 常量 CANVAS_PAGE 供 SDK 內部使用
define('CANVAS_PAGE', WB_CALLBACK_URL);
?>

2. 發起授權請求(引導用戶跳轉)

<?php
require_once 'config.php';
require_once 'saetv2.ex.class.php';

$oauth = new SaeTOAuth(WB_AKEY, WB_SKEY);
$authUrl = $oauth->getAuthorizeURL(CANVAS_PAGE);

echo '微博授權登錄';
/*
生成的授權地址類似:
https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REDIRECT_URI
*/
?>

3. 回調頁 callback.php 處理 code 換取 Access Token

<?php
require_once 'config.php';
require_once 'saetv2.ex.class.php';

if (isset($_REQUEST['code'])) {
    $oauth = new SaeTOAuth(WB_AKEY, WB_SKEY);
    $keys = [
        'code' => $_REQUEST['code'],
        'redirect_uri' => CANVAS_PAGE,
    ];
    $token = $oauth->getAccessToken('code', $keys);
    // $token 結構:['access_token'=>..., 'expires_in'=>..., 'remind_in'=>..., 'uid'=>...]
    if (isset($token['access_token']) && $token['access_token']) {
        // 存儲到 Session/數據庫/緩存
        $_SESSION['wb_token'] = $token;
        header('Location: user_info.php'); // 跳轉獲取用戶信息
        exit;
    } else {
        echo "獲取 Access Token 失敗: ";
        var_dump($token);
    }
} else {
    echo "缺少 code 參數,可能用戶拒絕授權";
}
?>

4. 獲取用戶信息(調用 users/show 接口)

<?php
require_once 'config.php';
require_once 'saetv2.ex.class.php';

session_start();
if (!isset($_SESSION['wb_token'])) {
    header('Location: login.php');
    exit;
}

$token = $_SESSION['wb_token'];
$client = new SaeTClientV2(WB_AKEY, WB_SKEY, $token['access_token']);

// 根據 UID 獲取用戶資料
$uid = $token['uid'];
$userInfo = $client->show_user($uid); // 對應 API: users/show
/*
返回示例:
[
  'id' => 1234567890,
  'screen_name' => '用戶昵稱',
  'profile_image_url' => '頭像URL',
  'gender' => 'm',
  'location' => '北京',
  'followers_count' => 1000,
  'friends_count' => 500,
  'statuses_count' => 200,
  ...
]
*/
echo "歡迎, {$userInfo['screen_name']}!
"; echo ''; ?>

關鍵類方法速查

類方法用途
SaeTOAuthgetAuthorizeURL($redirect_uri)生成授權頁 URL
SaeTOAuthgetAccessToken('code', $keys)用 code 換取 Access Token
SaeTClientV2show_user($uid_or_name)獲取用戶資料 (users/show)
SaeTClientV2update($status, $pic_path)發布微博 (statuses/update)
SaeTClientV2home_timeline($page, $count)獲取首頁微博流

生產環境注意事項

  1. Token 存儲:Access Token 有效期 30 天,建議存 Redis/DB,過期前用 Refresh Token 刷新(SDK 支持)。
  2. 狀態參數 state:授權請求帶上 state 防 CSRF,回調驗證。
  3. 錯誤處理:捕獲 OAuthException,友好提示用戶重試。
  4. HTTPS:回調頁必須 HTTPS,微博強制要求。
  5. 合規:僅獲取用戶授權範圍內信息,隱私政策明確告知用途。

遵循標準 OAuth2 流程 + 官方 SDK,可快速穩健接入微博登錄,為應用引入社交身份體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved