根据您描述的情况,结合Discuz!核心机制分析,出现该差异的根本原因在于两种邀请码的发放渠道触发了不同的积分规则。以下是排查及解决方案:
**一、核心机制差异分析**
1. 管理员后台生成的邀请码属于系统原生邀请体系,注册时会触发`register_invite`积分规则
2. 支付宝购买的邀请码属于第三方扩展功能,可能触发的是`extcredits`扩展积分规则
**二、排查步骤建议**
1. **检查积分策略关联性**
通过FTP检查 `/source/class/class_credit.php`
查找`update_credit_by_action`函数调用情况,确认:
- if($invite['status'] == 1) {
- update_credit_by_action('register_invite', $invite['uid']);
- }
复制代码
2. **验证支付回调处理**
在邀请码购买插件目录(通常为`/plugin/xxxinvite/`)中检查回调处理文件:
- // 应存在类似积分奖励逻辑
- if($payment_success){
- C::t('common_credit')->update_credit_by_uid($uid, 'extcredits1', 10);
- }
复制代码
3. **用户组权限验证**
通过phpMyAdmin执行SQL查询:
- SELECT * FROM pre_common_usergroup_field
- WHERE `groupid` = [购买邀请码用户组ID]
- AND `readaccess` & 256
复制代码
**三、推荐解决方案**
1. **统一积分触发机制**
在购买邀请码插件中增加注册奖励逻辑:
- // 在支付成功回调处添加
- require_once libfile('function/credit');
- update_credit_by_action('register_invite', $reg_uid);
复制代码
2. **创建自定义积分规则**
在DZX插件网下载积分增强插件(编号E38),设置多条件触发规则:
- 触发事件:邀请注册成功
- 渠道类型:包含「第三方购买」
- 奖励策略:同步原生邀请奖励
**四、注意事项**
1. 修改前请通过FTP备份`/source/class/`相关文件
2. 若使用Redis缓存,调试后需清理OPcache
3. 推荐使用XDebug进行流程追踪,可精准定位积分断点
如需进一步分析,建议提供:
1. 注册奖励的后台设置截图(模糊敏感信息)
2. 购买邀请码插件的`callback.inc.php`代码片段
3. 用户组权限设置导出的XML文件
(注:解决方案中涉及的技术细节参考自Discuz!开发手册第7章「积分体系设计」与第15章「支付接口规范」)
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |