Lemon Squeezy 把托管结账、订阅、数字文件与软件许可证放在同一套 Merchant of Record(MoR)流程里。它能代开发者处理覆盖市场的销售税和买家账单,但不会自动解决“哪位用户、哪台设备、哪个商品版本应该获得什么权限”。软件团队真正需要设计的是订单、订阅、许可证密钥、激活实例与本地账号之间的映射。
先把许可证对象关系建完整
一次性商品可为许可证设置有效期与激活上限;订阅商品的密钥通常随订阅有效,并在订阅实际到期后失效。应用数据库至少应保存本地用户 ID、store_id、product_id、variant_id、订单或订阅 ID、license key ID 和当前授权状态。只保存用户输入的密钥字符串,会让换版本、退款和多设备管理都失去可靠依据。
激活接口不是一次“查真伪”
- 客户端把密钥交给自己的后端,不在应用里暴露后台 API 凭据。
- 后端调用 License API 的激活端点,提交
license_key与可识别设备的instance_name。 - 激活成功后保存返回的
instance.id;后续验证和停用都需要它。 - 除检查
valid外,还要比对store_id、product_id或variant_id,避免同一商店里其他商品的真密钥误解锁当前产品。
官方 License API 当前限速为每分钟 60 次请求,不适合让每个界面操作都实时调用。较稳妥的做法是本地缓存短期验证结果,并在启动、联网恢复或固定间隔重新验证。
换机与订阅取消要走不同状态
| 场景 | 平台侧事实 | 产品侧动作 |
|---|---|---|
| 达到激活上限 | activation_usage 已等于 activation_limit |
提示用户先停用旧实例,不要反复重试激活 |
| 更换设备 | 停用实例会减少已用激活数 | 用已保存的 instance.id 停用旧机,再激活新机 |
| 取消订阅 | 通常仍可使用到当前付费周期结束 | 标记“待到期”,不要在取消瞬间误收回已付权益 |
| 续费失败并到期 | 许可证可能从 active 转为 expired | 结束订阅权益,同时保留订单和审计记录 |
| 全局禁用密钥 | 当前需在 Dashboard 操作,停用接口只移除某个实例 | 区分“设备解绑”和“许可证封禁”,不要混成一个按钮 |
客户自助和服务端事件各负其责
Customer Portal 可让客户查看订单、管理订阅和下载内容。带签名的 Portal URL 当前有效期为 24 小时,因此用户点击“管理账单”时应从最新 Customer 或 Subscription 对象获取新链接,不宜永久写进数据库;无签名入口则会走邮件 magic link。若允许套餐升级或降级,还应在 Portal 设置里明确可切换的变体,并给用户提供返回产品的链接。
Webhook 接收端必须用 signing secret 校验请求头 X-Signature,保存事件后尽快返回 HTTP 200,再异步更新订单与权限。非 200 响应会触发自动重试,因此处理器要按事件或对象 ID 幂等。结账成功页只负责告诉用户“订单正在处理”,不能代替服务端发货。
上线前用一张矩阵验收收款与授权
- 一次性订单:首次激活、重复激活、达到设备上限、旧设备停用、新设备重新激活。
- 订阅订单:初购、续费成功、续费失败、主动取消但周期未结束、最终到期。
- 售后:全额或部分退款后,许可证与本地权益是否按既定政策变化。
- 恢复:Webhook 重复、乱序或短暂失败后,本地状态能否由平台对象重新校正。
2026-09-14 核对的官方价格页列出基础交易费 5% + 50 美分,国际交易、PayPal、订阅付款和部分提现还可能产生附加费。低客单价或国际客户较多时,应按真实支付方式计算净收入;可结合 独立开发者收款平台对比评估。访问地址:https://www.lemonsqueezy.com/
数据统计
相关导航
微信支付商户接入、API v3 配置与交易对账入口
Stripe
提供在线支付、订阅、税务和平台分账 API 的基础设施
Paydify
为企业提供稳定币收付、对账与风控接口的技术平台
Polar
为软件产品处理计费、数字交付与销售税的 MoR 平台
Paddle
为 SaaS 提供全球结账、订阅和税务处理的 MoR 平台
支付宝开放平台
支付宝应用接入、API 文档与沙箱联调入口
PayPro Global
面向软件与 SaaS 企业的 MoR、订阅和许可证销售平台
PayPal
提供钱包支付、发票、结账和商家跨境收款的服务
暂无评论...
