开发文档

鲜花交易系统与鲜花交易平台(PHP / ThinkPHP 版)的研发记录:功能上线、架构演进与实施经验,按发布日期持续更新。

换服务器、重装、换码:把运维动作做成产品功能

三个高频请求

授权体系上线后,客服收到的请求集中在三类:

请求原因
"系统提示未激活"换了服务器 / 重装了系统
"我升级了套餐,为什么功能没开"授权码没换
"我要迁到云上"实例要重新绑定

早期这些都要厂商手工改数据库,一次十分钟,但积累起来就是交付成本的漏洞——而且容易改错。

授权码真源从配置文件搬进数据库

最初授权码存在客户服务器的 .env 里。问题很明显:

  • 换码要改文件并重启,客户运维必须会 Linux;
  • 同一个文件里还放着数据库密码,改授权码有误伤风险;
  • 厂商无法确认客户当前到底用的哪个码。

改法是:授权码存数据库,客户在后台自助激活。.env 只保留基础设施配置,不再承载授权。

自助激活的流程是:后台「授权」页输入授权码 → 服务端校验签名与有效期 → 写入数据库 → 向厂商上报实例登记 → 返回激活结果。

这套流程还有一个副作用是好的:它把"当前授权状态"变成了客户后台可见的页面,客户自己就能看到版本、到期日、模块清单,减少一半咨询。

实例绑定:一定要有解绑

绑定本身不难,难的是解绑的产品设计。真实场景里绑定关系会变:

  • 客户换机器:旧实例失效,新实例需要绑定;
  • 客户重装系统:实例标识可能变化,但机器没变;
  • 客户重签(换套餐):授权码变了,绑定关系要跟着迁移。

所以「重新签发(换码)」和「实例改绑」必须成对提供:

  1. 厂商侧重签生成新授权码,同时保留与新码的绑定关系;
  2. 客户侧用新码激活时,如果检测到"码与实例不匹配",给出明确提示:"该授权码已绑定其它实例,请联系服务商改绑";
  3. 厂商侧一键改绑到新实例,客户重试即成功。

第 2 步的提示非常关键:如果只提示"激活失败",客户会以为是码错了,反复输入。

一个踩过的坑

重签之后,客户在同一台机器上激活失败。原因是旧码绑定的是"码 + 实例",新码没有继承实例关系,又被判定为"首次激活需要空闲配额",而配额已满。

修复思路是把绑定关系挂在实例上,而不是挂在码上:一个实例同一时刻只能有一个有效授权码,换码时更新该实例的当前码,而不是新建一条绑定。这样"换码"就退化成一次更新操作,不会与配额校验冲突。

为什么值得做成功能

把这三个动作做成产品功能,收益不在技术,而在交付模型:

  • 客户自己能在十分钟内完成迁移,不必等厂商上班;
  • 厂商侧只保留"重签/改绑"这类必须审慎的动作;
  • 所有动作都有记录,出现争议可查。

一套要卖给几十上百家客户的产品,任何需要厂商手工介入的环节,都是规模化交付的天花板。

本文属于「开发文档」系列,记录鲜花交易系统(PHP + ThinkPHP 8 + MySQL 8)的实际研发进展。想了解功能清单与报价,可前往系统报价或联系我们。