NGZ Ads / Options payantes & Stripe

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éfautEffet
featured_adAnnonce à la uneAffichée dans le carrousel VIP de la page d'accueil et mise en avant dans les résultats
urgent_adAnnonce urgenteBadge « Urgent » visible sur la vignette et en page de détail
bump_adRemonter l'annonceRemonte l'annonce en tête des résultats comme si elle venait d'être publiée

Options profil (scope: user)

CléNom par défautEffet
premium_userProfil PremiumBadge Premium visible sur le profil et les annonces de l'utilisateur
vip_userProfil VIPBadge 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 :

ChampValeur
Mode Stripetest pendant le développement, live en production
Clé publique testVotre pk_test_…
Clé secrète testVotre sk_test_…
Secret webhook testVotre 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

  1. L'utilisateur ouvre l'une de ses annonces et clique sur Options payantes (bouton dans la barre d'actions).
  2. La page /payment-options.php?type=ad&id=<id> s'affiche avec les offres disponibles et leurs tarifs.
  3. Il choisit une option et clique sur Acheter.
  4. Il est redirigé vers Stripe Checkout (paiement sécurisé hébergé par Stripe).
  5. Après le paiement, Stripe redirige vers /payment-success.php?session_id=….
  6. 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 :

IndicateurDescription
Revenus totauxSomme TTC de tous les paiements confirmés
Paiements confirmésNombre de transactions au statut Payé
Utilisateurs VIP actifsNombre d'utilisateurs avec option vip_user active
Utilisateurs Premium actifsNombre 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 :

ChampDescription
Prix HTPrix 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

  1. Dans le tableau de bord Stripe → Développeurs → Webhooks → Ajouter un endpoint.
  2. URL de l'endpoint : https://votre-site.com/api/stripe-webhook.php
  3. Événements à écouter : checkout.session.completed
  4. 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 :

ÉtapeAction
1Remplacer les clés pk_test_ / sk_test_ par les clés pk_live_ / sk_live_ dans les paramètres
2Créer un endpoint webhook en production et copier le nouveau whsec_live_…
3Vérifier les informations de facturation (nom, adresse, N° TVA)
4Définir le taux de TVA correct pour votre pays
5Effectuer un paiement test de bout en bout avec une vraie carte
6Activer 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é

PointDétail
Clés secrètesStockées dans config/settings.php, jamais exposées côté client
Signature webhookChaque événement Stripe est vérifié avec le secret whsec_… avant traitement
CSRFToutes les requêtes API utilisent un token CSRF en en-tête
IdempotenceL'activation d'une option par session_id est idempotente (plusieurs appels = un seul effet)
Accès facturesSeul le propriétaire du paiement (ou un administrateur) peut consulter une facture

Récapitulatif des URLs

PageURLAccè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.phpAutomatique si abandon
Mes paiements/my-payments.phpUtilisateur connecté
Facture/invoice.php?id=<payment_id>Propriétaire ou admin
Admin paiements/admin/payments.phpAdministrateur
Webhook Stripe/api/stripe-webhook.phpStripe uniquement (POST)