¿Integrando con la nueva versión de Stripe Checkout o Stripe Payment Intents?

Monetizo mis foros mediante un plugin de Discourse que escribí para aceptar pagos a través de Stripe Checkout (versión 1).

Esto fue sencillo, ya que Stripe gestionaba todo el flujo de pagos en el lado del cliente (JavaScript), con una única devolución de llamada cuando el pago se completaba o fallaba.

Con las nuevas regulaciones de la UE que se avecinan, Stripe ahora exige la implementación de su Checkout versión 2, o “Payment Intents”, con un plazo de transición fijado para septiembre de 2019.

Esto es problemático porque, por lo que puedo ver, ambas APIs utilizan un flujo de trabajo más complejo, que requiere que el consumidor consulte su API para esperar la finalización del pago o utilice webhooks.

Estoy muy nervioso por cambiar mi plugin porque:

  • No soy un desarrollador muy experimentado en Ruby / Ember (copié la mayor parte del código de un plugin existente para crear el mío).
  • No sé si la API de plugins de Discourse proporciona un mecanismo adecuado para implementar este tipo de consultas, donde el resultado final es muy importante.

¿Alguien tiene experiencia con a) la integración de Stripe V2 Checkout o Payment Intents con Discourse, o b) la gestión de consultas del servidor mediante un plugin de Discourse?

Gracias de antemano :+1:

Parece que tendrás que pedir donaciones para actualizar tu plugin de donaciones. :slight_smile:

He estado trabajando en un plugin de Stripe yo mismo. Y veo que es v1.

EDIT: ¡Oh!, pero quizás estoy en la v3: (en plugin.rb):

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

Estoy bastante seguro de que para alguien como @angus o @joebuhlig, el polling y los webhooks no son gran cosa, pero me temo que estoy donde tú estás. :frowning:

He estado intentando actualizar la Gem de Stripe a la versión más reciente así:

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

y está fallando de la siguiente manera:

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, pero aún realiza llamadas a la API v1.

EDIT: No veo una API v2. API upgrades | Stripe Documentation parece seguir mostrando v1. He actualizado a la última versión según Stripe Login | Sign in to the Stripe Dashboard

@ChrisBeach encantado de ayudar. Si pudieras crear una rama en el plugin y ponernos en marcha con lo que logres averiguar, yo trabajaré en ello y te daré algunas indicaciones específicas para asegurarnos de que lo terminemos antes de la fecha límite.

@Angus, es una oferta muy amable que realmente aprecio. Te avisaré cuando comience a trabajar en la integración.

He actualizado la gema de Stripe con éxito en local de la siguiente manera:

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

Y luego /discourse$ bundle exec rake db:migrate

Buenas noticias: la presión para actualizar la integración de pagos de Stripe ha disminuido (al menos en el Reino Unido):

Me interesa probar este complemento. ¿Funciona con la última versión de Discourse 2.4? ¡Gracias!

Sí, lo estoy usando actualmente en mi foro https://se23.life