# Ride & Beer — V23 : panier et connexion Stripe (mode test)

## Statut : prêt à configurer, PAS EN PRODUCTION

Seules `panier.html`, `confirmation.html`, la CSS du panier et les fichiers de documentation ont été modifiés par rapport à V22. Accueil, été, hiver et snack sont inchangés.

### Ce que verra le client

- À payer aujourd’hui : **0 €**. Stripe enregistre la carte, sans paiement ni blocage de montant.
- Le règlement de la location est prévu au **retour du matériel**, au magasin, en **CB ou espèces uniquement**.
- Le tarif peut changer si la durée ou la gamme est modifiée avec accord du client.
- Annulation gratuite **jusqu’à H-48**.
- La carte enregistrée est destinée **au seul cas de non-présentation** (pas aux modifications tarifaires, ni automatiquement à une annulation tardive). Tout futur débit nécessite une décision côté back-office, la vérification des conditions légales et peut être refusé par la banque.

## Comment connecter TON compte Stripe

1. Mettre le site sous un **nom de domaine HTTPS** sur un hébergement OVH avec **PHP 8.1+**, les extensions `curl` et `pdo_sqlite`.
2. Sur Stripe : ouvrir le **mode test**, puis **Développeurs > Clés API**. Récupérer la **clé secrète `sk_test_...`** (ne pas l'envoyer par e-mail ni dans une conversation).
3. Par SFTP, dupliquer `api/_config.example.php` en **`api/_config.php`** sur TON serveur. Modifier `stripe_secret_key` et `app_url` (l'URL réelle, sans slash terminal). Le fichier est bloqué côté HTTP par le `.htaccess` livré, mais il est préférable de conserver les secrets en dehors du répertoire public si OVH le permet.
4. Dans Stripe, **Workbench / Développeurs > Webhooks > Ajouter une destination / un endpoint**. Destination HTTPS exacte : `https://TON-DOMAINE/api/stripe-webhook.php`. Choisir `checkout.session.completed` et copier **`whsec_...`** dans `stripe_webhook_secret` du fichier précédent.
5. Vérifier les droits d'écriture PHP du dossier `private/` : la base SQLite sert à mémoriser le dossier de réservation et les IDs Stripe, jamais les numéros de carte.
6. Faire un panier avec des **dates futures**, renseigner les coordonnées, accepter les deux cases, cliquer **« Enregistrer ma carte via Stripe · 0 € »**. En mode test, utiliser une **carte de test Stripe**, jamais sa vraie carte.
7. Dans Stripe > Événements / Webhooks, contrôler la livraison de `checkout.session.completed`. Le dossier en base passe à `card_saved_pending_stock`. C'est **un enregistrement de garantie**, PAS une réservation confirmée ni un prélèvement.

## Important : configuration sûre avant mise en ligne

- Ne PAS basculer en `sk_live_...` à ce stade. `allow_live=false`, `legal_cgv_ready=false` et `stock_engine_ready=false` doivent rester à `false` jusqu'à validation finale.
- Les CGV **V1 septembre 2026**, jointes, ne précisent pas le mécanisme de carte enregistrée. La clause de garantie et le consentement à un paiement futur doivent être validés, puis la nouvelle version doit remplacer le PDF.
- La clause CGV §35 prévoit un paiement dû pour annulation à moins de 48 h, alors que l'usage de la carte sur cette page V23 est limité au cas de non-présentation. **Si tu souhaites supprimer la facturation des annulations tardives, il faut modifier aussi les CGV.**
- Le médiateur de consommation est indiqué « à compléter » en §52 des CGV ; régulariser avant mise en production.
- L'intégration de stock (PWA), le délai minimum 24 h, les confirmations par courriel et l'état « présence en magasin » ne sont pas encore actifs. Aucun débit no-show automatique n'est implémenté.
- L'enregistrement de carte via `mode=setup` **n'est pas une préautorisation de X €**, donc aucune somme n'est immobilisée et un prélèvement ultérieur n'est jamais garanti. Le futur paiement nécessite un `PaymentIntent` distinct `off_session`, et doit pouvoir suivre les règles SCA / contestations.

## Fichiers

- `panier.html` : nouvelle information 0 € et consentements.
- `documents/CGV_Ride_and_Beer_V1_septembre_2026.pdf` : original fourni, **non modifié**.
- `api/_config.example.php` : modèle sans secrets.
- `api/start-stripe-setup.php` : création session Checkout mode setup.
- `api/stripe-webhook.php` : événement Stripe avec contrôle de signature.
- `confirmation.html` : retour et statut.
- `CGV_A_COMPLETER.md` : éléments contractuels à faire valider.

Aucune clé privée ne doit être intégrée dans les fichiers web publics, le JS ou les messages transmis à ChatGPT.
