Économisez 20 % avec WELCOMEVoir les promotions
Monétisez sans Tebex : Boutique auto-hébergée avec Stripe/W&#…

Monétisez sans Tebex : Boutique auto-hébergée avec Stripe/W&#…

Lisez ceci avant de commencer. Si vous utilisez un FiveM/RedM serveur et planifier pour vendre des avantages en jeu, vous devez utiliser TebexLa documentation et le PLA de Cfx.re stipulent que « l'utilisation de toute autre plateforme ou fournisseur de paiement est interdite » pour la monétisation des serveurs. L'auto-hébergement Stripe est acceptable pour hors serveur Ventes (scripts autonomes, MLO, packs d'interface utilisateur, services, cours). N'associez pas ces ventes à des avantages en jeu sur les serveurs live.


Ce que vous pouvez monétiser sans Tebex

Autorisé (en dehors du serveur) :

  • Scripts/MLO autonomes que vous concédez sous licence pour une auto-installation.
  • Packs de textures, kits d'interface utilisateur, packs de sons.
  • Conseil, développement personnalisé, services d'installation.
  • Documentation, cours, modèles.

Éviter (nécessite Tebex ou rompt la politique) :

  • Monnaie du jeu, pay-to-win, boîtes à butin, NFT.
  • File d'attente prioritaire, rôles VIP, boosts de liste blanche liés à votre serveur en direct.

L'architecture en un coup d'œil

But: une boutique auto-hébergée qui vend des produits numériques (scripts/MLO) et délivre des licences automatiquement.

Empiler:

  • Front-end : Next.js (routeur d'application), React.
  • Paiements : Stripe Checkout (simple) ou élément de paiement + intentions de paiement (flux personnalisé).
  • Webhooks : recevoir des événements, vérifier les signatures, mettre à jour les commandes, livrer des fichiers/clés.
  • Stockage/Livraison : S3/R2 + URL signées ; ou serveur de licences avec téléchargements à débit limité.
  • Taxes/Factures : Factures Stripe Tax + Factures de facturation pour le B2B.

Flux de données :

  1. Créer un produit + un prix dans Bande.
  2. Démarrez la session de paiement avec des métadonnées (productId, buyerId).
  3. Sur session.de.paiement.terminée ou payment_intent.succeeded, vérifier la signature.
  4. Marquer la commande comme payée ; générer la licence ; créer un lien de téléchargement signé ; envoyer le reçu et la licence par courrier électronique.

Configuration étape par étape

1) Hygiène du compte Stripe

  • Intégration complète et vérifier l'entreprise (Connaissance du client).
  • Définir le descripteur de la déclaration, l'e-mail d'assistance et l'URL de la page de politique de remboursement.
  • Activer Apple Pay / Google Pay; ajouter un compte bancaire.
  • Allumer Radar règles de contrôle de fraude de base.

2) Produits et prix

  • Créer une bande Produit par script/MLO.
  • Utiliser prix uniques dans la devise de votre acheteur (EUR/USD).
  • Ajoutez les clés de métadonnées dont vous aurez besoin plus tard : référence, produit_slug, politique_de_licence.

3) Choisissez le flux de paiement

  • Bande Paiement: le plus rapide et compatible SCA. Compatible avec les portefeuilles, les 3DS et les reçus. Recommandé pour la plupart des magasins.
  • Élément de paiement + intentions de paiement: plus de contrôle ; à utiliser si vous avez besoin d'une interface utilisateur personnalisée ou de méthodes supplémentaires.

4) Webhooks sécurisés

  • Créer un POST /api/stripe/webhook point final.
  • Lire le corps brut; ne pas analyser JSON avant la vérification.
  • Vérifiez avec le secret du point de terminaison; rejeter si la signature échoue.
  • Utiliser idempotence pour les tâches sortantes que vous déclenchez à partir de webhooks (par exemple, la création de licence) afin que les nouvelles tentatives ne dupliquent pas les commandes.

5) Exécution de la commande + licence

  • Après un succès vérifié :
    1. Créer ordres rangée avec statut = 'payé'.
    2. Générer une clé de licence (UUID v4) ou un jeton ouvert lié à l'acheteur.
    3. Stocker un construction immuable du zip (hachez-le).
    4. Émettre un URL signée à durée limitée (par exemple, 24 heures, 3 téléchargements).
    5. Envoyer un e-mail à l'acheteur : lien de facture, licence, bouton de téléchargement.
  • Ajouter un portail client page avec historique des commandes et re-téléchargements.

6) Taxes, factures et reçus

  • Allumer Taxe Stripe; marquer les éléments comme biens numériques.
  • Collectez l'emplacement de l'acheteur (IP + adresse de facturation) et les numéros de taxe (par exemple, numéro de TVA de l'UE).
  • Pour les transactions B2C de l'UE, facturez la TVA de destination ; pour les identifiants de TVA B2B de l'UE valides, appliquez le taux zéro et enregistrez l'identifiant.
  • Stockez les factures PDF avec l'enregistrement de la commande.

7) Conformité et politiques

  • Conditions de vente (étendue de la licence, interdiction de revente, clause anti-triche, retrait DMCA).
  • Remboursements : les règles de vente à distance de l’UE s’appliquent, mais les téléchargements numériques perdent le droit de 14 jours si L'acheteur y consent expressément et le reconnaît avant le téléchargement. Cochez la case et enregistrez votre consentement.
  • Confidentialité : conservez une page RGPD ; enregistrez les charges utiles des webhooks sans stocker l'intégralité des données de la carte.
  • Sécurité : rotation des secrets du webhook ; clés API à privilèges minimum ; chiffrement de la table des licences au repos.

