自訂授權 API
Launch 支援 Licentivo 和自訂授權服務;在「系統設定 → 授權系統」選擇一個全站提供者。
自訂授權商品使用商家自己的授權服務和 SDK。Launch 負責銷售、付款確認、購買狀態同步與交付查詢。
- 為 sandbox 和 live 分別設定連線、簽章金鑰及商品與方案對應,檢查連線後再發布方案。
- 已有訂單的連線不能直接替換;切換提供者需要先遷移訂單,並重新發布方案。
- 先在測試環境驗收購買、續費、升級、退款和故障復原,再發布正式設定。
商家授權服務介面
以下四個介面由商家授權服務實作,由 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 表示永久購買。退款後可能仍保留基礎購買,接收端必須依完整快照重新計算授權。
{
"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 防重播。
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/connections | GET/POST |
PUT /api/v1/admin/licensing/connections/{id} | POST /api/v1/admin/licensing/connections/{id}/check |
PUT /api/v1/admin/products/{id}/licensing | environment + connection_id + mappings |
GET /api/v1/me/products/{id}/delivery?environment=sandbox | pending / ready / unavailable |
交付可以是授權金鑰、HTTPS 啟用連結或純文字說明;同步成功不取代用戶端執行時的授權檢查。