Aller au contenu

API de licence personnalisée

Launch prend en charge Licentivo et les services de licence personnalisés. Choisissez un fournisseur pour toute la boutique dans Paramètres système → Système de licence.

Les produits à licence personnalisée utilisent le service de licence et le SDK du marchand. Launch gère les ventes, la confirmation des paiements, la synchronisation des achats et les demandes de livraison.

  1. Configurez séparément les connexions, les clés de signature et les correspondances de produits et d'offres pour sandbox et live. Vérifiez la connexion avant de publier les offres.
  2. Une connexion ayant des commandes ne peut pas être remplacée directement. Migrez les commandes avant de changer de fournisseur, puis republiez les offres.
  3. Vérifiez achats, renouvellements, changements d'offre, remboursements et reprise après incident dans l'environnement de test avant de publier la configuration de production.

Interfaces du service de licence du marchand

Ces quatre interfaces sont implémentées par le service de licence du marchand et appelées par le serveur Launch. N'envoyez pas ces requêtes à www.licentivo.com.

APIUsage
GET /launch/v1/capabilitiesDéclarer le protocole, la connexion, l'environnement et les types d'achat et de livraison pris en charge.
POST /launch/v1/eventsRecevoir l'instantané complet de l'achat et renvoyer un accusé après l'enregistrement durable de l'événement.
GET /launch/v1/events/{event_id}Consulter l'accusé de l'événement initial. Seul applied confirme que la modification de licence est terminée.
GET /launch/v1/entitlements/{entitlement_ref}/deliveryLire la livraison existante de la version actuelle de l'achat sans émettre une autre licence.

Les instantanés contiennent la version de l'achat, son état et ses dates de validité absolues ; valid_until=null indique un achat perpétuel. Un achat de base peut subsister après un remboursement : recalculez les droits à partir de l'instantané complet.

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"
}

Signatures et nouvelles tentatives

Utilisez une clé HMAC-SHA256 distincte d'au moins 32 octets aléatoires par connexion. Chaque requête contient l'identifiant de clé, un horodatage Unix en secondes, un nonce aléatoire et une signature. Vérifiez la signature, une fenêtre de 300 secondes et la protection contre la réutilisation du 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>

N'ajoutez pas de saut de ligne final aux données signées. X-Launch-Signature contient v1= puis la signature base64url sans remplissage. Le corps des requêtes GET est vide.

Les nouvelles tentatives conservent l'identifiant d'événement et le corps exact, avec un nouveau nonce. Après un délai dépassé, consultez l'événement initial. Une ancienne version ne doit pas remplacer une nouvelle ; 202 ne confirme pas la fin de l'attribution de licence.

Interfaces d'administration et client de Launch

Ces interfaces se trouvent sur le site Launch du marchand. Les administrateurs utilisent une session web et X-CSRF-Token. Les clients ne peuvent lire que leurs propres achats actuellement valides.

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

La livraison peut contenir une clé de licence, un lien d'activation HTTPS ou des instructions en texte brut. La synchronisation réussie ne remplace pas les contrôles d'autorisation du client à l'exécution.

Protocole complet et exemples · Télécharger OpenAPI · Exemple de récepteur Python

OpenAPI d'administration et client de Launch