Forçando uma assinatura do discourse a ser um pagamento único

Em relação ao plugin Discourse Subscriptions, o que aconteceria se eu alterasse algumas configurações diretamente no Stripe? Por exemplo, pelo Discourse, não é possível configurar um plano de produto como pagamento único. Ele precisa ser uma assinatura diária, semanal, mensal ou anual. Mas, se eu acessar o stripe.com, posso alterar uma assinatura existente para um pagamento único. Posso fazer isso? Como essa alteração afetaria o funcionamento desse plano no Discourse? Ele se tornaria, então, um pagamento único?

Definitivamente é possível! Se você desmarcar a caixa de seleção de recorrência na tela de criação do plano, ele será um pagamento único.

No entanto, você não pode alterar planos existentes depois de criá-los.

Você tem razão! Eu tive um lapsos de memória. O que eu realmente queria perguntar é se é possível ou não ter um pagamento único que termine, e não continue indefinidamente. Por exemplo, algo como um “passe diário”, onde você paga US$ 5 e é adicionado a um grupo especial, e depois, digamos, um dia, a assinatura termina e você é removido do grupo até pagar novamente. Isso é possível?

Infelizmente, não neste momento.

Faço algo assim em um plugin. Eu (de forma flexível) adiciono ao modelo user_group uma ação que, quando um usuário é adicionado ao grupo de assinatura, executa uma ação e, em seguida, remove o usuário do grupo. No seu caso, você faria com que, ao adicionar o usuário ao grupo one-off-weeklong, a assinatura:

  • adicionasse o usuário ao grupo weeklong, que concede permissão a determinadas categorias;
  • adicionasse um trabalho que removeria o usuário do grupo weeklong ao final da semana;
  • adicionasse um campo personalizado ao usuário com a data de início da semana, para que você pudesse removê-lo caso ocorra algum desastre no Redis;
  • removesse o usuário do grupo one-off-weeklong.

Se você tiver interesse nisso, pode entrar em contato comigo ou postar em Marketplace.

Mas isso é bobo. Em vez disso, basta adicionar um callback para a assinatura (se for uma assinatura) ou cliente (se for um pagamento único). Cliente é um nome um tanto inadequado. Ele tem o ID do cliente do Stripe e o ID do produto do Stripe. Então faça algo como

add_model_callback(DiscourseSubscriptions::Subscription, :after_save) do
      Rails.logger.warn("Agora temos uma assinatura #{self.external_id} para #{self.customer_id}")
      # fazer coisas
end

  add_model_callback(DiscourseSubscriptions::Customer, :after_save) do
    Rails.logger.warn("Cliente #{self.product_id} para #{self.user_id}")
    # fazer mais coisas
end

Olá, você resolveu este problema?

Você pode fornecer mais orientações? Como implementar este recurso. Não estou familiarizado com Rails.. obrigado!

Acho que essa é a minha melhor resposta gratuita.

Eu resolvi isso modificando o plugin de assinatura do Discourse. Obrigado.

Mas descobri que não consigo excluir produtos, mesmo usando o plugin de assinatura original do Discourse. Você tem alguma ideia?

Você não precisa excluí-los. Eles não prejudicam nada. Eles são necessários como um registro das coisas que você vendeu. Você deve ser capaz de excluí-los do console do Stripe.

O Stripe também não permite a exclusão de produtos, mas eles podem ser desativados/arquivados.

Eles dizem:

Não sei se isso ainda é algo que você quer alcançar, ou se encontrou uma maneira de fazer isso? Parece que não é algo que seja integrado para ser automatizado com o Discourse, mas pode haver alguma outra maneira de fazer isso. Parece meio como um acordo de cafeteria onde você tem que comprar uma nova bebida todos os dias para poder sentar em uma de suas mesas.