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

phpcms V9 接入 QQ 登錄 OAuth 2.0 完整改造教程

     編輯:PHP 相關知識

背景

phpcms V9 內建 QQ 登錄基於 OAuth 1.0,騰訊已停止審核 1.0 應用,導致新站無法接入。本文提供將會員模塊升級為 OAuth 2.0 的完整步驟,經測試無 Bug。

改造步驟

1. 修改會員模塊控制器 phpcms/modules/member/index.php

在類中添加 public_qq_login2() 方法(建議緊跟原 public_qq_login 之後):

// QQ登錄 OAuth 2.0
public function public_qq_login2() {
    $appid   = pc_base::load_config('system', 'qq_appid');
    $appkey  = pc_base::load_config('system', 'qq_appkey');
    $callback = pc_base::load_config('system', 'qq_callback');

    pc_base::load_app_class('qqOAuth2', '', 0);
    $oauth = new qqOAuth2($appid, $appkey, $callback);

    $this->_session_start();

    if (!isset($_GET['code'])) {
        $oauth->redirect_to_login(); // 跳轉騰訊授權頁
    } else {
        $code = $_GET['code'];
        $_SESSION['openid'] = $oauth->get_openid($code);

        if (!empty($_SESSION['openid'])) {
            // 檢查是否已綁定
            $r = $this->db->get_one(['connectid' => $_SESSION['openid'], 'from' => 'qq']);
            if (!empty($r)) {
                // 已綁定 → 直接登錄
                $this->_init_phpsso();
                $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']);
                // 設置 Cookie、Session 等登錄態...
                showmessage(L('login_success') . $synloginstr, $forward);
            } else {
                // 未綁定 → 跳轉完善資料頁
                $user = $oauth->get_user_info();
                $_SESSION['connectid'] = $_SESSION['openid'];
                $_SESSION['from'] = 'qq';
                if (CHARSET != 'utf-8') {
                    $connect_username = iconv('utf-8', CHARSET, $user['nickname']);
                }
                include template('member', 'connect');
            }
        }
    }
}

2. 放置 OAuth 2.0 類庫

將 qqOAuth2.class.php 放入 phpcms/modules/member/classes/ 目錄。類庫需實現:
• redirect_to_login():構造授權 URL 並跳轉
• get_openid($code):用 code 換取 access_token 再獲取 openid
• get_user_info():用 access_token + openid 獲取暱稱、頭像等

3. 後台配置回調地址

後台 → 會員設置 → QQ 登錄 → 回調地址填寫:
https://您的域名/index.php?m=member&c=index&a=public_qq_login2

4. 填寫 App ID / App Key 並更新緩存

同頁面填入騰訊開放平台申請的 App ID、App Key,提交後點擊「更新緩存」。

5. 關鍵:擴展數據庫 connectid 字段長度

phpcms 默認 v9_member.connectid 為 char(15),OAuth 2.0 的 openid 長度為 32 位,必須擴展:

ALTER TABLE `v9_member` MODIFY `connectid` CHAR(255) NOT NULL DEFAULT '';

此修改同時兼容淘寶、微信、百度等其他第三方登錄的唯一標識存儲。

驗證清單

  1. 前台點擊 QQ 登錄 → 跳轉騰訊授權頁 → 回調本站 public_qq_login2。
  2. 首次登錄 → 進入綁定/註冊頁面 → 完成綁定。
  3. 再次登錄 → 直接進入會員中心,單點登錄同步正常。
  4. 檢查 v9_member 表 connectid 正確存儲 32 位 openid。

常見問題

  • 回調 404:檢查 URL 重寫規則、方法名拼寫、大小寫敏感(Linux)。
  • 編碼亂碼:騰訊返回 UTF-8,站點為 GBK 時需 iconv 轉碼(代碼中已包含)。
  • Session 丟失:確保回調域名與授權域名一致,檢查 session.cookie_domain 設置。

完成上述改造,phpcms V9 即可無縫使用 QQ OAuth 2.0 登錄,並為未來接入微信、微博等打下基礎。

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