邀请码生成与校验
项目访问链接
https://zion.functorz.com/tool/AxQnl8elokL/WEB?code=c52vTEIOvin2j&ref=5316313
场景与目标
- 目标:为每个用户生成唯一的邀请码,并当新用户输入该码时,系统自动识别邀请人并将其 ID 记录在受邀人的信息中,完成自动归因。
- 适用场景:分销推广、拉新奖励计划、社区成员追踪、销售业绩归因。
- 核心逻辑:生成随机字符串 -> 存入数据库并校验唯一性 -> 校验输入码 -> 更新受邀者的“邀请人”字段。
实现步骤
数据存储配置
首先,我们需要在数据库中建立追踪“谁邀请了谁”的关联结构。
- 帐户表 (
系统表):添加一个指向自身的一对多关系。
| 字段名 | 类型 | 备注 |
|---|---|---|
| 我的邀请人_id | 长整数 | 通过建立“自关联”关系自动生成,记录邀请该用户的上级 ID。 |
- 活动邀请码表:用于存储生成的凭证。
| 字段名 | 类型 | 备注 |
|---|---|---|
| 邀请码 | 文本 | 唯一的随机字符串(需勾选“唯一”)。 |
| 所属帐户_id | 长整数 | 通过与 帐户 表建立关系自动生成,用于标记该码的所有者 |

逻辑与状态配置
我们需要配置两个核心行为流:一个用于生成邀请码,一个用于校验并绑定。
生成专属邀请码
该行为流确保每个用户拥有一个唯一的邀请码。由于随机字符串可能存在极低概率的碰撞,我们通过重试循环来确保存入数据库的唯一性。
- 定义变量:在行为流中创建布尔值变量
is_generated,作为是否成功生成的标记。

- 获取 ID:添加“获取 ID”节点获取
current_account_id。 - 设置变量初值:将
is_generated初始值设为false。

- 添加循环:数据源使用
SEQUENCE(0, 3, 1)公式,生成数组[0, 1, 2],这意味着逻辑最多重试 3 次(该公式生成指定范围内(包含头、不包含尾)的数组序列)。

- 条件判断(循环控制):在循环内部,检查
is_generated是否为false。- 为假:代表尚未生成,进入生成分支。
- 为真:代表已成功生成,跳过本次循环。

- 添加数据:在
活动邀请码表中插入记录。- 邀请码:绑定
RANDOM_STRING公式生成随机码(根据需求配置参数)。 - 所属帐户_id:绑定
current_account_id。 - 冲突时:行为类型设为 “无”。
- 邀请码:绑定

- 校验成功:添加条件节点检查刚才“添加数据”节点的返回 ID 是否 “非空”。
- 如果 ID 存在,说明数据库接受了该唯一码。使用“设置变量”节点将
is_generated改为true。 - 如果 ID 为空(发生冲突),
is_generated保持false,循环将继续尝试下一次。
- 如果 ID 存在,说明数据库接受了该唯一码。使用“设置变量”节点将


- 输出结果:循环结束后,查询当前用户的邀请码并返回结果。
数据库层面的“唯一”约束是最可靠的防重机制。通过将冲突处理设为“无”,配合循环,系统会自动“重试”直到存入一个不重复的码。
校验并绑定邀请码
该行为流用于验证输入码的有效性并建立永久的归因关系。
- 输入参数:定义
code(文本) 接收 UI 输入。 - 定义变量:定义
status(文本) 用于存储状态结果。

- 身份核验:通过“获取 ID”节点及“获取当前用户数据”查询节点,获取当前登录人的详细信息。
- 前置判断(是否已绑定):判断当前用户的
我的邀请人_id是否 “非空”。- 非空:说明已绑定过,设置
status为“已绑定邀请人”并直接输出。
- 非空:说明已绑定过,设置

- 查询邀请码:在
活动邀请码表中筛选邀请码等于输入参数code的记录。

- 多分支校验:
- 分支 1(无效):如果查询结果 ID “为空”,设置
status为“邀请码不存在”。
- 分支 1(无效):如果查询结果 ID “为空”,设置

- 分支 2(防作弊):对比邀请码所属人的 ID 是否等于当前用户 ID。如果一致,设置
status为“不能填写自己的邀请码”。

- 分支 3(有效):若以上皆不满足,设置
status为“校验通过”。
- 更新归因:在“有效”分支下,使用“更新数据”节点更新
帐户表。- 找到当前用户记录,将
我的邀请人_id设置为邀请码所属人的 ID。
- 找到当前用户记录,将

- 输出:将
status返回给前端。

UI 搭建与交互配置
- 页面变量:创建
invite_code(文本),用于临时存放生成的邀请码。 - 文本展示:放置一个文本组件展示“我的邀请码”,内容绑定到页面变量
invite_code。

- 生成按钮:
- 行为:点击时 -> 调用“生成邀请码”行为流。
- 成功时:
- “显示提示”:标题绑定行为流返回的
result。 - “设置页面变量”:将返回的
code赋值给页面变量invite_code。
- “显示提示”:标题绑定行为流返回的

- 校验区域:
- 添加“输入框”供用户填写。
- 添加“按钮”,点击时调用“校验邀请码”行为流,参数
code绑定输入框的值。 - 成功时:显示提示,标题绑定返回的
status。

验证
第一步:生成邀请码(用户 1)
- 开启预览界面,在底部的 模拟登录 栏创建一个新用户。
- 点击 “点击生成” 按钮。
- 预期结果:后端循环逻辑执行。如果随机码冲突,系统会自动重试。最终页面变量会显示一个唯一的 8 位字符串(例如
77LmXr9j),并弹出“生成成功”的提示。
第二步:测试“禁止自邀”逻辑(用户 1)
- 仍然保持 用户 1 的登录状态,在输入框中输入刚才生成的邀请码(
77LmXr9j)。 - 点击 “点击校验” 按钮。
- 预期结果:系统识别出该码的
owner_account_id与当前用户 ID 相同,触发“禁止自邀”分支。页面应弹出提示:“不能填写自己的邀请码。”
第三步:完成归因绑定(用户 2)
- 在模拟登录栏切换到 用户 2。
- 输入用户 1 生成的邀请码(
77LmXr9j),点击 **“点击校验”**。 - 预期结果:系统验证邀请码有效,自动更新数据库绑定关系,弹出提示:“校验通过。”
- 重复绑定检查:再次点击“点击校验”,系统应识别出该用户已存在
referrer_id,弹出提示:“已绑定邀请人。”
第四步:无效输入测试(用户 3)
- 切换到 用户 3。
- 在输入框中输入一个不存在的“假”代码(例如
ABC12345),点击 **“点击校验”**。 - 预期结果:数据库查询不到匹配 ID,触发“邀请码不存在”分支,弹出提示:“邀请码不存在。”
第五步:数据库终审
最后,回到 数据库 检查实际存储的数据记录:
-
activity_invite_code表:确认邀请码77LmXr9j存在,且其owner_account_id对应用户 1 的系统 ID。 -
account表:找到用户 2 的记录。其referrer_id字段应准确填入了用户 1 的 ID,且关联关系字段referrer已正确指向用户 1 的帐户。


Last updated on