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

PHP 串接騰訊微博 API 實作發布廣播與關注用戶功能

     編輯:PHP 相關知識

前言

騰訊微博(已停止服務)當年提供開放 API,開發者可透過 OAuth 1.0/2.0 實作第三方發文、關注等功能。本文保留原始技術架構說明,作為歷史參考與 OAuth 流程學習範例。現代專案請改用微信開放平台、微博開放平台等現行 API。

登入流程:OAuth 1.0 兩步驟取得授權

步驟一:取得驗證碼

<?php
/**
 * 取得騰訊微博登入驗證碼
 * @param string $qq QQ 號碼
 * @return string|false 驗證碼,失敗回傳 false
 */
function getVerifyCode($qq) {
    $url = "https://ptlogin2.qq.com/check?uin=@{$qq}&appid=46000101";
    $response = file_get_contents($url);
    // 回應格式:ptui_checkVC('0','!CCQ');
    if (preg_match("/ptui_checkVC\('0','([^']+)'\)/", $response, $m)) {
        return $m[1]; // 如 !CCQ
    }
    return false;
}
?>

步驟二:提交帳密與驗證碼登入

<?php
/**
 * 騰訊微博模擬登入
 * @param string $qq  QQ 號
 * @param string $pwd 密碼(明文)
 * @param string $verifyCode 步驟一取得的驗證碼
 * @return string|false 登入成功回傳跳轉 URL,失敗回傳 false
 */
function loginTencentWeibo($qq, $pwd, $verifyCode) {
    // 密碼加密:MD5(MD5(MD5(pwd)) + verifyCode)
    // 注意:實際演算法較複雜,此為簡化示意
    $pwdMd5_1 = md5($pwd);
    $pwdMd5_2 = md5($pwdMd5_1);
    $pwdMd5_3 = md5($pwdMd5_2);
    $encryptedPwd = md5($pwdMd5_3 . $verifyCode);

    $params = [
        'u'           => "@{$qq}",
        'p'           => $encryptedPwd,
        'verifycode'  => $verifyCode,
        'aid'         => '46000101',
        'u1'          => 'https://t.qq.com',
        'h'           => '1',
        'from_ui'     => '1',
        'fp'          => 'loginerroralert',
    ];

    $url = 'https://ptlogin2.qq.com/login?' . http_build_query($params);
    $response = file_get_contents($url);
    // 成功回應:ptuiCB('0','0','https://t.qq.com','0');
    if (preg_match("/ptuiCB\('0','0','([^']+)'\)/", $response, $m)) {
        return $m[1]; // 登入成功跳轉 URL
    }
    return false;
}
?>

發布廣播(發文)

<?php
/**
 * 發布騰訊微博廣播
 * @param string $content 發文內容
 * @param string $cookie  登入後取得的 Cookie(含 skey, ptui_loginuin 等)
 * @return bool
 */
function publishWeibo($content, $cookie) {
    $url = 'https://t.qq.com/publish.php';
    $data = [
        'content'    => urlencode($content),
        'pic'        => '',
        'countType'  => '',
        'viewModel'  => '1',
    ];

    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL            => $url,
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => http_build_query($data),
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_COOKIE         => $cookie,
        CURLOPT_REFERER        => 'https://t.qq.com/', // 必須帶 Referer
        CURLOPT_TIMEOUT        => 30,
    ]);
    $response = curl_exec($ch);
    curl_close($ch);

    // 成功回應:{"result":0,"msg":"廣播成功",...}
    return strpos($response, '"result":0') !== false;
}
?>

關注用戶(收聽)

<?php
/**
 * 關注指定用戶
 * @param string $targetUin 目標用戶 UIN/QQ
 * @param string $cookie    登入 Cookie
 * @return bool
 */
function followUser($targetUin, $cookie) {
    $url = 'https://t.qq.com/follow.php';
    $data = [
        'u' => urlencode($targetUin),
        'r' => urlencode(time()), // 隨機數
    ];

    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL            => $url,
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => http_build_query($data),
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_COOKIE         => $cookie,
        CURLOPT_REFERER        => 'https://t.qq.com/',
        CURLOPT_TIMEOUT        => 30,
    ]);
    $response = curl_exec($ch);
    curl_close($ch);

    // 成功:{"result":0,"msg":"成功"}
    return strpos($response, '"result":0') !== false;
}
?>

完整流程整合範例

<?php
// 1. 設定帳號資訊
$qq = '123456789';
$pwd = 'your_password';

// 2. 取得驗證碼
$verifyCode = getVerifyCode($qq);
if (!$verifyCode) die('取得驗證碼失敗');

// 3. 登入
$redirectUrl = loginTencentWeibo($qq, $pwd, $verifyCode);
if (!$redirectUrl) die('登入失敗');

// 4. 從重導向 URL 取得 Cookie(實際需解析 Set-Cookie 標頭)
// 此處簡化:假設已手動取得 Cookie 字串
$cookie = 'skey=xxx; ptui_loginuin=xxx; ...';

// 5. 發布廣播
$content = '測試發文 ' . date('Y-m-d H:i:s');
if (publishWeibo($content, $cookie)) {
    echo "發布成功\n";
} else {
    echo "發布失敗\n";
}

// 6. 關注用戶
if (followUser('987654321', $cookie)) {
    echo "關注成功\n";
} else {
    echo "關注失敗\n";
}
?>

關鍵技術點總結

環節關鍵點現代對應做法
認證OAuth 1.0 簽名、多重 MD5 加密、驗證碼機制OAuth 2.0 / OpenID Connect,JWT Token
密碼處理客戶端多重 MD5(不安全,僅歷史遺留)HTTPS + 伺服端 bcrypt/argon2 雜湊
請求驗證Referer 檢查防 CSRFSameSite Cookie、CSRF Token、CORS
回應格式JSONP 風格字串(ptuiCB callback)標準 JSON、統一錯誤碼
API 端點硬編碼域名(t.qq.com, ptlogin2.qq.com)服務發現、配置中心、版本化 API

安全性警示(重要)

  • 明文密碼傳輸:範例中密碼在客戶端加密後傳輸,但若 HTTPS 未強制,仍有中間人攻擊風險。
  • MD5 不安全:多重 MD5 非標準 KDF,現代應用必須使用 password_hash() / password_verify()(bcrypt/argon2)。
  • Cookie 洩漏:登入後取得的 Cookie 相當於存取憑證,需妥善儲存、定期輪換、最小權限原則。
  • API 已下線:騰訊微博於 2020 年 9 月 28 日正式停止服務,相關端點皆不可用。本文僅供技術架構參考。

現代替代方案

  1. 微信開放平台:developers.weixin.qq.com - 公開帳號發文、客服訊息、小程式訂閱訊息。
  2. 新浪微博開放平台:open.weibo.com - OAuth 2.0、發微博、關注、評論完整 API。
  3. Twitter API v2:developer.twitter.com - 發推、關注、空間、串流完整支援。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved