Lee esto antes de comenzar. Si gestionas un servidor FiveM/RedM servidor y planeas para vender ventajas dentro del juego, debes usar Tebex. Cfx.re’s docs y PLA establecen que “el uso de cualquier otra plataforma o proveedor de pagos está prohibido” para la monetización del servidor. Autoalojar Stripe está bien para ventas fuera del servidor (scripts independientes, MLOs, paquetes UI, servicios, cursos). No vincules esas ventas a ventajas dentro del juego en servidores en vivo.
Qué puedes monetizar sin Tebex
Permitido (fuera del servidor):
- Scripts Standalone/MLOs que licencias para autoinstalación.
- Paquetes de texturas, kits UI, paquetes de sonido.
- Consultoría, trabajo de desarrollo personalizado, servicios de instalación.
- Documentación, cursos, plantillas.
Evitar (requiere Tebex o infringe la política):
- Moneda del juego, pagar para ganar, cajas de botín, NFT.
- Cola prioritaria, roles VIP, mejoras de lista blanca vinculadas a tu servidor en vivo.
Arquitectura de un vistazo
Meta: una tienda autogestionada que vende productos digitales (scripts/MLOs) y entrega licencias automáticamente.
Stack:
- Frontend: Next.js (App Router), React.
- Pagos: Stripe Checkout (simple) o Payment Element + Payment Intents (flujo personalizado).
- Webhooks: Recibir eventos, verificar firmas, actualizar pedidos, entregar archivos/claves.
- Almacenamiento/Entrega: S3/R2 + URLs firmadas; o servidor de licencias con descargas limitadas por tasa.
- Impuestos/Facturas: Stripe Tax + facturas de Billing para B2B.
Flujo de datos:
- Crear Producto + Precio en Raya.
- Iniciar Sesión de Checkout con metadatos (productId, buyerId).
- En
checkout.session.completedopayment_intent.succeeded, verificar firma. - Marcar pedido como pagado; generar licencia; crear enlace de descarga firmado; enviar recibo y licencia por correo.
Configuración paso a paso
1) Higiene de la cuenta de Stripe
- Completar la incorporación y verificar negocio (KYC).
- Establecer descriptor de estado, correo de soporte, URL de política de reembolso.
- Permitir Apple Pay / Google Pay; añadir cuenta bancaria.
- Activar Radar reglas para verificaciones antifraude básicas.
2) Productos y precios
- Crear un Stripe Producto por script/MLO.
- Usar Precios únicos en la moneda de tu comprador (EUR/USD).
- Agrega las claves de metadatos que necesitarás después:
sku,product_slug,license_policy.
3) Elige el flujo de pago
- Raya Finalizar compra: el más rápido y compatible con SCA. Gestiona billeteras, 3DS, recibos. Recomendado para la mayoría de las tiendas.
- Elemento de Pago + Payment Intents: más control; úsalo si necesitas UI personalizados o métodos adicionales.
4) Webhooks seguros
- Crear una
POST /api/stripe/webhook. - Lee el cuerpo en bruto; no analices JSON antes de la verificación.
- Verifica con el secreto del endpoint; rechazar si la firma falla.
- Usar idempotencia para tareas salientes que desencadenas desde webhooks (por ejemplo, creación de licencias) para que los reintentos no dupliquen pedidos.
5) Cumplimiento de pedido + licencia
- Después de la verificación exitosa:
- Crear
ordersfila constatus='paid'. - Generar una clave de licencia (UUID v4) o un token abierto vinculado al comprador.
- Almacena un compilación inmutable del zip (hashear el archivo).
- Emitir una URL firmada con límite de tiempo (ej. 24 horas, 3 descargas).
- Enviar al comprador por correo electrónico: enlace de factura, licencia, botón de descarga.
- Crear
- Agregar un portal del cliente página con historial de pedidos y redescargas.
6) Impuestos, facturas y recibos
- Activar Stripe Tax; marcar artículos como bienes digitales.
- Recopilar ubicación del comprador (IP + dirección de facturación) y números de impuestos (ej. ID de IVA de la UE).
- Para B2C en la UE, cobrar IVA del destino; para ID de IVA B2B de la UE válidos, gravar con tasa cero y registrar el ID.
- Almacenar PDFs de facturas junto con el registro del pedido.
7) Cumplimiento y políticas
- Términos de venta (alcance de la licencia, sin reventa, cláusula anti-trampas, retirada DMCA).
- Reembolsos: aplican las reglas de venta a distancia de la UE, pero las descargas digitales pierden el derecho de 14 días si si el comprador da su consentimiento expreso y lo reconoce antes de la descarga. Mostrar una casilla de verificación y registrar el consentimiento.
- Privacidad: mantener una página de GDPR; registrar cargas útiles de webhook sin almacenar datos completos de la tarjeta.
- Seguridad: rotar secretos de webhook; claves API con mínimo privilegio; cifrar la tabla de licencias en reposo.
Implementación mínima (Next.js + Stripe Checkout)
Acción del servidor (crear sesión):
// 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 });
}
Ruta de 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 });
}
Consejo de idempotencia: cuando tu webhook active trabajo externo (por ejemplo, envío de correos, creación de licencias), envuelve esas llamadas con tu propio Idempotency-Key para evitar duplicados.
Entrega de licencias y archivos
- Vincula cada licencia al correo del comprador + SKU del producto.
- Firma las URL de descarga; limita por tiempo + intentos; registra IPs para control de abusos.
- Incluye un pequeño validador de licencias fragmento en tu cargador de recursos para verificar la clave contra tu API (con límite de tasa).
Controles de riesgo y fraude
- Habilita 3DS/SCA a través de Checkout o Payment Intents.
- Bloquea correos desechables y país de facturación no coincidente para pedidos de alto riesgo.
- Mantén plantillas de evidencia de disputas: descripción del producto, registros de licencias, registros de descargas, consentimiento de exención de contenido digital.
No infrinjas las reglas de Cfx.re
- Usa Tebex para cualquier beneficio que toque tu servidor en ejecución (cola prioritaria, kits VIP, autos, skins).
- Mantén Stripe solo para productos y servicios digitales fuera del servidor.
Enlaces internos (FiveMX)
- Resumen de la política de monetización → https://fivemx.com/terms-conditions/
- Reembolsos y devoluciones para productos digitales → https://fivemx.com/are-fivemx-resources-safe-legit/
- Plantilla de licencias de scripts → https://fivemx.com/terms-conditions/
- Retirada DMCA → https://fivemx.com/dmca-request/
- Notas de rendimiento y anti-trampas → https://fivemx.com/performance/
Referencias externas
- Monetización y documentación exclusiva de Cfx.re PLA + Tebex.
- Webhooks de Stripe y verificación de firmas.
- Claves de idempotencia de Stripe y SCA.
- Ley de consumo de la UE: excepciones al derecho de desistimiento para contenido digital.
- Stripe Tax: bienes digitales y OSS.
Lista de verificación lista para enviar
- Cuenta de Stripe verificada; datos comerciales completos.
- Productos + Precios creados; metadatos configurados.
- API de sesión de pago activa; rutas de éxito/cancelación.
- Webhook endpoint activo; firma verificada; reintentos probados.
- Cumplimiento: generador de licencias, URL de descarga firmada, correo electrónico.
- Impuestos activados; facturas PDF almacenadas; validación de IVA.
- Páginas legales: Términos, Reembolsos, Privacidad, Licencia.
- Registros + paneles: pedidos, errores, reintentos, disputas.
- Auditoría: no se permiten ventas de ventajas de servidor fuera de Tebex.
Preguntas frecuentes (breve)
- ¿Puedo vender roles VIP con Stripe? Sí, si usas Discord.
- ¿Puedo vender mi MLOs con Stripe? Sí, si la entrega es fuera del servidor y no está vinculada a ventajas activas.
- ¿Los compradores obtienen reembolsos de 14 días? Para la UE, no después de que acepten la entrega digital inmediata e inicien la descarga. Registra el consentimiento.
- ¿Qué flujo de Stripe es mejor? Checkout por velocidad; Payment Intents si necesitas personalización avanzada.
