第三方登录概述
织梦CMS默认不支持第三方登录(QQ/微信/微博等),但在需要会员功能的栏目中,集成第三方登录可以大幅降低用户注册门槛,提升会员注册率和栏目互动率。
一、集成QQ互联登录
1.1 申请QQ互联接入
- 访问
https://connect.qq.com/注册开发者 - 创建应用获取 APP ID 和 APP KEY
- 设置回调地址:
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';
用户体验建议:第三方登录按钮应放在栏目页的显眼位置(如顶部导航栏或内容页评论框上方)。同时提供"账号绑定"功能,允许已有注册会员关联第三方账号,避免用户需要重新注册。