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 :
- Créer un produit + un prix dans Bande.
- Démarrez la session de paiement avec des métadonnées (productId, buyerId).
- Sur
session.de.paiement.terminéeoupayment_intent.succeeded, vérifier la signature. - 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/webhookpoint 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é :
- Créer
ordresrangée avecstatut = 'payé'. - Générez une clé de licence (UUID v4) ou un jeton de déverrouillage lié à l'acheteur.
- Stocker un construction immuable du zip (hachez-le).
- Émettre un URL signée à durée limitée (par exemple, 24 heures, 3 téléchargements).
- Envoyer un e-mail à l'acheteur : lien de facture, licence, bouton de téléchargement.
- Créer
- 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)
- Aperçu de la politique de monétisation → https://fivemx.com/terms-conditions
- Remboursements et retours pour les produits numériques → https://fivemx.com/guarantee
- Modèle de licence de script → https://fivemx.com/terms-conditions
- Retrait DMCA → https://fivemx.com/dmca-request
- Notes sur les performances et l'anti-triche → https://fivemx.com/performance
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
- Compte Stripe vérifié ; détails de l'entreprise complets.
- Produits + Prix créés ; ensemble de métadonnées.
- API de session de paiement en direct ; itinéraires de réussite/annulation.
- Point de terminaison Webhook en direct ; signature vérifiée ; nouvelles tentatives testées.
- Exécution : générateur de licence, URL de téléchargement signée, e-mail.
- Taxes sur; factures PDF enregistrées; validation de la TVA.
- Pages juridiques : Conditions, Remboursements, Confidentialité, Licence.
- Journaux + tableaux de bord : commandes, erreurs, tentatives, litiges.
- 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.






