Aller au contenu

API Marketplace Mozaiq — v1

Contrat entre les sites Mozaiq (client : core/Marketplace.php) et la marketplace (serveur de référence : ../marketplace/). Le futur site vitrine / marketplace publique doit implémenter (ou réutiliser) ces routes.

URL de base : https://plugins.mozaiq-cms.fr/api/v1 (constante MQ_MARKETPLACE_URL, option marketplace_url).

En-têtes envoyés par chaque site

En-têteExemple
X-Mozaiq-SiteUUID du site (option('site_uuid'))
X-Mozaiq-Urlhttps://boutique.fr
X-Mozaiq-Version1.0.0
X-Mozaiq-Typesite · shop · hybrid
X-Mozaiq-Php8.3.6
AuthorizationBearer <jeton> (optionnel, compte marketplace lié)

Routes

GET /catalog

Paramètres : type (plugin|theme), q, category, sort (popular|new|rating|free), site_type, page, per_page.

{ "items": [ { "slug": "stripe-payments", "type": "plugin", "name": "…", "description": "…", "version": "1.0.0",
    "author": "…", "category": "paiement", "icon": "card", "color": "linear-gradient(…)", "price": 0, "currency": "EUR",
    "rating": 4.9, "reviews": 322, "downloads": 21400, "verified": true, "scope": ["shop","hybrid"],
    "requires": "1.0.0", "requires_php": "8.1", "buy_url": null, "updated_at": "…" } ],
  "total": 5, "page": 1, "pages": 1,
  "categories": [ { "slug": "paiement", "name": "Paiement", "count": 1 } ] }

GET /packages/{slug}

Détail + long_description + versions[] (version, changelog, requires, size, sha256, created_at).

GET /packages/{slug}/download?license=…&core=1.0.0

Renvoie l’archive application/zip de la dernière version compatible (X-Package-Sha256). Erreurs : 402 licence requise/invalide (buy_url), 404, 409 aucune version compatible.

L’archive contient un dossier <slug>/ avec plugin.json ou theme.json à sa racine.

POST /updates

{ "core": "1.0.0", "php": "8.3", "site": "uuid", "url": "https://…",
  "packages": [ { "slug": "google-analytics", "type": "plugin", "version": "1.2.0", "license": "" } ] }

Réponse :

{ "updates": [ { "slug": "google-analytics", "type": "plugin", "version": "1.3.0", "name": "…", "requires_license": false } ],
  "core": { "latest": "1.0.0", "update": false } }

Le CMS met la réponse en cache 12 h (bouton « Vérifier les mises à jour » pour forcer).

POST /sites

Enregistrement / ping d’un site : { site, url, name, type, core, php, language } → { "ok": true }.

GET /licenses/verify?key=…&slug=… → { "valid": true }

GET /core/latest → { "version": "1.0.0", "download": "…/mozaiq-latest.zip" }

POST /developer/packages (développeurs)

Authorization: Bearer <jeton développeur> + multipart package=@extension.zip. Valide le manifeste, vérifie la propriété du slug et que la version est supérieure, stocke l’archive, calcule le SHA-256. 201 { "ok": true, "published": { "slug", "version", "type" } } · 401 jeton invalide · 422 archive/manifeste invalide.

Côté CLI : php bin/mozaiq plugin:publish <slug> --token=….

Champs marketplace dans le manifeste

"marketplace": { "category": "paiement", "price": 9, "currency": "EUR", "color": "#635bff",
                 "long_description": "…", "changelog": "…" }

Modèle de données du serveur de référence

mk_developers, mk_packages, mk_versions, mk_licenses, mk_sites, mk_installs, mk_categories, mk_meta (voir marketplace/schema.sql).

À construire pour la marketplace publique (prochaine étape)

  • Comptes développeurs (inscription, génération de jeton, reversements)
  • Paiement des extensions (Stripe) → création de mk_licenses + e-mail de la clé
  • Pages produit, avis/notes, captures d’écran, recherche
  • Revue/modération des paquets avant publication (status = pending)
  • Signature des archives (en plus du SHA-256)