Integrando com o novo Stripe Checkout ou versão do Stripe Payment Intents?

Eu monetizo meus fóruns usando um plugin do Discourse que escrevi para aceitar pagamentos via Stripe Checkout (versão 1).

Isso foi simples, pois o Stripe gerenciava todo o fluxo de pagamento no lado do cliente (JavaScript), com um único callback quando o pagamento era bem-sucedido ou falhava.

Com novas regulamentações da UE se aproximando, o Stripe agora exige a implementação da versão 2 do Checkout, ou “Payment Intents”, com um prazo de transição de setembro de 2019.

Isso é problemático porque (tanto quanto pude ver), ambas as APIs usam um fluxo de trabalho mais complexo, exigindo que o consumidor consulte a API para aguardar a conclusão do pagamento ou usar webhooks.

Estou muito nervoso em alterar meu plugin porque:

  • Não sou um desenvolvedor Ruby / Ember muito experiente (copiei a maior parte do código de um plugin existente para criar o meu)
  • Não sei se a API de plugins do Discourse oferece um mecanismo adequado para implementar esse tipo de polling (onde o resultado final é muito importante)

Alguém tem experiência com a) integração do Stripe V2 Checkout ou Payment Intents com o Discourse, ou b) tratamento de polling no servidor por meio de um plugin do Discourse?

Obrigado antecipadamente :+1:

Parece que você vai precisar pedir doações para atualizar seu plugin de doações. :slight_smile:

Tenho trabalhado em um plugin do Stripe também. E vejo que é v1.

EDIT: Oh!, mas talvez eu esteja na v3: (em plugin.rb):

register_html_builder('server:before-head-close') do
  "<script src='https://js.stripe.com/v3/'></script>"
end

Tenho quase certeza de que, para alguém como @angus ou @joebuhlig, fazer polling e usar webhooks não é grande coisa, mas receio que eu esteja exatamente onde você está. :frowning:

Tenho tentado atualizar o Gem do Stripe para a versão mais recente assim:

gem 'net-http-persistent', '3.0.1'
gem 'stripe', '4.21.2'

e está falhando assim:

Traceback (most recent call last):
/home/pfaffman/src/discourse/bin/unicorn: Bootsnap::LoadPathCache::FallbackScan
        34: from /home/pfaffman/src/discourse/bin/unicorn:49:in `<main>'
        33: from /home/pfaffman/src/discourse/bin/unicorn:49:in `load'
        32: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/unicorn-5.5.1/bin/unicorn:128:in `<top (required)>'
        31: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:141:in `start'
        30: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:794:in `build_app!'
        29: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/unicorn-5.5.1/lib/unicorn.rb:54:in
`block in builder'
        28: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/unicorn-5.5.1/lib/unicorn.rb:54:in
`eval'
        27: from config.ru:1:in `<main>'
        26: from config.ru:1:in `new'
        25: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.0.7/lib/rack/builder.rb:55:in `initialize'
        24: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rack-2.0.7/lib/rack/builder.rb:55:in `instance_eval'
        23: from config.ru:7:in `block in <main>'
        22: from config.ru:7:in `require'
        21: from /home/pfaffman/src/discourse/config/environment.rb:4:in `<top (required)>'
        20: from /home/pfaffman/src/discourse/config/environment.rb:4:in `require'
        19: from /home/pfaffman/src/discourse/config/application.rb:57:in `<top (required)>'
        18: from /home/pfaffman/src/discourse/config/application.rb:58:in `<module:Discourse>'
        17: from /home/pfaffman/src/discourse/config/application.rb:261:in `<class:Application>'
        16: from lib/discourse.rb:168:in `activate_plugins!'
        15: from lib/discourse.rb:168:in `each'
        14: from lib/discourse.rb:171:in `block in activate_plugins!'
        13: from /home/pfaffman/src/discourse/lib/plugin/instance.rb:490:in `activate!'
        12: from /home/pfaffman/src/discourse/lib/plugin/instance.rb:490:in `instance_eval'
        11: from /home/pfaffman/src/discourse/plugins/lc-billing/plugin.rb:8:in `activate!'
        10: from /home/pfaffman/src/discourse/lib/plugin/instance.rb:564:in `gem'
         9: from /home/pfaffman/src/discourse/lib/plugin_gem.rb:22:in `load'
         8: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `require'
         7: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:257:in `load_dependency'
         6: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/dependencies.rb:291:in `block in require'
         5: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:26:in `require'
         4: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:40:in `rescue in require'
         3: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi'
         2: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/loaded_features_index.rb:89:in `register'
         1: from /home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi'
/home/pfaffman/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require': cannot load such file -- net-http-persistent (LoadError)

procourse memberships usa 3.28.0, mas ainda faz chamadas à API v1.

EDIT: Não vejo uma API v2. API upgrades | Stripe Documentation parece ainda mostrar v1. Atualizei para a versão mais recente conforme Stripe Login | Sign in to the Stripe Dashboard

@ChrisBeach, feliz em ajudar. Se você puder criar uma branch no plugin e nos dar um pontapé inicial com o que conseguir identificar, eu trabalharei e darei algumas orientações específicas para garantir que concluamos tudo antes do prazo.

@Angus, essa é uma oferta gentil que eu realmente aprecio. Vou te avisar quando começar a trabalhar na integração.

Atualizei com sucesso o gem stripe localmente da seguinte forma:

gem 'net-http-persistent', '3.0.1', {require: false}
gem 'stripe', '4.21.3'

E então /discourse$ bundle exec rake db:migrate

Boas notícias: a pressão para atualizar a integração de pagamentos com o Stripe foi aliviada (pelo menos no Reino Unido):

Estou interessado em experimentar este plugin. Ele está funcionando com a versão mais recente do Discourse 2.4? Obrigado!

Sim, estou usando atualmente no meu fórum https://se23.life