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.
Cinco pasos hasta una primera versión que funciona.
Stripe conoce una dirección de correo, no una cuenta de Discord, y muchas veces no coinciden. Así que vincúlalas antes del pago:
identify. Obtienes su ID de usuario de Discord.guilds.join si puede que los compradores todavía no estén en tu servidor. Permite que tu bot los agregue.client_reference_id y en los metadatos de la suscripción, para que cada evento posterior lo pueda encontrar.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.
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.
Un endpoint de webhook en un servidor HTTPS siempre encendido. Dos reglas antes de cualquier lógica:
Después, relaciona cada evento con lo que pasa con el rol:
| Evento de Stripe | El rol |
|---|---|
| checkout.session.completed | Agrega el rol, y agrega al miembro al servidor si hace falta. |
| customer.subscription.updated | Conserva el rol mientras el estado sea active, trialing o past_due; quítalo con unpaid, canceled o paused. |
| customer.subscription.deleted | Quita el rol. |
| charge.refunded | Tú decides: la mayoría quita el rol con un reembolso total y cancela la suscripción. |
| charge.dispute.created | Tú 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ó.
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 cinco pasos dan una primera versión que funciona. Estos dan una que puedes dejar funcionando.
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.
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.
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.
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.
Relaciona cada precio con un rol, y cambia los roles cuando un miembro pasa de un plan a otro.
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.
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.
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.
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.
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.
Sí, para el webhook. Stripe tiene que poder llegar a él en cualquier momento por HTTPS.
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.
Gratis hasta 15 miembros de pago · 0% de tus ventas · Tu propia cuenta de Stripe