Économisez 20% dès aujourd'hui Utilisez le code BIENVENUE lors du paiement. ACCUEILLIR

Monetize Without Tebex: Self‑Hosted Store with 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 Vérifier: 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érez une clé de licence (UUID v4) ou un jeton de déverrouillage 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/checkout/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.
Luc
Luc

Je m'appelle Luke, je suis un joueur et j'adore écrire sur FiveM, GTA et le jeu de rôle. Je dirige une communauté de jeu de rôle et j'ai environ 10 ans d'expérience dans l'administration de serveurs.

Articles: 570