ARTICLE · 1074528
卖本地 AI 工具,先把激活、校验和换机讲清楚
卖本地 AI 工具,先把激活、校验和换机讲清楚用户付过钱,在第二台电脑输入授权码,软件该不该打开?如果你卖的是一个激活名额,单看“授权码有效”还回答不了这个问题。 Lemon Squeezy 的校验接口有个容易漏掉的参数:instance_id。不传它,校验的是授权码;传入它,才会校验对应实例。省略时返回的 instance 是空值。校验规范 我的判断是:本地 AI 工具开始收费前,至少要把首次激活、再次启动、换机三条路径做完整。下面用一个名额、两次安装,把这件事走完。所有编号与状态账本均为公开文档推演,没有发生真实购买或接口调用。 
Lemon Squeezy 允许产品或变体生成授权码,并配置激活上限;买家可在订单邮件和订单页面取得授权码。这提供了按名额区分套餐的机制,不是收入或转化效果的证明。授权生成指南 激活请求使用 /v1/licenses/activate,输入 license_key 和 instance_name,成功响应里有新实例的信息。后一个参数只是实例标签,不能当作平台自动识别出来的硬件身份。激活规范 我会让安装程序保存返回的实例标识,并核对响应中的产品与变体是否属于这款软件。以后启动时走校验,不要每启动一次就新建一个激活实例。 
假设授权码用 K 表示,上限为1,开始占用0。A、B代表两份安装;IA、IB是为阅读方便写的实例标识占位符,实际实现必须使用接口返回值。每行都按“输入/接口/占用/提示”展开。 A首次开通:K+标签“安装A”/activate成功,保存IA/0→1/“本机已激活,名额1/1。” A再次启动:K+IA/validate通过/仍为1/“授权校验通过,可以使用。” B尝试开通:K+标签“安装B”/activate因名额已满而失败/仍为1/“名额已满,请先停用旧安装。”此时不为B开放受限功能。 A申请停用:K+IA/deactivate成功/1→0/“旧安装已停用,名额已释放。” B重新开通:K+标签“安装B”/activate成功,保存IB/0→1/“新安装已激活。” 第四步对应的官方接口是 /v1/licenses/deactivate,需要授权码和激活时返回的实例标识。它处理具体实例;用户仍保有授权码,才能继续第五步。停用规范 这份表的前提是每步都已确认成功,且没有其他并发激活。超时不能直接写“名额已释放”;换机页面要保留“停用结果待确认”,待确认后再继续。若A已丢失或无法启动,则需要另设经身份核验的恢复入口,不能要求用户完成做不到的本机操作。 
把第三行改一下:B不申请激活,只拿K去validate,而且不传instance_id。即使得到valid为真,也只证明这份授权码通过校验,没有证明B对应的实例已被激活,也没有为B创建新的实例。 因此我会把开通条件写成:首次使用拿到成功激活结果与实例标识;后续使用校验这份实例。不能用“码还有效”替代这两个条件。 也别把上述账本理解成硬件防复制保证。把IA保存到本地,并不会自动阻止别人复制文件。设备关联、防篡改与离线策略仍是软件作者需要设计的部分。 
一个可直接改用的套餐说明是:“本套餐允许1个激活实例;换机前先停用旧安装,再激活新安装;旧安装不可用时,通过恢复入口处理。”这比一句“支持一台电脑”更接近可执行的交付规则。 对应本例,完成后的回执可以是:“安装A已停用;安装B已激活;当前占用1/1。”若停用未确认,回执就停在那一步,不能提前宣布换机完成。 若工具调用的是你付费的在线模型,还要单独说明调用额度。一个安装名额不等于无限推理预算。完全离线运行时,也不能承诺远端停用会立即让离线副本失效;宽限多久、何时重新联网检查,都应成为明确的产品选择。 
我的取舍是:先把一个名额的开通与迁移交付清楚,再增加多名额套餐。收费页上的每个权益,都应该能在软件里找到对应的状态和失败提示。
付款后,产品还要接住一次激活

单名额状态表:从安装 A 到安装 B

授权码有效,为什么还不能放行 B

把换机回执写进产品,而不是留给客服