Implémentation minimale (Next.js + Stripe Checkout)

Action du serveur (créer une session) :

// app/api/cart/route.ts
import Stripe from 'stripe';
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, { apiVersion: '2024-06-20' });

export async function POST(req: Request) {
 const { sku, successUrl, cancelUrl } = await req.json();
 const priceId = await mapSkuToPriceId(sku);

 const session = await stripe.checkout.sessions.create({
 mode: 'payment',
 line_items: [{ price: priceId, quantity: 1 }],
 metadata: { sku },
 success_url: successUrl,
 cancel_url: cancelUrl,
 });
 return Response.json({ url: session.url });
}

Route du webhook :

// app/api/stripe/webhook/route.ts
import Stripe from 'stripe';
import { headers } from 'next/headers';

export const config = { api: { bodyParser: false } } as any; // keep raw body

function buffer(body: ReadableStream<Uint8Array>) {
 const reader = body.getReader();
 const chunks: Uint8Array[] = [];
 return reader.read().then(function process({ done, value }): any {
 if (done) return Buffer.concat(chunks);
 chunks.push(Buffer.from(value));
 return reader.read().then(process);
 });
}

export async function POST(req: Request) {
 const sig = headers().get('stripe-signature')!;
 const buf = await buffer(req.body!);
 let event: Stripe.Event;
 try {
 event = new Stripe(process.env.STRIPE_SECRET_KEY!, { apiVersion: '2024-06-20' })
 .webhooks.constructEvent(buf, sig, process.env.STRIPE_WEBHOOK_SECRET!);
 } catch {
 return new Response('Bad signature', { status: 400 });
 }

 if (event.type === 'checkout.session.completed') {
 const session = event.data.object as Stripe.Checkout.Session;
 await fulfill(session); // create order, license, email
 }
 return new Response('OK', { status: 200 });
}

Conseil d'idempotence : lorsque votre webhook déclenche un travail externe (par exemple, l'envoi d'e-mails, la création de licences), encapsulez ces appels avec les vôtres Clé d'idempotence pour éviter les doublons.


Licence et remise de dossier

  • Liez chaque licence à l'e-mail de l'acheteur + au SKU du produit.
  • Signez les URL de téléchargement ; limitez par temps + tentatives ; enregistrez les IP pour le contrôle des abus.
  • Inclure un petit validateur de licence extrait dans votre chargeur de ressources pour vérifier la clé par rapport à votre API (débit limité).

Contrôles des risques et des fraudes

  • Activez 3DS/SCA via le paiement ou les intentions de paiement.
  • Bloquez les e-mails jetables et les pays de facturation non compatibles pour les commandes à haut risque.
  • Conservez les modèles de preuves de litige : description du produit, journaux de licence, journaux de téléchargement, consentement à la renonciation au contenu numérique.

Ne brisez pas les règles de Cfx.re

  • Utilisez Tebex pour tout avantage qui touche votre serveur en cours d'exécution (file d'attente prioritaire, kits VIP, voitures, skins).
  • Conservez Stripe uniquement pour les produits et services numériques hors serveur.

Liens internes (FiveMX)

Références externes

  • Cfx.re PLA + monétisation et documentation uniquement Tebex.
  • Webhooks Stripe et vérification de signature.
  • Clés d'idempotence Stripe et SCA.
  • Droit de la consommation de l'UE : exceptions au droit de rétractation des contenus numériques.
  • Taxe Stripe : biens numériques et OSS.

Liste de contrôle prête à expédier

  1. Compte Stripe vérifié ; détails de l'entreprise complets.
  2. Produits + Prix créés ; ensemble de métadonnées.
  3. API de session de paiement en direct ; itinéraires de réussite/annulation.
  4. Point de terminaison Webhook en direct ; signature vérifiée ; nouvelles tentatives testées.
  5. Exécution : générateur de licence, URL de téléchargement signée, e-mail.
  6. Taxes sur; factures PDF enregistrées; validation de la TVA.
  7. Pages juridiques : Conditions, Remboursements, Confidentialité, Licence.
  8. Journaux + tableaux de bord : commandes, erreurs, tentatives, litiges.
  9. Audit : aucune vente d'avantages serveur en dehors de Tebex.

FAQ (court)

  • Puis-je vendre des rôles VIP avec Stripe ? Oui, si vous utilisez Discord.
  • Puis-je vendre mes MLO avec Stripe ? Oui, si la livraison est hors serveur et n’est pas liée aux avantages en direct.
  • Les acheteurs bénéficient-ils d’un remboursement sous 14 jours ? Pour l'UE, pas après avoir consenti à la livraison numérique immédiate et commencé le téléchargement. Enregistrez votre consentement.
  • Quel flux Stripe est le meilleur ? Paiement rapide ; intentions de paiement si vous avez besoin d'une personnalisation importante.