Plugin de Assinaturas do Discourse

Você configurou os webhooks corretamente? Lembro que eles eram bem complicados de configurar, e as instruções de como fazer isso poderiam ser um pouco mais claras.

Sim, configurei os webhooks corretamente, foi assim que a resposta fluiu de volta.

Descobri o problema. As instruções estão faltando um ponto onde temos que configurar as tags personalizadas com o nome do grupo para ser promovido na página de configuração de preços do Stripe.

Está funcionando bem agora para mim. O plugin é ótimo, mas a documentação não é detalhada.

1 curtida

Você pode explicar isso um pouco mais para que possamos ter alguém atualizando a documentação? Qual tag personalizada você adicionou e onde você a adicionou?

[Guia] Como Configurar Assinaturas do Discourse com Tabelas de Preços do Stripe (e Armadilhas Comuns)

Olá a todos,

Após um longo processo de solução de problemas, queria compartilhar um guia definitivo para configurar o plugin oficial discourse-subscriptions usando o método moderno de Tabela de Preços do Stripe. Essa abordagem é poderosa, mas tem algumas etapas críticas que não são imediatamente óbvias e podem levar a erros como webhooks falhando (404 Not Found) ou usuários não sendo adicionados a grupos após um pagamento bem-sucedido.

Aqui está o processo passo a passo que está confirmado que funciona.


Parte 1: Configuração do Stripe

Este processo usa o Stripe como a “fonte da verdade” para todos os produtos e preços.

1. Crie Seus Produtos e Preços

  • No seu Painel do Stripe, certifique-se de estar no Modo Ativo.
  • Vá para Produtos > Catálogo de produtos.
  • Crie seus produtos principais primeiro (por exemplo, “Assinatura Premium”, “Acesso VIP”).
  • Sob cada produto, crie todos os preços associados (por exemplo, XX / mês, XXX / ano).

2. O Passo CRUCIAL de Metadados Para que o plugin adicione automaticamente os usuários a um grupo, você deve adicionar metadados específicos a cada objeto de Preço que criar. A interface do painel do Stripe pode dificultar a localização.

  • Ao criar um novo preço (ou se puder encontrar a opção “Editar preço”), você deve adicionar metadados. Pode ser necessário clicar em “Opções adicionais” durante a criação do preço para revelar os campos de metadados.
  • Clique em + Adicionar metadados e insira o seguinte:
    • CHAVE: group_name
    • VALOR: O slug/identificador único e seguro para URL do grupo no Discourse, não seu nome completo.

Exemplo:

  • Se o nome completo do seu grupo no Discourse for “Enclave Plus”, seu slug provavelmente será EnclavePlus.
  • Você deve usar EnclavePlus como valor. Usar "Enclave Plus" com um espaço falhará.
  • Você deve repetir isso para cada plano de preço que deseja vincular a um grupo.

3. Crie Sua Tabela de Preços do Stripe

  • Vá para Produtos > Tabelas de preços.
  • Crie uma nova tabela e adicione os Preços que você acabou de configurar.
  • Após publicar a tabela, clique no botão “Copiar código” para obter seu ID da Tabela de Preços (começa com prctbl_...).

4. Configure o Endpoint do Webhook (A Correção do Erro 404) Este é o ponto de falha mais comum.

  • Vá para Desenvolvedores > Webhooks e clique em + Adicionar endpoint.
  • A URL do Endpoint deve estar no seguinte formato: https://seusite-discourse.com/s/hooks
  • Nota: O caminho correto é /s/hooks, não /s/stripe/webhook.
  • Para Eventos a serem enviados, adicione no mínimo:
    • checkout.session.completed
    • customer.subscription.deleted
  • Crie o endpoint e copie o Segredo de assinatura (começa com whsec_...).

Parte 2: Configuração do Discourse

Agora, vamos configurar o plugin para usar tudo o que você configurou no Stripe.

1. Insira as Chaves de API e o ID da Tabela de Preços

  • Vá para Admin > Configurações e procure por discourse subscriptions.
  • Preencha suas chaves do Stripe em modo ativo:
    • discourse subscriptions public key (pk_live_...)
    • discourse subscriptions secret key (sk_live_...)
    • discourse subscriptions webhook secret (whsec_...)
  • Habilite o modo de tabela de preços:
    • Marque a caixa para discourse subscriptions pricing table enabled.
    • Cole seu ID prctbl_... no campo discourse subscriptions pricing table id.

