Monetiza sin Tebex: Tienda autogestionada con Stripe/W&#…

Monetiza sin Tebex: Tienda autoalojada con Stripe/W&#…

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:

  1. Crear Producto + Precio en Raya.
  2. Iniciar Sesión de Checkout con metadatos (productId, buyerId).
  3. En checkout.session.completed o payment_intent.succeeded, verificar firma.
  4. 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:
    1. Crear orders fila con status='paid'.
    2. Generar una clave de licencia (UUID v4) o un token abierto vinculado al comprador.
    3. Almacena un compilación inmutable del zip (hashear el archivo).
    4. Emitir una URL firmada con límite de tiempo (ej. 24 horas, 3 descargas).
    5. Enviar al comprador por correo electrónico: enlace de factura, licencia, botón de descarga.
  • 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)

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

  1. Cuenta de Stripe verificada; datos comerciales completos.
  2. Productos + Precios creados; metadatos configurados.
  3. API de sesión de pago activa; rutas de éxito/cancelación.
  4. Webhook endpoint activo; firma verificada; reintentos probados.
  5. Cumplimiento: generador de licencias, URL de descarga firmada, correo electrónico.
  6. Impuestos activados; facturas PDF almacenadas; validación de IVA.
  7. Páginas legales: Términos, Reembolsos, Privacidad, Licencia.
  8. Registros + paneles: pedidos, errores, reintentos, disputas.
  9. 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.