a4-邀请解锁会员功能

黄鹏宇 494 2022-04-03

image.png

需求说明

  1. 用户有两种角色,会员or非会员
  2. 成为会员的途径:
    1. 分享给好友,并且好友点击该链接
    2. 点击好友分享的链接,并且该好友有解锁名额
    3. 别的渠道
  3. 每个人最多给3个人解锁

设计

记邀请者为A,被邀请者为B

数据库设计

解锁记录vip_unlock_event

字段名类型备注
openidvarchar本次会被解锁的用户openid
relate_openidvarchar关联用户的openid,关联用户不一定会被解锁
CREATE_DATEDateTime时间

开通会员记录vip_record

字段名类型备注
openidvarcharopenid
typevarchar开通类型:被邀请,邀请,付费
expire_dateint会员到期的时间戳
CREATE_DATEDateTime时间

流程

1. 生成分享链接

用户ID

2. 插入数据的时机

  1. 当检测用户B打开小程序的路径为 /empty/empty?invite=jwt时,
    1. 如果B不为会员,则插入一条A邀请B的记录
    2. 如果B为会员,不插入邀请记录(防止占用名额)
  2. 如果A不为会员,则插入A开通会员记录(类型:邀请),且插入一条B邀请A的记录(占用B一个邀请名额)
  3. 如果B不为会员,且A的邀请记录<3,则插入B开通会员记录(类型:被邀请)
  4. 返回状态:正常解锁、B本身是会员、A无名额

0表示:非会员;未满;不新增;

不可能存在的状态 01xx 、 xx01 七种


用户AA额度用户BB额度A解锁别人B解锁别人会员A会员BB的返回值
00001111你和他都开通了会员
00100110你为他解锁了
00110000你没额度了
10001001你已解锁
10100000你和他都已开通,无需解锁
10110000你和他都已开通,无需解锁
11000000他额度满了,没法给你解锁;他已经是会员了,无需你帮他解锁
11100000你和他都已开通,无需解锁
11110000你和他都已开通,无需解锁

A解锁别人 = B开通会员 = 用户B不是会员 && A有额度

B解锁别人 = A开通会员 = 用户A不是会员 && B有额度

3. 怎么判断是否为会员

开通会员记录 > 0 且 MAX(expire_date) > NOW()

接口

  1. 获取邀请链接
    genInviteUrl
  2. 判断角色vip状态
  • url: /user/auth/info
  • resp:
{
	"role" : "user | vip",
	"expireDate" : "时间戳",
	"unlockCount" : "0"
}
  1. 判断链接
  • url : /user/invite/check
  • resp:
    error("非有效链接")
{
	"othersName" : "邀请者昵称",
}
  1. 接受邀请
  • url : /user/invite/accept
  • resp:
{
	"success":true,
	"msg" : "成功解锁",
}

{
	"success":false,
	"msg" : "抱歉,对方的解锁额度已经用完。你可以邀请其他人已完成解锁",
}