2. Vincule Produtos do Stripe a Grupos do Discourse Mesmo com uma tabela de preços, você precisa dizer ao Discourse qual grupo pertence a qual produto.

  • Vá para Admin > Plugins > Subscriptions e clique na aba Produtos.
  • Clique em Criar Novo Produto.
  • Insira um Nome do Produto que corresponda exatamente ao Nome do Produto no Stripe (por exemplo, Enclave Plus).
  • Salve o produto. Na página do produto, role para baixo e clique em Adicionar Novo Plano.
  • Este plano é apenas uma “ponte”. O único campo crítico é Grupo de Usuários.
    • Apelido do Plano: Enlace de Grupo Enclave Plus (ou qualquer coisa para sua referência).
    • Grupo de Usuários: Selecione o grupo correto do Discourse no menu suspenso.
    • Os outros campos (Valor, Intervalo) podem ser deixados como padrão, pois serão ignorados.
  • Salve o plano. Repita isso para todos os seus diferentes produtos.

Resumo de Solução de Problemas

  • Problema: Webhooks falhando com um erro 404 Not Found.
    • Solução: Sua URL do Endpoint no Stripe está incorreta. Deve ser https://seusite-discourse.com/s/hooks.
  • Problema: O webhook é bem-sucedido (200 OK) e o pagamento aparece no perfil de faturamento do usuário, mas ele não é adicionado ao grupo.
    • Solução: Seus metadados estão incorretos. Verifique três coisas:
      1. Os metadados devem estar no objeto Preço do Stripe, não no objeto Produto.
      2. A CHAVE dos metadados deve ser exatamente group_name.
      3. O VALOR dos metadados deve ser o slug/identificador único do grupo (por exemplo, EnclavePlus), não seu nome completo com espaços.

Espero que este guia poupe tempo e frustração de outras pessoas com esta configuração complexa, mas muito poderosa.

5 curtidas

[quote=“SubStrider, post:712, topic:140818”]
4. Configure o Endpoint do Webhook (A Correção do Erro 404) Este é o ponto de falha mais comum.

  • Vá para **Developers "
4 curtidas

A parte crucial que falta na documentação é esta. Estou apontando porque você citou outra parte.

2 curtidas

Existe alguma forma de definir automaticamente a data de ancoragem com isso? Se alguém paga, tenho que ajustar manualmente o período de assinatura para que ele seja redefinido no primeiro dia do mês para cada usuário.

A documentação do Stripe diz que isso pode ser feito com a API no checkout, mas atualmente não temos como ajustá-lo no plugin.

Movendo isto para o novo tópico, pois pode ficar longo à medida que posto atualizações.

3 curtidas

:partying_face: Este plugin agora está incluído no core do Discourse como parte de Bundling more popular plugins with Discourse core. Se você auto-hospeda e usa o plugin, precisa removê-lo do seu app.yml antes da sua próxima atualização.

2 curtidas

Como removo isso do core? Pois usarei o fork do plugin que aprimorei.

3 curtidas

Algo como

rm - rf discourse-subscroptions

Antes do git clone.

3 curtidas

Desculpe, não entendi. Durante a reconstrução, ele buscará este código de plugin integrado e o compilará, tudo em uma única etapa, não é?

Não testei isso, mas tenho quase certeza de que funcionará:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - rm -rf discourse-subscriptions
          - git clone https://github.com/yourForkUser/discourse-subscriptions

Como isso é executado a partir do diretório de plugins, ele removerá o discourse-subscriptions que agora está incluído no core e o substituirá pelo que você sempre usou antes. Portanto, adicionar apenas esse rm -rf ao seu app.yml antes do seu git clone (para este ou qualquer outro plugin que você não queira incluído ou queira substituir) deve fazer o que você deseja e substituir o plugin core pelo seu fork.

6 curtidas

Certo, então quando eles dizem que o plugin X faz parte do core agora, tudo o que eles querem dizer é que o plugin virá pré-empacotado no repositório principal, no diretório de plugins, e nós não teremos que puxar esse código opcionalmente. Entendi. Estruturalmente nada muda.

1 curtida

Se já estiver pré-empacotado agora. Perderei todos os dados na versão do plugin? Terei que configurá-lo tudo de novo ou ele será transferido?

Você não perderá dados. Basta remover a linha de app.yml e o plugin continuará funcionando como antes.

1 curtida

É o comportamento esperado que, após inserir um código de cupom, o valor total da assinatura não seja atualizado imediatamente?

Testado no Discourse 3.5.0.beta8-dev

Descobri que, se um usuário tenta se inscrever e o pagamento falha, a entrada na tabela discourse_subscriptions_customer que o associa ao seu ID de cliente Stripe é removida. Não tenho certeza se esse comportamento é intencional, mas, de qualquer forma, não acho que seja um bom comportamento, pois resulta em clientes órfãos no Stripe que precisam ser excluídos manualmente. Isso também resulta na criação de clientes duplicados se eles tentarem novamente, o que pode afetar nossos relatórios.

3 curtidas

Existe alguma maneira de redefinir a campanha? Estava esperando por uma meta de doação mensal, mas é o início de um novo mês e não vejo como redefini-la para zero para uma nova meta mensal.

Adoraria ver este plugin em ação em um site. Alguém estaria disposto a compartilhar o link do seu fórum que usa o Subscriptions Plugin? Obrigado!