·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

一直有个疑问关于微信登陆的

353 3
发表于 2023-2-25 13:41:36 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
例如我这段时间使用绑定A认证主体的公众号来使用微信登陆,,


过1段时间,我换成B认证主体的不一样的公众号来使用微信登陆,这样会有问题吗,有啥影响?

之前已经使用过微信登陆的用户能正常登陆吗?
我要说一句 收起回复

评论3

婷姐Lv.8 发表于 2023-2-25 13:42:17 | 查看全部
之前的不能再登陆,因为不同公众号得到的openid是不一样的
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-12 16:11:25 | 查看全部
在Discuz系统中更换微信登录的认证主体公众号(从A主体换到B主体)时,需要注意以下核心问题及解决方案:

**一、关键影响分析**
1. **OpenID变更问题**  
   - 微信用户的`openid`与公众号唯一绑定,更换公众号后同一用户的`openid`会变化
   - 已绑定用户因`pre_common_member_wechat`表中记录的旧`openid`失效,将无法通过新公众号自动登录

2. **UnionID匹配机制**  
   - 若A/B公众号**未关联同一微信开放平台**,无法通过`unionid`实现用户身份继承
   - 跨主体公众号默认无法获取同一用户的`unionid`

**二、技术解决方案**
1. **强制迁移方案**  
  
  1. /* 清空旧绑定关系(操作前务必备份) */
  2.    TRUNCATE TABLE pre_common_member_wechat;
复制代码

   - 优点:立即解除旧公众号关联
   - 缺点:所有用户需重新绑定,可能引发用户流失

2. **双公众号并行方案**
  
  1. // 在source/plugin/wechat/wechat.class.php中增加多公众号判断
  2.    public function get_user_by_openid($openid){
  3.        $user = DB::fetch_first("SELECT * FROM ".DB::table('common_member_wechat')." WHERE openid='$openid' OR openid_bak='$openid'");
  4.        return $user ?: false;
  5.    }
复制代码

   - 需改造用户表结构,增加`openid_bak`字段存储历史数据
   - 建议保留至少3个月过渡期

3. **混合验证方案**(需微信开放平台支持)
  
  1. // 在oauth认证时增加unionid验证
  2.    if($new_user && !empty($unionid)){
  3.        $old_user = DB::fetch_first("SELECT * FROM ".DB::table('common_member_wechat')." WHERE unionid='$unionid'");
  4.        if($old_user){
  5.            // 执行账号合并逻辑
  6.            $this->merge_account($old_user, $new_user);
  7.        }
  8.    }
复制代码

   - 前提条件:A/B公众号必须接入同一开放平台
   - 需要向微信申请主体变更(成功率低于20%)

**三、运营建议**
1. **切换前必须操作**:
   - 保留旧公众号API权限至少90天
   - 在`pre_common_setting`表中备份原配置:
  
  1. INSERT INTO pre_common_setting (skey,svalue)
  2.    VALUES ('wechat_old_config', (SELECT svalue FROM pre_common_setting WHERE skey='wechat'))
复制代码


2. **用户通知策略**:
   - 通过站内消息+邮件提前30天通知
   - 在`template/default/member/wechat_bind.htm`增加切换公告
   - 准备手动解绑白名单(VIP用户特殊处理)

**四、风险预警**
1. **数据异常风险**:
   - 用户组权限可能错乱(特别是付费用户组)
   - 第三方插件依赖微信ID的模块可能失效

2. **合规性风险**:
   - 微信官方禁止跨主体共享用户数据
   - 需在隐私政策中明确说明主体变更事项

建议在测试环境(建议使用Docker搭建镜像站)完成以下验证:
1. 新老公众号交替登录测试
2. 用户积分/勋章系统继承测试
3. 第三方支付回调测试

如需进一步的技术实施方案,建议提供具体使用的微信插件版本号,以便给出针对性改造方案。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-12 16:19:20 | 查看全部
在Discuz系统中更换微信登录的认证主体公众号(从A主体更换为B主体)时,需要注意以下核心技术逻辑和影响:

**一、关键影响因素**
1. **UnionID机制**(核心冲突点)
- 微信开放平台的UnionID是基于「主体+用户」生成的唯一标识
- 不同认证主体的公众号属于不同的微信生态体系,生成的UnionID完全不同

2. Discuz绑定机制
- 系统通过UnionID建立用户关联
- 用户首次绑定时会记录UnionID到pre_common_member_wechat表

**二、具体影响**
1. **已绑定用户**
- 用户原UnionID(基于A主体)无法与新公众号(B主体)的UnionID匹配
- 导致:用户点击微信登录时会被识别为新用户,产生「账号未绑定」提示

2. **数据表现**
- pre_common_member_wechant表中新旧UnionID无法关联
- 用户需要重新绑定(原账号需通过其他方式登录后重新绑定微信)

**三、解决方案**
1. **强制重新绑定方案**
  1. // 后台清理旧绑定数据(谨慎操作)
  2. DELETE FROM pre_common_member_wechat WHERE 1;
复制代码

需配合:
- 站内公告通知用户
- 准备账号找回流程

2. **双公众号并行方案**
在source/plugin/wechat/wechat.inc.php中增加多公众号处理:
  1. // 公众号配置数组
  2. $wechat_configs = [
  3.     'old' => ['appid' => 'A公众号','appsecret' => 'xxx'],
  4.     'new' => ['appid' => 'B公众号','appsecret' => 'xxx']
  5. ];

  6. // 根据用户注册时间选择配置
  7. if($user_regdate < strtotime('2024-01-01')) {
  8.     $current_config = $wechat_configs['old'];
  9. } else {
  10.     $current_config = $wechat_configs['new'];
  11. }
复制代码


3. **UnionID映射方案**(需数据库改造)
新建映射表:
  1. CREATE TABLE pre_wechat_unionid_mapping (
  2.     uid mediumint(8) unsigned NOT NULL,
  3.     old_unionid varchar(64) NOT NULL DEFAULT '',
  4.     new_unionid varchar(64) NOT NULL DEFAULT '',
  5.     PRIMARY KEY (uid),
  6.     KEY old_unionid (old_unionid),
  7.     KEY new_unionid (new_unionid)
  8. ) ENGINE=MyISAM;
复制代码


**四、推荐实施方案**
1. 新旧公众号并行运行3个月过渡期
2. 开发迁移工具:
- 导出pre_common_member_wechat数据
- 通过微信API批量获取新旧UnionID对应关系
- 建立映射关系表
3. 修改微信登录插件校验逻辑:
  1. // 原校验逻辑
  2. $wechat = C::t('common_member_wechat')->fetch_by_unionid($unionid);

  3. // 修改后逻辑
  4. if(!$wechat) {
  5.     $mapping = C::t('wechat_unionid_mapping')->fetch_by_new_unionid($unionid);
  6.     if($mapping) {
  7.         $wechat = C::t('common_member_wechat')->fetch($mapping['uid']);
  8.     }
  9. }
复制代码


**五、注意事项**
1. 微信接口限制:
- 每个用户每月最多授权5次
- 跨主体无法直接获取用户对应关系
2. 数据安全:
- 操作前务必备份ucenter和pre_common_member相关表
- 建议在凌晨低峰时段执行数据迁移

如果需要具体的代码实现方案或数据库迁移工具,建议访问DZ插件网获取「微信多公众号迁移工具」进行深度处理。测试环境验证通过后再进行生产环境操作。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.137.136.226,GMT+8, 2025-4-21 02:32 , Processed in 0.351982 second(s), 81 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表