开通实际要做六件事
客户在官网填完手机号验证码,点"注册开通"之后,系统需要完成:
- 创建租户记录(租户名、短码、形态、状态);
- 建立"域名/DNS 映射"(租户用子域还是自有域名);
- 在租户内创建首个超级管理员(含初始角色);
- 生成试用授权(30 天、能力清单);
- 向厂商侧登记(授权单 + 实例关系);
- 初始化该租户的默认数据(字典、菜单、必要配置)。
第 6 步最容易被忽略:新租户登录后如果菜单是空的,客户会认为"系统没装好"。所以租户初始化必须自带一份可用的菜单与权限种子。
为什么授权要走厂商侧
有人会问:试用授权为什么不让平台端自己发?
因为授权是整个产品体系的一部分:它决定了客户能用哪些模块、什么时候到期、后续怎么转付费。让平台端自己发授权,等于授权数据有第二个真源,长期一定会不一致。
所以链路是单向的:平台端提交开通请求 → 厂商侧生成授权 → 客户端心跳拉取 → 客户后台显示授权状态。平台端只读授权结果,不改。
这条单向性还有一个好处:客户续费或加购模块时,动作落在同一个地方(厂商侧),不需要在多个系统里同步。
幂等:按钮被点两次不能开两个租户
注册接口天然会被重复提交(网络慢、用户着急连点)。防御方式有三层:
- 业务键唯一:手机号 + 租户短码组合唯一;
- 请求幂等键:前端每次进入注册页生成一个请求号,服务端按请求号去重;
- 状态机:租户状态从"待开通"到"已开通"只能前进一次,重复请求返回已有结果而不是新建。
其中第三层最有效:它让"重复请求"变成一个可解释的返回,而不是一个报错。
排障:一次"注册成功但打不开"
真实出现过:注册接口返回成功,后台也能看到租户,但客户访问子域是 404 或空白。
排查顺序是从外到内:
- 域名能否解析(DNS 是否已添加);
- 解析是否指向正确的站点(通配子域是否生效);
- 站点能否正确解析出租户(Host → 租户映射);
- 租户是否有可登录的管理员。
结论是第 1 步:新子域没有解析记录。问题不在注册逻辑,而在"注册成功后要做但没做的事"。
修复方式有两个方向:一是注册时把域名配置纳入必做项并给出明确提示;二是在后台租户详情页展示"域名状态"(已生效 / 待配置)。我们两个都做了——把隐性前置条件变成可见状态,比写在文档里有效得多。
试用期到期的设计
试用 30 天到期后,不能直接锁死:
- 允许登录与查看数据;
- 禁止新增业务数据;
- 后台顶部明确显示剩余天数与升级入口;
- 到期前 7 天开始提醒。
这样客户不会因为"突然不能用"而流失,转化路径也更自然。
小结
自助开通的价值是把销售流程变成产品流程,但它的技术难点不在注册表单,而在跨端链路的完整性与可解释性:每一步都要有状态、有日志、有可见的失败原因。否则"打不开"三个字会让支持团队查一整天。