织梦cms栏目第三方登录

第三方登录概述

织梦CMS默认不支持第三方登录(QQ/微信/微博等),但在需要会员功能的栏目中,集成第三方登录可以大幅降低用户注册门槛,提升会员注册率和栏目互动率。

一、集成QQ互联登录

1.1 申请QQ互联接入

  1. 访问 https://connect.qq.com/ 注册开发者
  2. 创建应用获取 APP IDAPP KEY
  3. 设置回调地址:https://你的域名/member/qq_callback.php

1.2 前端登录按钮

<!-- 栏目页添加QQ登录入口 -->
<div class="social-login">
  <a href="/member/qq_login.php?goto={dede:field.typelink/}" 
     class="btn-qq-login">
    QQ账号登录
  </a>
</div>

1.3 QQ登录回调处理

<?php
// member/qq_callback.php
require_once(dirname(__FILE__)."/config.php");

$code=$_GET['code'];
$appid='你的APP_ID';
$appkey='你的APP_KEY';
$callback=urlencode('https://你的域名/member/qq_callback.php');

// 1. 用code换取access_token
$token_url="https://graph.qq.com/oauth2.0/token?grant_type=authorization_code"
  ."&client_id={$appid}&client_secret={$appkey}&code={$code}"
  ."&redirect_uri={$callback}";
  
$response=file_get_contents($token_url);

// 2. 获取用户的OpenID
preg_match('/access_token=([^&]+)/', $response, $matches);
$access_token=$matches[1];

$openid_url="https://graph.qq.com/oauth2.0/me?access_token={$access_token}";
$openid_res=file_get_contents($openid_url);
preg_match('/"openid":"([^"]+)"/', $openid_res, $oid);
$openid=$oid[1];

// 3. 检查是否已注册,如未注册则自动注册
$check=$dsql->GetOne("SELECT mid FROM dede_member 
                        WHERE qq_openid='{$openid}'");
if($check){
    // 已注册,直接登录
    $cfg_ml->LoginByMid($check['mid']);
} else {
    // 新用户,获取QQ昵称等信息注册
    $info_url="https://graph.qq.com/user/get_user_info"
      ."?access_token={$access_token}&oauth_consumer_key={$appid}"
      ."&openid={$openid}";
    $user_info=json_decode(file_get_contents($info_url), true);
    
    // 注册新会员
    $username='QQ_'.$openid;
    $nickname=$user_info['nickname'];
    $cfg_ml->Register($username, $nickname, $openid);
}

// 登录成功,跳转到指定栏目
$goto=isset($_GET['goto']) ? $_GET['goto'] : '/';
header("Location: {$goto}");
?>

二、集成微信登录(公众号/开放平台)

<?php
// member/wx_login.php - 微信扫码登录
$appid='你的微信APPID';
$redirect_uri=urlencode('https://你的域名/member/wx_callback.php');
$state=md5(uniqid());

// 微信OAuth2.0授权
$wx_url="https://open.weixin.qq.com/connect/qrconnect"
  ."?appid={$appid}&redirect_uri={$redirect_uri}"
  ."&response_type=code&scope=snsapi_login&state={$state}";

header("Location: {$wx_url}");
?>

三、栏目权限与第三方登录结合

<!-- 栏目页判断第三方登录状态 -->
{dede:php}
if($cfg_ml->IsLogin()){
    $bindInfo=$dsql->GetOne("SELECT qq_openid, wx_openid 
                              FROM dede_member WHERE mid=".$cfg_ml->M_ID);
    if($bindInfo['qq_openid']){
        echo '<span class="bind-tag">已绑定QQ</span>';
    }
    if($bindInfo['wx_openid']){
        echo '<span class="bind-tag">已绑定微信</span>';
    }
} else {
    echo '<div class="login-prompt">
      登录后可查看完整内容
      <div class="login-btns">
        <a href="/member/qq_login.php">QQ登录</a>
        <a href="/member/wx_login.php">微信登录</a>
      </div>
    </div>';
}
{/dede:php}

四、数据库扩展字段

-- 为会员表添加第三方登录字段
ALTER TABLE dede_member 
ADD COLUMN qq_openid VARCHAR(64) DEFAULT '' COMMENT 'QQ OpenID',
ADD COLUMN wx_openid VARCHAR(64) DEFAULT '' COMMENT '微信OpenID',
ADD COLUMN wb_openid VARCHAR(64) DEFAULT '' COMMENT '微博OpenID',
ADD COLUMN avatar_url VARCHAR(255) DEFAULT '' COMMENT '第三方头像URL';
用户体验建议:第三方登录按钮应放在栏目页的显眼位置(如顶部导航栏或内容页评论框上方)。同时提供"账号绑定"功能,允许已有注册会员关联第三方账号,避免用户需要重新注册。