Olá, fiz as seguintes alterações neste plugin e gostaria de saber se a equipe do Discourse estaria aberta a um PR.
Também adoraria se outros pudessem fazer testes extensivos. Estou testando os fluxos com os cenários que são críticos para mim.
O plugin original é uma excelente base, mas foca principalmente em assinaturas recorrentes via Stripe. Fiz as seguintes alterações:
Resumo de Novos Recursos e Melhorias
1. Sistema de Pagamento Multi-Provedor (com Razorpay) O plugin não está mais codificado para Stripe. Agora usa uma arquitetura baseada em provedores que permite múltiplos gateways de pagamento.
Integração Razorpay: O Razorpay foi totalmente integrado como um segundo provedor de pagamento. Isso é crucial para comunidades em mercados como a Índia, onde o Razorpay é um gateway preferido.
Webhooks Seguros: A integração Razorpay é robusta e inclui um manipulador de webhook seguro para confirmar pagamentos servidor a servidor, garantindo que nenhuma assinatura seja perdida se um usuário fechar o navegador após o pagamento.
2. Assinaturas Pagas Únicas e por Tempo Limitado Isso introduz um novo tipo de produto flexível além das assinaturas recorrentes padrão.
Acesso Expirável: Os administradores agora podem criar planos de pagamento único que concedem acesso a grupos por um período fixo (por exemplo, um passe de evento de 7 dias, um teste de 30 dias ou um pacote de 90 dias).
Expiração Automatizada: Um trabalho em segundo plano diário é executado automaticamente para verificar assinaturas expiradas e remover usuários dos grupos relevantes, garantindo que o controle de acesso seja totalmente automatizado.
3. Reforma Completa da Página de Preços A página de assinatura padrão voltada para o usuário foi completamente reconstruída para melhorar as conversões e a experiência do usuário.
UI Moderna Baseada em Cartões: A antiga lista de produtos é substituída por um layout limpo e responsivo baseado em cartões, que é mais fácil de ler e comparar.
Compatível com o Tema: O novo design usa as variáveis de tema do Discourse e é totalmente compatível com os modos claro e escuro.
Checkout em Página Única: Todo o processo de checkout agora acontece na página de preços. Clicar em “Assinar” revela um formulário de pagamento diretamente na página, eliminando uma etapa redundante e reduzindo o atrito do usuário.
4. Lógica Avançada de Upselling e Exibição de Valor Os novos cartões de preços são projetados para serem poderosas ferramentas de upselling.
Custo Mensal Efetivo: A UI calcula e exibe automaticamente o “custo por mês” efetivo para todos os tipos de planos (incluindo planos pagos únicos de 3 meses ou anuais), permitindo que os usuários comparem facilmente o valor de diferentes opções.
Economia Explícita: Um selo “Economize ₹X” é exibido automaticamente em planos de prazo mais longo, comunicando claramente o benefício de escolher um plano de maior valor em relação ao básico.
5. Painéis Unificados de Administrador e Usuário As páginas de faturamento do administrador e do usuário foram refatoradas para serem mais simples e poderosas.
Visão Única Unificada: Em vez de listas separadas para diferentes tipos de pagamento, agora há uma única tabela que mostra todas as assinaturas de todos os provedores (Stripe, Razorpay, Manual).
Informações Claras: Essas visualizações mostram claramente o provedor, status, data de expiração/renovação e valor de cada transação, dando a administradores e usuários um histórico completo de seus direitos.
6. Gerenciamento Manual de Assinaturas para Administradores Um novo conjunto de ferramentas foi adicionado para dar aos administradores mais controle.
Conceder Assinatura: Os administradores agora podem conceder manualmente qualquer plano de assinatura a qualquer usuário por um período específico. Isso é perfeito para lidar com pagamentos offline, fornecer acesso complementar ou fazer correções.
Revogar Acesso: O acesso a planos não recorrentes pode ser revogado imediatamente no painel do administrador.
7. Correção de Bug Crítico para Gerenciamento de Grupos
Um bug importante na lógica original de remoção de grupos foi corrigido. Quando uma assinatura é cancelada ou revogada, o sistema agora realiza uma “verificação de segurança” para ver se o usuário tem alguma outra assinatura ativa para o mesmo grupo. O usuário só será removido do grupo se não tiver outra forma válida de acessá-lo, evitando que usuários sejam removidos incorretamente.
Sim, sim, claro.. me dê apenas um dia. Corrigindo alguns bugs relacionados ao manuseio de dados legados do Stripe quando mudarmos para esta versão do plugin com novos campos.
Este guia irá guiá-lo através da configuração dos provedores de pagamento necessários e da criação de seus primeiros produtos e planos.
1. Configuração do Provedor
Primeiro, navegue até Admin > Configurações > Plugins e selecione seu provedor de pagamento principal na configuração discourse_subscriptions_payment_provider. Em seguida, siga as instruções para o provedor escolhido abaixo.
A) Configurando o Stripe
Se você escolheu o Stripe como seu provedor:
Preencha as Chaves de API: Em suas configurações do Discourse, forneça suas chaves de API do Stripe:
discourse_subscriptions_public_key (Sua chave Publicável do Stripe)
discourse_subscriptions_secret_key (Sua chave Secreta do Stripe)
Configure o Webhook: Esta etapa é crucial para rastrear pagamentos recorrentes, cancelamentos e outros eventos de assinatura.
No seu Painel do Stripe, navegue até Desenvolvedores > Webhooks.
Clique em “Adicionar um endpoint”.
Para a URL do Endpoint, insira: https://seu-url-discourse.com/s/hooks
Clique em “Selecionar eventos” e adicione os três eventos a seguir:
checkout.session.completed
customer.subscription.deleted
customer.subscription.updated
Clique em “Adicionar endpoint”.
Na página seguinte, localize o Segredo de Assinatura (começa com whsec_...).
Copie este segredo e cole-o na configuração discourse_subscriptions_webhook_secret no Discourse.
B) Configurando o Razorpay
Se você escolheu o Razorpay como seu provedor:
Preencha as Chaves de API:
No seu Painel do Razorpay, vá para Configurações > Chaves de API para gerar um novo par de chaves.
Copie suas chaves e cole-as nas configurações correspondentes do Discourse:
discourse_subscriptions_razorpay_key_id
discourse_subscriptions_razorpay_key_secret
Configure o Webhook: Esta etapa é crucial para confirmar que um pagamento foi capturado com sucesso.
No seu Painel do Razorpay, vá para Configurações > Webhooks.
Clique em “+ Adicionar Novo Webhook”.
Para a URL do Webhook, insira: https://seu-url-discourse.com/s/hooks/razorpay
Crie um Segredo e guarde-o em segurança para a próxima etapa.
Em Eventos Ativos, selecione apenas payment.captured.
Clique em “Criar Webhook”.
Copie o segredo que você acabou de criar e cole-o na configuração discourse_subscriptions_razorpay_webhook_secret no Discourse.
2. Criando Produtos e Planos
Navegue até Admin > Plugins > Assinaturas para gerenciar seus produtos e planos.
Criar um Produto
Vá para a aba Produtos.
Clique em “Criar Novo Produto”.
Preencha os detalhes. O campo “Descrição” suporta markdown e será exibido aos usuários na nova página de preços.
Criar Planos para o Produto
Após criar um produto, clique no ícone de edição (✎) ao lado dele.
Na seção “Planos de Preços”, clique em “Adicionar Novo Plano”.
Você pode criar dois tipos de planos:
Para Criar um Plano Recorrente (ex: Mensal/Anual):
Marque a caixa “Plano Recorrente?”.
Defina o Valor e o Intervalo de Cobrança (mês, ano, etc.).
Atribua-o a um Grupo de Usuários.
Para Criar um Plano Único e de Duração Limitada (ex: Passe de 30 Dias):
Deixe a caixa “Plano Recorrente?”desmarcada.
Defina o Valor.
Um novo campo, “Duração (em dias)”, aparecerá. Insira o número de dias que o usuário deve ter acesso (ex: 30).
Atribua-o a um Grupo de Usuários.
3. Novas Ferramentas Administrativas
Esta versão inclui novas ferramentas para gerenciar assinaturas manualmente.
Concedendo uma Assinatura:
Na página principal Admin > Plugins > Assinaturas, clique no botão “Conceder Assinatura”.
No modal que aparece, selecione um nome de usuário e um plano.
Se o plano escolhido for um plano único, você pode especificar uma duração em dias. Se deixar em branco, o usuário terá acesso permanente ao grupo associado.
Revogando uma Assinatura:
Navegue até a aba Assinaturas na seção de administração.
Qualquer assinatura não recorrente (ou seja, Manual ou Razorpay) terá um botão “Revogar Acesso”.
Clicar nisso removerá imediatamente o usuário do grupo associado, encerrando seu acesso.
Atualizei o repositório com as seguintes alterações/correções. Estou pronto para instalá-lo e usá-lo em meu site de produção.
Resumo das Melhorias de Estabilidade e Segurança
1. Integração Moderna do Stripe Checkout O plugin foi atualizado para usar o fluxo moderno do Stripe Checkout baseado em redirecionamento.
O que isso significa: Em vez de um formulário de cartão de crédito na página, os usuários agora são enviados para uma página segura hospedada pelo Stripe para concluir o pagamento.
Por que é melhor: Esta é a abordagem recomendada pelo Stripe. Melhora a segurança, reduz o ônus de conformidade PCI do seu site e oferece uma melhor experiência ao usuário com suporte a métodos como Apple Pay e Google Pay.
2. Lógica de Recompra Sólida como Rocha A lógica que impede os usuários de recomprar um produto para o qual já possuem uma assinatura ativa foi completamente reformulada.
A Correção: Adicionamos o product_id a cada registro de assinatura local. A verificação é agora uma consulta simples e extremamente rápida em seu banco de dados local, com zero chamadas de API externas, tornando-a 100% confiável.
O Resultado: Um usuário com uma assinatura ativa (recorrente ou por tempo limitado) agora será corretamente bloqueado de recomprar o mesmo produto até que ele expire.
3. Integridade dos Dados em Todos os Painéis A página de faturamento do usuário e o painel de assinaturas do administrador foram corrigidos para garantir que sempre exibam dados precisos e em tempo real.
A Correção: Ambas as páginas agora buscam o status mais recente e as datas de renovação/expiração de cada assinatura diretamente do provedor de pagamento (Stripe).
O Resultado: O que você vê no painel de administração sempre corresponderá perfeitamente ao que o usuário vê, e ambos refletirão o verdadeiro estado da assinatura no Stripe. Os bugs que exibiam “N/A” para detalhes do plano ou status “ativos” incorretos foram resolvidos.
4. Processamento Robusto de Webhook e Tarefas
Chega de Assinaturas Duplicadas: O manipulador de webhook foi corrigido para lidar corretamente com a sequência de eventos do Stripe, garantindo que uma transação crie exatamente uma assinatura.
Tarefa de Expiração Confiável: A tarefa diária em segundo plano que expira planos de uso único foi reforçada. Agora ela define corretamente a chave de API necessária e expirará uma assinatura mesmo que o plano original tenha sido excluído do Stripe, garantindo que suas permissões de grupo estejam sempre precisas.
No entanto, não podemos simplesmente mesclar alterações muito grandes de uma vez. Se você quiser que essas alterações sejam mescladas no plugin discourse-subscriptions, você precisará dividir cada alteração individualmente e criar PRs separadas com testes. Além disso, por favor, certifique-se de que não haja alterações que quebrem usuários existentes que já estão usando o plugin de assinaturas e já possuem muitos assinantes.