Options payantes & Paiements Stripe
NGZ Ads intègre un système de monétisation basé sur Stripe Checkout. Les utilisateurs peuvent acheter des options pour mettre en valeur leurs annonces ou améliorer leur profil. L'administration dispose d'un tableau de bord complet pour suivre les transactions et ajuster le catalogue.
Options disponibles
Deux catégories d'options sont proposées selon leur portée :
Options annonce (scope: ad)
| Clé | Nom par défaut | Effet |
|---|---|---|
featured_ad | Annonce à la une | Affichée dans le carrousel VIP de la page d'accueil et mise en avant dans les résultats |
urgent_ad | Annonce urgente | Badge « Urgent » visible sur la vignette et en page de détail |
bump_ad | Remonter l'annonce | Remonte l'annonce en tête des résultats comme si elle venait d'être publiée |
Options profil (scope: user)
| Clé | Nom par défaut | Effet |
|---|---|---|
premium_user | Profil Premium | Badge Premium visible sur le profil et les annonces de l'utilisateur |
vip_user | Profil VIP | Badge VIP + avantages visuels supplémentaires |
Le prix, la durée et l'activation de chaque option sont entièrement configurables depuis Administration → Paiements → Catalogue des options.
Configuration Stripe
1. Créer un compte Stripe
Rendez-vous sur stripe.com et créez votre compte (gratuit, sans abonnement).
2. Récupérer vos clés API
Dans le tableau de bord Stripe → Développeurs → Clés API :
| Clé | Description |
|---|---|
pk_test_… | Clé publique de test |
sk_test_… | Clé secrète de test |
pk_live_… | Clé publique de production |
sk_live_… | Clé secrète de production |
3. Saisir les clés dans NGZ Ads
Allez dans Administration → Paramètres → onglet Paiements :
| Champ | Valeur |
|---|---|
| Mode Stripe | test pendant le développement, live en production |
| Clé publique test | Votre pk_test_… |
| Clé secrète test | Votre sk_test_… |
| Secret webhook test | Votre whsec_… (voir section Webhook) |
| Taux de TVA (%) | Ex. 20 pour 20 %, 0 pour désactiver la TVA |
4. Informations de facturation
Complétez également la section INFOS SOCIÉTÉ (FACTURES) :
- Nom de la société — apparaît en en-tête des factures
- Email de facturation — e-mail de contact affiché sur les factures
- Adresse complète — adresse postale (multiligne accepté)
- N° TVA intracommunautaire — optionnel, imprimé sur les factures
- Logo société — chemin relatif à la racine du site (ex.
assets/img/logo.png)
Parcours utilisateur
Acheter une option annonce
- L'utilisateur ouvre l'une de ses annonces et clique sur Options payantes (bouton dans la barre d'actions).
- La page
/payment-options.php?type=ad&id=<id>s'affiche avec les offres disponibles et leurs tarifs. - Il choisit une option et clique sur Acheter.
- Il est redirigé vers Stripe Checkout (paiement sécurisé hébergé par Stripe).
- Après le paiement, Stripe redirige vers
/payment-success.php?session_id=…. - L'option est activée automatiquement et un e-mail de confirmation est envoyé à l'utilisateur.
Acheter une option profil
Le parcours est identique depuis : - Mon profil → Options payantes (bouton dans la section profil) - ou directement via /payment-options.php?type=user&id=<user_id>
Voir ses achats
La page /my-payments.php liste l'historique complet des paiements avec : - Le statut (Payé, En attente, Échoué, Remboursé) - La date et le montant TTC - Un lien pour télécharger la facture PDF
Annulation de paiement
Si l'utilisateur ferme la fenêtre Stripe sans payer, il est redirigé vers /payment-cancel.php. Son panier n'est pas débité. Il peut relancer un achat à tout moment.
Factures
Chaque paiement confirmé génère une facture téléchargeable via /invoice.php?id=<payment_id>.
La facture contient : - Logo et coordonnées de la société (configurables dans les paramètres) - Numéro de facture unique au format INV-YYYYMMDD-XXXXX - Coordonnées du client (nom, e-mail, pays) - Détail de l'option achetée avec durée - Sous-total HT, TVA et montant TTC - Référence de transaction Stripe - Cachet PAYÉ
La facture s'imprime directement depuis le navigateur (Ctrl+P / Cmd+P) ou se sauvegarde en PDF via le bouton Télécharger / Imprimer.
E-mail de confirmation d'achat
Dès qu'un paiement est activé, un e-mail de confirmation est automatiquement envoyé à l'adresse de l'acheteur. Il contient :
- Le récapitulatif de l'option achetée (nom, durée, date d'expiration)
- Le montant payé (HT + TVA + TTC)
- Le numéro de facture
- Un lien direct vers la facture PDF
La langue de l'e-mail (français ou anglais) dépend de la préférence de langue définie dans le profil de l'utilisateur.
L'envoi d'e-mails nécessite une configuration SMTP valide dans Administration → Paramètres → onglet Email.
Interface d'administration
Tableau de bord Paiements (/admin/payments.php)
La page affiche quatre indicateurs en temps réel :
| Indicateur | Description |
|---|---|
| Revenus totaux | Somme TTC de tous les paiements confirmés |
| Paiements confirmés | Nombre de transactions au statut Payé |
| Utilisateurs VIP actifs | Nombre d'utilisateurs avec option vip_user active |
| Utilisateurs Premium actifs | Nombre d'utilisateurs avec option premium_user active |
La liste des transactions est filtrable par statut, type d'option et ID utilisateur.
Gérer le catalogue des options
Le bas de la page /admin/payments.php liste toutes les options configurables :
| Champ | Description |
|---|---|
| Prix HT | Prix affiché à l'utilisateur avant TVA |
| Durée (jours) | Durée de validité de l'option après activation |
| Activé | Active ou masque l'option dans le catalogue public |
Cliquez sur Enregistrer après chaque modification — les changements sont appliqués immédiatement.
Carrousel VIP (page d'accueil)
Lorsqu'une annonce dispose d'une option featured_ad active, elle apparaît dans un carrousel dédié en haut de la page d'accueil. Ce carrousel est visible uniquement si au moins une annonce est mise en avant.
Le widget s'active automatiquement dans Administration → Paramètres → onglet Page d'accueil si vous avez activé le bloc Annonces à la une.
Configuration du Webhook Stripe
Le webhook permet à Stripe d'informer votre serveur qu'un paiement a été confirmé, même si l'utilisateur a fermé son navigateur après le paiement.
En production
- Dans le tableau de bord Stripe → Développeurs → Webhooks → Ajouter un endpoint.
- URL de l'endpoint :
https://votre-site.com/api/stripe-webhook.php - Événements à écouter :
checkout.session.completed - Copiez le secret de signature (
whsec_…) dans les paramètres NGZ Ads.
En développement local (MAMP)
Stripe ne peut pas contacter localhost directement. Deux solutions :
Option 1 — Stripe CLI (recommandée)
# Installer la Stripe CLI
brew install stripe/stripe-cli/stripe
# S'authentifier
stripe login
# Transférer les événements vers votre serveur local
stripe listen --forward-to http://localhost:8888/claude/ngzads/NGZADS/api/stripe-webhook.php
La CLI affiche un secret whsec_… à copier dans vos paramètres NGZ Ads (champ Secret webhook test).
Option 2 — Mode sans webhook (fallback intégré)
La page de succès (/payment-success.php) contient un mécanisme de repli : si le paiement n'a pas encore été activé par webhook, elle interroge directement Stripe via l'API et active l'option. Ce mode fonctionne sans Stripe CLI mais nécessite que l'utilisateur reste sur la page de succès quelques secondes.
Passage en production
Checklist avant de basculer en mode live :
| Étape | Action |
|---|---|
| 1 | Remplacer les clés pk_test_ / sk_test_ par les clés pk_live_ / sk_live_ dans les paramètres |
| 2 | Créer un endpoint webhook en production et copier le nouveau whsec_live_… |
| 3 | Vérifier les informations de facturation (nom, adresse, N° TVA) |
| 4 | Définir le taux de TVA correct pour votre pays |
| 5 | Effectuer un paiement test de bout en bout avec une vraie carte |
| 6 | Activer les options dans le catalogue si elles étaient désactivées en test |
En mode
live, les transactions sont réelles et débitées. N'utilisez jamais des clés live sur un environnement de développement.
Sécurité
| Point | Détail |
|---|---|
| Clés secrètes | Stockées dans config/settings.php, jamais exposées côté client |
| Signature webhook | Chaque événement Stripe est vérifié avec le secret whsec_… avant traitement |
| CSRF | Toutes les requêtes API utilisent un token CSRF en en-tête |
| Idempotence | L'activation d'une option par session_id est idempotente (plusieurs appels = un seul effet) |
| Accès factures | Seul le propriétaire du paiement (ou un administrateur) peut consulter une facture |
Récapitulatif des URLs
| Page | URL | Accès |
|---|---|---|
| Acheter une option annonce | /payment-options.php?type=ad&id=<id> | Propriétaire de l'annonce |
| Acheter une option profil | /payment-options.php?type=user&id=<id> | Utilisateur connecté |
| Confirmation de paiement | /payment-success.php?session_id=… | Automatique après Stripe |
| Annulation | /payment-cancel.php | Automatique si abandon |
| Mes paiements | /my-payments.php | Utilisateur connecté |
| Facture | /invoice.php?id=<payment_id> | Propriétaire ou admin |
| Admin paiements | /admin/payments.php | Administrateur |
| Webhook Stripe | /api/stripe-webhook.php | Stripe uniquement (POST) |