Cómo conectar Stripe con los roles de Discord

Para dar un rol de Discord cuando alguien paga con Stripe necesitas tres piezas: una forma de saber cuál es la cuenta de Discord del comprador, un webhook que escuche los eventos de suscripción de Stripe y un bot que agregue o quite el rol con la API de Discord. Puedes hacer las tres tú mismo, o usar un bot como flatpass, que hace lo mismo sobre tu propia cuenta de Stripe.

  • Todo el desarrollo, paso a paso
  • Los casos límite que llevan tiempo
  • O la opción ya hecha
  1. El comprador inicia sesión con Discordidentify · guilds.join
  2. Stripe Checkoutmodo suscripción · con el ID de Discord
  3. Tu webhookfirma verificada · cada evento una vez
  4. Discord APIPUT …/members/{user}/roles/{role}
  5. Rol agregadoy se quita cuando termina

Hacerlo tú mismo

Cinco pasos hasta una primera versión que funciona.

Paso 1: Saber quién es el comprador en Discord

Stripe conoce una dirección de correo, no una cuenta de Discord, y muchas veces no coinciden. Así que vincúlalas antes del pago:

  • Haz pasar al comprador por el OAuth2 de Discord con el alcance identify. Obtienes su ID de usuario de Discord.
  • Agrega guilds.join si puede que los compradores todavía no estén en tu servidor. Permite que tu bot los agregue.
  • Pon el ID de usuario de Discord en la Checkout Session como client_reference_id y en los metadatos de la suscripción, para que cada evento posterior lo pueda encontrar.

Paso 2: Crear el bot de Discord

  • Crea una aplicación en el Discord Developer Portal y agrégale un bot.
  • Invítalo a tu servidor con Gestionar roles, más Crear invitación si va a agregar compradores al servidor.
  • Arrastra el rol del bot por encima de cada rol que vende, en Ajustes del servidor → Roles. Discord solo deja que un bot gestione roles que están por debajo del suyo, y pone el rol de un bot nuevo al final. Es la razón más común por la que una integración que funcionaba deja de funcionar sin avisar.

El bot no necesita estar en línea en el gateway de Discord para cambiar roles. Su token funciona con la API REST de Discord, llamada desde el manejador de tu webhook.

Paso 3: Crear el pago

Una Checkout Session de Stripe en modo subscription, con el precio del rol y el ID de usuario de Discord del paso 1. Stripe aloja la página, así que las tarjetas, Apple Pay y Google Pay vienen incluidos.

Activa el portal de clientes de Stripe para cancelar y cambiar tarjetas. Si no, cada cancelación es un mensaje para ti.

Paso 4: Escuchar los eventos de Stripe

Un endpoint de webhook en un servidor HTTPS siempre encendido. Dos reglas antes de cualquier lógica:

  • Verifica la firma en cada solicitud, con el secreto de firma de tu endpoint y el cuerpo de la solicitud sin procesar.
  • Procesa cada evento una sola vez. Stripe reintenta los envíos hasta por tres días y no garantiza su orden. Registra los ID de los eventos que ya procesaste, y lee el estado actual de la suscripción en vez de confiar en el orden en que llegan los eventos.

Después, relaciona cada evento con lo que pasa con el rol:

Evento de StripeEl rol
checkout.​session.​completedAgrega el rol, y agrega al miembro al servidor si hace falta.
customer.​subscription.​updatedConserva el rol mientras el estado sea active, trialing o past_due; quítalo con unpaid, canceled o paused.
customer.​subscription.​deletedQuita el rol.
charge.​refundedTú decides: la mayoría quita el rol con un reembolso total y cancela la suscripción.
charge.​dispute.​createdTú decides: la mayoría quita el rol hasta que se resuelve la disputa.

Conservar el rol durante past_due es importante: Stripe reintenta una renovación fallida durante días, y quitar el rol con el primer cobro fallido castiga a alguien cuya tarjeta simplemente venció.

Paso 5: Cambiar el rol en Discord

Tres llamadas, con el token de tu bot:

Agregar un rolPUT /guilds/{guild}/members/{user}/roles/{role}

Quitar un rolDELETE /guilds/{guild}/members/{user}/roles/{role}

Agregar al servidorPUT /guilds/{guild}/members/{user}

Agregar a alguien al servidor requiere el token de acceso de OAuth2 del paso 1, y el rol puede ir en la misma llamada. Después, maneja lo que responde Discord: 50013 significa que el rol está por encima del del bot, así que reintentar no sirve; 10007 significa que no está en el servidor; 429 significa que esperes retry_after y vuelvas a intentarlo.

Los casos límite: donde se va el tiempo

Los cinco pasos dan una primera versión que funciona. Estos dan una que puedes dejar funcionando.

Cancelar al final del período

Un miembro que cancela ya pagó hasta que termine el período. Quita el rol cuando la suscripción termine de verdad, no cuando haga clic en Cancelar.

Salir y volver a entrar

Discord le quita los roles a un miembro cuando se va. Si vuelve mientras sigue pagando, nada le devuelve el rol a menos que escuches las entradas (el intent privilegiado Server Members) o le des una forma de pedirlo.

Cambia el orden de los roles

Alguien arrastra el rol que vendes por encima del del bot, y desde ese momento cada intento de darlo falla. Tienes que darte cuenta, y volver a dar el rol a los miembros que pagaron mientras tanto.

Eventos perdidos

Tu servidor estuvo caído más tiempo del que Stripe sigue reintentando. Sin una revisión periódica de Stripe contra Discord, esos miembros nunca reciben su rol, o nunca lo pierden.

Varios planes

Relaciona cada precio con un rol, y cambia los roles cuando un miembro pasa de un plan a otro.

Tus propios registros

Qué miembro tiene qué suscripción, para poder responder “pagué y no tengo el rol” sin abrir dos dashboards.

Lo que cuesta hacerlo tú

Tu tiempo, para la primera versión y para los casos límite. Un servidor HTTPS siempre encendido para el webhook. Mantenimiento cuando cambian las API de Stripe y de Discord. Y ninguna comisión de plataforma: solo el procesamiento de tarjetas de Stripe. Si quieres control total o lógica a medida, es un buen proyecto.

O usa un bot que ya lo hace

flatpass es esto mismo, ya hecho, funcionando sobre tu propia cuenta de Stripe.

  • Vincular la cuenta de Discord. Sin iniciar sesión desde tu panel de planes: el enlace de pago ya está vinculado a la cuenta de Discord del miembro. En tu página de invitación, el miembro inicia sesión con Discord o pide que el bot le envíe un enlace por mensaje directo; el inicio de sesión usa guilds.join, así que, si un comprador no está en tu servidor, se le agrega automáticamente.

  • El bot. Dos permisos, Gestionar roles y Crear invitación. Nunca Administrador.

  • El pago. Stripe Checkout en tu propia cuenta de Stripe, con tarjetas, Apple Pay y Google Pay.

  • Webhooks seguros. Cada evento de Stripe se verifica por firma y se procesa una sola vez.

  • Renovaciones fallidas. El rol se mantiene mientras Stripe vuelve a intentar el cobro de la tarjeta.

  • Cancelaciones. El rol se mantiene hasta que termina el período pagado. Los miembros cancelan en el portal de Stripe, desde /membership.

  • Reembolsos. Un reembolso total quita el rol y termina la suscripción; uno parcial no cambia nada.

  • Contracargos. El rol se quita cuando se abre una disputa. Vuelve si ganas, y la suscripción termina si pierdes.

  • El orden de los roles. Tu dashboard te avisa, y los miembros que pagaron mientras tanto reciben su rol en cuanto lo arreglas.

  • Salir y volver a entrar. /membership, o el botón Abrir de tu página de invitación, devuelve el rol.

  • Tus registros. Una lista de miembros con el plan, el estado, la fecha de renovación de cada uno y si tiene el rol asignado.

Todavía no está: pasar a un miembro de un plan a otro, y los pagos únicos. Gratis hasta 15 miembros de pago, luego una tarifa mensual fija desde USD 29, y 0% de tus ventas; la comisión de tarjeta de Stripe es la misma en los dos casos. Cómo funciona para tus miembros.

¿Prefieres un bot a construirlo tú? flatpass, LaunchPass y PayBot en tu propio Stripe, comparados.

Preguntas frecuentes

¿Cómo conecto Stripe con los roles de Discord?

Para dar un rol de Discord cuando alguien paga con Stripe necesitas tres piezas: una forma de saber cuál es la cuenta de Discord del comprador, un webhook que escuche los eventos de suscripción de Stripe y un bot que agregue o quite el rol con la API de Discord. Puedes hacer las tres tú mismo, o usar un bot como flatpass, que hace lo mismo sobre tu propia cuenta de Stripe.

¿Stripe tiene una integración con Discord?

No tiene una integrada. Stripe cobra el pago, y otra cosa tiene que cambiar el rol de Discord: tu propio webhook y tu bot, o una app que lo haga por ti.

¿Lo puedo hacer con n8n o Zapier?

Sí. Aplican las mismas piezas: vincular la cuenta de Discord antes del pago, los eventos de Stripe que hay que manejar y las llamadas a Discord. Los casos límite no desaparecen.

¿Necesito un servidor?

Sí, para el webhook. Stripe tiene que poder llegar a él en cualquier momento por HTTPS.

¿El bot tiene que estar en línea todo el tiempo?

No para cambiar roles: las llamadas a la API funcionan solo con el token del bot. Solo para reaccionar a cosas que pasan en Discord, como un miembro que vuelve a entrar.

Sáltate el desarrollo, quédate con tu Stripe

Gratis hasta 15 miembros de pago · 0% de tus ventas · Tu propia cuenta de Stripe