Backend e-commerce headless open-source en PHP 8.2+.
Hypocommerce CMS fournit une API REST + GraphQL pour catalogue, CMS, checkout, paiements et opérations admin.
Version cible de cette release: 1.1.0.
- Fonctionnalités
- Architecture
- Quickstart (5 min)
- API
- Sécurité
- Qualité et validation
- Contribution
- Release et versioning
- Roadmap
- Licence et gouvernance
- Documentation
- CMS headless: pages, blog, FAQ, contenus légaux, menus/navigation.
- E-commerce: produits, catégories, panier, checkout, coupons, commandes.
- Paiement: Stripe/PayPal via orchestrateur + webhooks idempotents.
- Admin: endpoints sécurisés (Bearer JWT + CSRF), audit logs, rate limiting.
- Extensibilité: plugins/providers (paiement, shipping) et hooks applicatifs.
src/Domain: modèle métier.src/Application: cas d’usage.src/Infrastructure: HTTP, persistance PDO, sécurité, logging, intégrations.public: front controller HTTP (public/index.php).config+migrations: schéma et migrations versionnées.
Référence détaillée: docs/architecture.md.
- PHP
>= 8.2 - MySQL
>= 8 - Composer
composer install
cp .env.example .envPowerShell:
composer install
Copy-Item .env.example .envDans .env, vérifier au minimum:
APP_ENV=devAPP_URL=http://localhost:8000APP_VERSION=1.1.0APP_SECRET(fort)JWT_SECRET(fort)DB_*
php bin/migrate.php --create-db
php bin/migrate_versioned.phpphp -S localhost:8000 -t publicHealthcheck:
curl http://localhost:8000/healthGraphQL:
curl -X POST http://localhost:8000/graphql \
-H "Content-Type: application/json" \
-d "{\"query\":\"{ health }\"}"REST:
curl http://localhost:8000/api/v1/products- REST base (catalogue/CMS/admin):
http://localhost:8000/api/v1 - REST storefront (Next.js):
http://localhost:8000/(/auth/*,/checkout/*,/account/*,/payments/*) - GraphQL:
http://localhost:8000/graphql
- Public: pas d’auth sur endpoints lecture.
- Storefront client:
- En REST:
Authorization: Bearer <customer_jwt>surGET /account/orders(tokén issu de/auth/loginou/auth/register). - En GraphQL: argument
customerTokensur les queries/mutations concernées.
- En REST:
- Admin REST:
Authorization: Bearer <admin_jwt>+X-CSRF-Token. - GraphQL admin: argument
adminTokensur mutations/queries admin.
Le fallback legacy X-Admin-Token est désactivé par défaut (ALLOW_LEGACY_ADMIN_TOKEN=0).
Liste produits:
curl http://localhost:8000/api/v1/productsMutation GraphQL checkout:
curl -X POST http://localhost:8000/graphql \
-H "Content-Type: application/json" \
-d "{\"query\":\"mutation($sid:String!,$email:String!,$phone:String!,$fn:String!,$ln:String!,$sl1:String!,$sc:String!,$sp:String!,$sco:String!,$bl1:String!,$bc:String!,$bp:String!,$bco:String!,$pm:String!){ checkout(sessionId:$sid,contactEmail:$email,contactPhone:$phone,contactFirstName:$fn,contactLastName:$ln,shippingLine1:$sl1,shippingCity:$sc,shippingPostcode:$sp,shippingCountry:$sco,billingLine1:$bl1,billingCity:$bc,billingPostcode:$bp,billingCountry:$bco,paymentMethod:$pm){ id number status }}\",\"variables\":{\"sid\":\"demo-session\",\"email\":\"demo@example.com\",\"phone\":\"0102030405\",\"fn\":\"Demo\",\"ln\":\"User\",\"sl1\":\"1 rue test\",\"sc\":\"Paris\",\"sp\":\"75001\",\"sco\":\"FR\",\"bl1\":\"1 rue test\",\"bc\":\"Paris\",\"bp\":\"75001\",\"bco\":\"FR\",\"pm\":\"stripe\"}}"Schéma complet: docs/graphql-schema.md.
Enregistrer un client:
curl -X POST http://localhost:8000/auth/register \
-H "Content-Type: application/json" \
-d '{"email":"demo@example.com","password":"Passw0rd!123"}'Connexion client:
curl -X POST http://localhost:8000/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"demo@example.com","password":"Passw0rd!123"}'Quotation panier:
curl -X POST http://localhost:8000/checkout/quote \
-H "Content-Type: application/json" \
-d '{"sessionId":"demo-session"}'Création d’une commande (sans démarrer la session de paiement):
curl -X POST http://localhost:8000/checkout/orders \
-H "Content-Type: application/json" \
-d '{"sessionId":"demo-session","paymentMethod":"stripe"}'- Headers HTTP de sécurité appliqués au niveau kernel (CSP, XFO, HSTS sur HTTPS).
- JWT signé HMAC (
HS256) avec vérifications strictes. - CSRF requis sur endpoints admin mutation.
- Webhooks paiement vérifiés + idempotence.
- Endpoint
/health: détails d’erreur DB masqués en production.
APP_SECRETJWT_SECRETAPP_VERSIONADMIN_UI_REVIEW_ALLOWED(laisser0en production)ALLOW_LEGACY_ADMIN_TOKEN(laisser0en production)
- CMS / contenu:
- Parametres generaux via table
site_settings(navigation, tracking, SEO global). - Medias sous
/uploads/cms/(stockes dansvar/uploadscote backend).
- Parametres generaux via table
- Plugins:
- Paiement: Stripe/PayPal activables via admin (
/admin> Settings > Payments). - Shipping: carriers activables via admin (
/admin> Settings > Shipping). - Plugins generiques: liste et activation via
/admin> Plugins.
- Paiement: Stripe/PayPal activables via admin (
Pour des besoins specifiques projet, preferer l'ajout de plugins ou de hooks (docs/extensibility.md) plutot que des forks lourds du core.
Politique sécurité: SECURITY.md.
Commandes principales:
composer test
composer analyse
composer format:check
composer security:audit
php bin/preflight_prod.php
php bin/release_check.phpMigrations:
php bin/migrate_versioned.php
php bin/migrate_versioned.php --baseline-currentAvant PR, exécuter au minimum:
composer test
composer analyse
composer format:check
composer security:auditRéférences:
CONTRIBUTING.mdCODE_OF_CONDUCT.mdGOVERNANCE.md
- SemVer:
docs/versioning-policy.md - Changelog:
CHANGELOG.md - Process release:
docs/release-process.md - Valeur runtime exposée:
APP_VERSION(fichiers.env*)
Checklist recommandée avant tag:
- Tests + analyse + preflight passants.
CHANGELOG.mdà jour.APP_VERSIONalignée avec la release.- Smoke API (
/health, REST clé, GraphQL clé).
- Stabilisation API publique et plugins.
- Renforcement couverture tests critiques.
- Observabilité et sécurité opérationnelle.
Détail: ROADMAP.md.
- Licence:
LICENSE - Sécurité:
SECURITY.md - Gouvernance:
GOVERNANCE.md
- Index:
docs/README.md - Architecture:
docs/architecture.md - Déploiement:
docs/deployment.md - Extensibilité:
docs/extensibility.md - Versioning:
docs/versioning-policy.md - Support:
docs/support.md