invite_code) { return $user->invite_code; } // 生成唯一邀请码(排除易混淆字符) $chars = 'ABCDEFGHJKMNPQRSTUVWXYZ23456789'; $maxAttempts = 50; for ($i = 0; $i < $maxAttempts; $i++) { $code = ''; for ($j = 0; $j < 6; $j++) { $code .= $chars[mt_rand(0, strlen($chars) - 1)]; } // 检查是否重复 if (!UserModel::where('invite_code', $code)->find()) { $user->invite_code = $code; $user->save(); return $code; } } // 兜底:用MD5 $code = strtoupper(substr(md5($userId . time() . mt_rand()), 0, 6)); $user->invite_code = $code; $user->save(); return $code; } /** * 验证邀请码 * @param string $inviteCode 邀请码 * @return array */ public static function validate($inviteCode) { $inviteCode = strtoupper(trim($inviteCode)); if (strlen($inviteCode) !== 6) { return ['code' => 0, 'msg' => '邀请码格式错误']; } $inviter = UserModel::where('invite_code', $inviteCode) ->where('status', 'normal') ->field(['id', 'nickname', 'avatar', 'invite_code']) ->find(); if (!$inviter) { return ['code' => 0, 'msg' => '邀请码不存在']; } return [ 'code' => 1, 'msg' => '邀请码有效', 'data' => [ 'user_id' => $inviter->id, 'invite_code' => $inviter->invite_code, 'inviter' => [ 'id' => $inviter->id, 'nickname' => $inviter->nickname, 'avatar' => $inviter->avatar ] ] ]; } /** * 绑定上下级关系 * @param string $inviteCode 邀请码 * @param int $userId 被邀请人ID * @return array */ public static function bind($inviteCode, $userId) { $inviteCode = strtoupper(trim($inviteCode)); $user = UserModel::find($userId); if (!$user) { return ['code' => 0, 'msg' => '用户不存在']; } // 已绑定过上级 if ($user->parent_user_id !== null) { return ['code' => 0, 'msg' => '您已有推荐人,无法修改']; } // 验证邀请码 $validateResult = self::validate($inviteCode); if ($validateResult['code'] != 1) { return $validateResult; } $inviterUserId = $validateResult['data']['user_id']; // 不能邀请自己 if ($inviterUserId == $userId) { return ['code' => 0, 'msg' => '不能使用自己的邀请码']; } // 绑定 $user->parent_user_id = $inviterUserId; $user->invite_code_used = $inviteCode; $user->save(); \think\Log::info("邀请码绑定: 邀请人[{$inviterUserId}] -> 被邀请人[{$userId}] 邀请码[{$inviteCode}]"); // 触发分销业绩统计 $agent = new \addons\shopro\service\commission\Agent($userId); $agent->createAsyncAgentUpgrade($userId); // 添加分销推广记录 \app\admin\model\shopro\commission\Log::add( $inviterUserId, 'share', ['user' => $user, 'type' => 'invite_code'] ); return [ 'code' => 1, 'msg' => '绑定成功', 'data' => $validateResult['data'] ]; } }