Skip to Content
最佳实践邀请码生成与校验

邀请码生成与校验

项目访问链接

https://zion.functorz.com/tool/AxQnl8elokL/WEB?code=c52vTEIOvin2j&ref=5316313

场景与目标

  • 目标:为每个用户生成唯一的邀请码,并当新用户输入该码时,系统自动识别邀请人并将其 ID 记录在受邀人的信息中,完成自动归因。
  • 适用场景:分销推广、拉新奖励计划、社区成员追踪、销售业绩归因。
  • 核心逻辑:生成随机字符串 -> 存入数据库并校验唯一性 -> 校验输入码 -> 更新受邀者的“邀请人”字段。

实现步骤

数据存储配置

首先,我们需要在数据库中建立追踪“谁邀请了谁”的关联结构。

  • 帐户表 (系统表):添加一个指向自身的一对多关系。
字段名类型备注
我的邀请人_id长整数通过建立“自关联”关系自动生成,记录邀请该用户的上级 ID。
  • 活动邀请码表:用于存储生成的凭证。
字段名类型备注
邀请码文本唯一的随机字符串(需勾选“唯一”)。
所属帐户_id长整数通过与 帐户 表建立关系自动生成,用于标记该码的所有者

逻辑与状态配置

我们需要配置两个核心行为流:一个用于生成邀请码,一个用于校验并绑定。

生成专属邀请码

该行为流确保每个用户拥有一个唯一的邀请码。由于随机字符串可能存在极低概率的碰撞,我们通过重试循环来确保存入数据库的唯一性。

  1. 定义变量:在行为流中创建布尔值变量 is_generated,作为是否成功生成的标记。

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

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

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

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

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

  1. 输出结果:循环结束后,查询当前用户的邀请码并返回结果。
数据库层面的“唯一”约束是最可靠的防重机制。通过将冲突处理设为“无”,配合循环,系统会自动“重试”直到存入一个不重复的码。

校验并绑定邀请码

该行为流用于验证输入码的有效性并建立永久的归因关系。

  1. 输入参数:定义 code (文本) 接收 UI 输入。
  2. 定义变量:定义 status (文本) 用于存储状态结果。

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

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

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

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

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

  1. 输出:将 status 返回给前端。

UI 搭建与交互配置

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

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

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

验证

第一步:生成邀请码(用户 1)

  1. 开启预览界面,在底部的 模拟登录 栏创建一个新用户​。
  2. 点击 “点击生成” 按钮。
  3. 预期结果​:后端循环逻辑执行。如果随机码冲突,系统会自动重试。最终页面变量会显示一个唯一的 8 位字符串(例如 77LmXr9j),并弹出“生成成功”的提示。

第二步:测试“禁止自邀”逻辑(用户 1)

  1. 仍然保持 用户 1 的登录状态,在输入框中输入刚才生成的邀请码(77LmXr9j)。
  2. 点击 “点击校验” 按钮。
  3. 预期结果​:系统识别出该码的 owner_account_id 与当前用户 ID 相同,触发“禁止自邀”分支。页面应弹出提示:“不能填写自己的邀请码。”

第三步:完成归因绑定(用户 2)

  1. 在模拟登录栏切换到 ​用户 2​。
  2. 输入用户 1 生成的邀请码(77LmXr9j),点击 ​**“点击校验”**​。
  3. 预期结果​:系统验证邀请码有效,自动更新数据库绑定关系,弹出提示:“校验通过。”
  4. 重复绑定检查​:再次点击“点击校验”,系统应识别出该用户已存在 referrer_id,弹出提示:“已绑定邀请人。”

第四步:无效输入测试(用户 3)

  1. 切换到 ​用户 3​。
  2. 在输入框中输入一个不存在的“假”代码(例如 ABC12345),点击 ​**“点击校验”**​。
  3. 预期结果​:数据库查询不到匹配 ID,触发“邀请码不存在”分支,弹出提示:“邀请码不存在。”

第五步:数据库终审

最后,回到 数据库 检查实际存储的数据记录:

  • activity_invite_code 表​:确认邀请码 77LmXr9j 存在,且其 owner_account_id 对应用户 1 的系统 ID。
  • account 表​:找到用户 2 的记录。其 referrer_id 字段应准确填入了用户 1 的 ID,且关联关系字段 referrer 已正确指向用户 1 的帐户。

Last updated on