跳到正文

自定义授权 API

Launch 支持 Licentivo 和自定义授权服务;在“系统设置 → 授权系统”选择一个全站提供方。

自定义授权商品使用商户自己的授权服务和 SDK。Launch 负责销售、付款确认、购买状态同步与交付查询。

  1. 为 sandbox 和 live 分别配置连接、签名密钥及商品与套餐映射,检查连接后再发布套餐。
  2. 已有订单的连接不能直接替换;切换提供方需要先迁移订单,并重新发布套餐。
  3. 先在测试环境验收购买、续费、升级、退款和故障恢复,再发布正式配置。

商户授权服务接口

以下四个接口由商户授权服务实现,由 Launch 服务端调用,不能向 www.licentivo.com 发送这些请求。

API用途
GET /launch/v1/capabilities声明协议、连接、环境以及支持的购买与交付类型。
POST /launch/v1/events接收完整购买快照,持久化事件后返回回执。
GET /launch/v1/events/{event_id}查询原事件回执,只有 applied 表示授权变更已完成。
GET /launch/v1/entitlements/{entitlement_ref}/delivery读取当前购买版本的已有交付,不能重复签发授权。

快照包含购买版本、当前状态和绝对有效期;valid_until 为 null 表示永久购买。退款后可能仍保留基础购买,接收方必须按完整快照重算授权。

POST /launch/v1/events · JSON
{
  "schema": "launch-external-licensing-v1",
  "event_id": "7bf84b91-2749-4b01-a6a7-bd527c488ee8",
  "connection_ref": "merchant-01-sandbox",
  "environment": "sandbox",
  "type": "entitlement.snapshot",
  "change_reason": "purchase",
  "account_ref": "customer_opaque_001",
  "entitlement_ref": "purchase_opaque_001",
  "launch_product_id": "c6dd463e-50f7-4b76-8239-0a8ec6fc304b",
  "launch_plan_version_id": "5459a073-9362-4b46-949d-9b0c5d84421a",
  "product_ref": "desktop-editor",
  "plan_ref": "professional-yearly-v1",
  "version": 1,
  "desired_state": "active",
  "valid_from": "2026-10-26T00:00:00Z",
  "valid_until": "2027-10-26T00:00:00Z"
}

签名与重试

每个连接使用独立的 HMAC-SHA256 密钥,至少包含 32 个随机字节。请求携带 key ID、Unix 秒时间戳、随机 nonce 和签名;接收方校验签名、300 秒时间窗及 nonce 防重放。

HMAC-SHA256 · UTF-8 canonical request
v1
<key_id>
<timestamp>
<nonce>
<UPPERCASE HTTP METHOD>
<encoded full path and raw query>
<lowercase SHA-256 of the exact request body>

签名输入末尾不加换行。X-Launch-Signature 为 v1= 加签名的无填充 base64url 编码;GET 正文为空。

重试保留事件编号和原始正文,每次使用新的 nonce。超时先查询原事件;旧版本不得覆盖新版本,不能把 202 当作授权已完成。

Launch 管理与客户接口

以下接口位于商户自己的 Launch 网站。管理员使用网站会话和 X-CSRF-Token;客户只能读取自己的当前有效购买。

PUT /api/v1/admin/licensing/provider{"provider":"custom_http"}
GET/POST /api/v1/admin/licensing/connectionsGET/POST
PUT /api/v1/admin/licensing/connections/{id}POST /api/v1/admin/licensing/connections/{id}/check
PUT /api/v1/admin/products/{id}/licensingenvironment + connection_id + mappings
GET /api/v1/me/products/{id}/delivery?environment=sandboxpending / ready / unavailable

交付可以是授权码、HTTPS 激活链接或纯文本说明;同步成功不代替客户端运行授权检查。

完整协议与示例 · OpenAPI 下载 · Python 接收端示例

Launch 管理与客户 OpenAPI