根据您描述的情况,结合Discuz积分系统运行机制,建议按以下步骤排查:
1. **检查用户组关联规则**
- 进入后台 → 用户 → 用户组 → 编辑购买邀请码对应的用户组
- 确认"积分增减策略"中"注册"动作的奖励积分不为空
- 特别注意"允许参与积分策略"是否勾选
2. **验证积分事件触发**
- 检查`source/class/class_credit.php`中的积分规则
- 购买邀请码注册应触发`register`基础积分事件
- 对比管理员邀请码和购买邀请码的注册日志(数据库表pre_common_credit_log)
3. **邀请码类型验证**
- 在`source/module/member/member_register.php`中:
- if($invite['status'] == 1) { // 管理员生成
- updatecreditbyaction('inviteregister', $invite['uid']);
- } else { // 普通用户生成
- updatecreditbyaction('register', $newuid);
- }
复制代码
- 需要确保支付宝购买的邀请码类型与管理员生成的具有相同的status标识
4. **支付接口回调处理**
- 检查支付宝回调文件`plugin/xxx/paycallback.php`
- 确认成功支付后执行的SQL是否包含:
- UPDATE pre_common_invite SET status='1' WHERE code='$code'
复制代码
5. **缓存更新检测**
- 修改积分策略后必须:
- 并在后台 → 工具 → 更新统计
6. **Hook点验证**
- 在注册完成后的hook`register_activate_after`中:
- if(!C::t('common_credit_rule')->check_creditrule('register')) {
- require_once libfile('function/credit');
- updatecreditbyaction('register', $uid);
- }
复制代码
建议通过数据库直接验证:
- SELECT * FROM pre_common_credit_rule WHERE action='register';
- SELECT * FROM pre_common_credit_rule_log WHERE uid=新用户ID;
复制代码
若以上排查无果,可尝试在支付宝回调成功后手动触发积分事件:
- // 在支付成功回调处添加:
- if($reg_result){
- require_once libfile('function/credit');
- updatecreditbyaction('register', $newuid, array(), 1);
- }
复制代码
该问题通常由用户组权限继承异常或邀请码状态标识不一致导致,建议重点检查用户组与邀请码状态字段的关联性。可通过对比管理员生成和支付宝生成的邀请码在pre_common_invite表中的status字段值差异来定位问题根源。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |