¿Has configurado correctamente los webhooks? Recuerdo que eran bastante complicados de configurar y las instrucciones para hacerlo podrían ser un poco más claras.
Sí, configuré los webhooks correctamente, así es como fluía la respuesta.
Descubrí el problema. Las instrucciones omiten un punto donde tenemos que configurar las etiquetas personalizadas con el nombre del grupo al que se promocionará en la página de configuración de precios de Stripe.
Ahora funciona bien para mí. El plugin es genial, pero la documentación no es detallada.
¿Puedes explicar esto un poco más para que podamos pedirle a alguien que actualice la documentación? ¿Qué etiqueta personalizada añadiste y dónde la añadiste?
[Guía] Cómo configurar suscripciones de Discourse con tablas de precios de Stripe (y errores comunes)
Hola a todos,
Después de un largo proceso de solución de problemas, quería compartir una guía definitiva para configurar el plugin oficial discourse-subscriptions utilizando el método moderno de Tabla de precios de Stripe. Este enfoque es potente, pero tiene algunos pasos críticos que no son inmediatamente obvios y pueden generar errores como webhooks fallidos (404 Not Found) o que los usuarios no se agreguen a grupos después de un pago exitoso.
Aquí está el proceso paso a paso que se confirma que funciona.
Parte 1: Configuración de Stripe
Este proceso utiliza Stripe como la “fuente de verdad” para todos los productos y precios.
1. Crea tus productos y precios
- En tu Panel de Stripe, asegúrate de estar en Modo en vivo.
- Ve a Productos > Catálogo de productos.
- Crea primero tus productos principales (por ejemplo, “Membresía Premium”, “Acceso VIP”).
- Debajo de cada producto, crea todos los precios asociados (por ejemplo,
XX / mes,XXX / año).
2. El paso CRUCIAL de metadatos Para que el plugin agregue automáticamente a los usuarios a un grupo, debes agregar metadatos específicos a cada objeto de Precio que crees. La interfaz de usuario del panel de Stripe puede dificultar su localización.
- Al crear un nuevo precio (o si puedes encontrar la opción “Editar precio”), debes agregar metadatos. Es posible que debas hacer clic en “Opciones adicionales” durante la creación del precio para revelar los campos de metadatos.
- Haz clic en + Agregar metadatos e introduce lo siguiente:
- CLAVE:
group_name - VALOR: El slug/identificador único y seguro para URL del grupo de Discourse, no su nombre completo.
- CLAVE:
Ejemplo:
- Si el nombre completo de tu grupo de Discourse es “Enclave Plus”, su slug probablemente sea
EnclavePlus.- Debes usar
EnclavePluscomo valor. Usar"Enclave Plus"con un espacio fallará.
- Debes repetir esto para cada plan de precios que desees vincular a un grupo.
3. Crea tu tabla de precios de Stripe
- Ve a Productos > Tablas de precios.
- Crea una nueva tabla y agrega los precios que acabas de configurar.
- Después de publicar la tabla, haz clic en el botón “Copiar código” para obtener tu ID de tabla de precios (comienza con
prctbl_...).
4. Configura el endpoint del webhook (La solución al error 404) Este es el punto de fallo más común.
- Ve a Desarrolladores > Webhooks y haz clic en + Agregar endpoint.
- La URL del endpoint debe tener el siguiente formato:
https://tu-sitio-discourse.com/s/hooks- Nota: La ruta correcta es
/s/hooks, no/s/stripe/webhook.
- Nota: La ruta correcta es
- Para Eventos a enviar, agrega como mínimo:
checkout.session.completedcustomer.subscription.deleted
- Crea el endpoint y copia el Secreto de firma (comienza con
whsec_...).
Parte 2: Configuración de Discourse
Ahora, configuremos el plugin para usar todo lo que configuraste en Stripe.
1. Introduce las claves API y el ID de la tabla de precios
- Ve a
Admin>Ajustesy buscadiscourse subscriptions. - Introduce tus claves de Stripe en vivo:
discourse subscriptions public key(pk_live_...)discourse subscriptions secret key(sk_live_...)discourse subscriptions webhook secret(whsec_...)
- Habilita el modo de tabla de precios:
- Marca la casilla
discourse subscriptions pricing table enabled. - Pega tu ID
prctbl_...en el campodiscourse subscriptions pricing table id.
- Marca la casilla
2. Vincula productos de Stripe a grupos de Discourse Incluso con una tabla de precios, necesitas decirle a Discourse qué grupo pertenece a qué producto.
- Ve a
Admin>Plugins>Subscriptionsy haz clic en la pestaña Products. - Haz clic en Create New Product.
- Introduce un Product Name que coincida exactamente con el Product Name en Stripe (por ejemplo,
Enclave Plus). - Guarda el producto. En la página del producto, desplázate hacia abajo y haz clic en Add New Plan.
- Este plan es solo un “puente”. El único campo crítico es User Group.
- Plan Nickname:
Enclave Plus Group Link(o cualquier cosa para tu referencia). - User Group: Selecciona el grupo de Discourse correcto del menú desplegable.
- Los otros campos (Amount, Interval) se pueden dejar por defecto, ya que se ignorarán.
- Plan Nickname:
- Guarda el plan. Repite esto para todos tus diferentes productos.
Resumen de solución de problemas
- Problema: Los webhooks fallan con un error
404 Not Found.- Solución: La URL del endpoint en Stripe es incorrecta. Debe ser
https://tu-sitio-discourse.com/s/hooks.
- Solución: La URL del endpoint en Stripe es incorrecta. Debe ser
- Problema: El webhook es exitoso (
200 OK) y el pago aparece en el perfil de facturación del usuario, pero no se agrega al grupo.- Solución: Tus metadatos son incorrectos. Comprueba tres cosas:
- Los metadatos deben estar en el objeto Stripe Price, no en el objeto Product.
- La CLAVE de metadatos debe ser exactamente
group_name. - El VALOR de metadatos debe ser el slug/identificador único del grupo (por ejemplo,
EnclavePlus), no su nombre completo con espacios.
- Solución: Tus metadatos son incorrectos. Comprueba tres cosas:
Espero que esta guía ahorre a otros el tiempo y la frustración de esta configuración compleja pero muy potente.
[quote=“SubStrider, post:712, topic:140818”]
4. Configure el punto de conexión del Webhook (La solución al error 404) Este es el punto de fallo más común.
- Vaya a **Developers
La parte clave que falta en la documentación es esta. Lo señalo ya que citaste otra parte.
¿Hay alguna forma de establecer automáticamente la fecha de anclaje con esto? Si alguien paga, tengo que ajustar manualmente el período de suscripción para que se restablezca el día 1 del mes para cada usuario. La documentación de Stripe dice que se puede hacer con la API al finalizar la compra, pero actualmente no tenemos una forma de ajustarlo en el plugin.
Moviendo esto al nuevo hilo ya que podría alargarse a medida que publique actualizaciones.
Este plugin ahora viene incluido con el núcleo de Discourse como parte de Bundling more popular plugins with Discourse core. Si te autoalojas y usas el plugin, necesitas eliminarlo de tu app.yml antes de tu próxima actualización.
¿Cómo lo elimino del núcleo? Ya que usaría la bifurcación del plugin que he mejorado.
Algo como
rm - rf discourse-subscroptions
Antes del git clone.
Lo siento, no entendí, durante la reconstrucción obtendrá este código de plugin integrado y lo compilará, ¿todo en un solo paso?
No he probado esto, pero estoy bastante seguro de que funcionará:
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- rm -rf discourse-subscriptions
- git clone https://github.com/yourForkUser/discourse-subscriptions
Dado que esto se ejecuta desde el directorio de plugins, eliminará discourse-subscriptions que ahora está incluido en el núcleo y lo reemplazará con el que siempre has usado antes. Por lo tanto, agregar solo ese rm -rf a tu app.yml antes de tu git clone (para este o cualquier otro plugin que no quieras incluir o quieras reemplazar) debería hacer lo que deseas y reemplazar el plugin principal con tu fork.
Bien, entonces cuando dicen que el plugin X ahora es parte del núcleo, todo lo que quieren decir es que el plugin vendrá preempaquetado en el repositorio principal en el directorio de plugins y no tendremos que extraer ese código opcionalmente. Entendido. Estructuralmente nada cambia.
Si ahora está preempaquetado. ¿Perderé todos los datos de la versión del plugin? ¿Tendré que configurarlo todo de nuevo o se transferirá?
No perderás datos. Simplemente elimina la línea de app.yml y el plugin seguirá funcionando como antes.
¿Se espera que después de ingresar un código de cupón, el monto total de la suscripción no se actualice inmediatamente?
Probado en Discourse 3.5.0.beta8-dev
He descubierto que si un usuario intenta registrarse y su pago falla, se elimina la entrada en la tabla discourse_subscriptions_customer que lo asocia con su ID de cliente de Stripe. No estoy seguro de si este comportamiento es intencional, pero en cualquier caso, no creo que sea un buen comportamiento, ya que resulta en clientes huérfanos en Stripe que deben eliminarse manualmente. Esto también da como resultado la creación de clientes duplicados si lo intentan de nuevo, lo que puede afectar nuestros informes.
¿Hay alguna forma de restablecer la campaña? Esperaba un objetivo de donación mensual, pero es el comienzo de un nuevo mes y no veo una forma de restablecerlo a cero para un nuevo objetivo mensual.
Me encantaría ver este plugin en acción en un sitio. ¿Alguien está dispuesto a compartir el enlace a su foro que utiliza el Plugin de Suscripciones? ¡Gracias!
