集成新的 Stripe Checkout 或 Stripe Payment Intents 版本?

我使用自己编写的 Discourse 插件 来为论坛变现,该插件通过 Stripe Checkout(版本 1)接受付款。

这很简单,因为 Stripe 在(JavaScript)客户端处理了整个付款流程,并在付款成功/失败时触发单个回调。

随着 新的欧盟法规即将实施,Stripe 现在强制要求使用其 Checkout 版本 2 实现,即“支付意图(Payment Intents)”,过渡截止日期为 2019 年 9 月。

这带来了问题,因为(据我所知),这两个 API 都采用了更复杂的工作流程,需要消费者轮询其 API 以等待付款完成,或使用网络钩子(web-hooks)。

我对更改插件感到非常担忧,原因如下:

  • 我并不是很有经验的 Ruby/Ember 开发者(我的代码大部分是从一个 现有插件 中借鉴而来的)
  • 我不确定 Discourse 插件 API 是否提供了适合实现此类轮询的机制(最终结果至关重要)

是否有人有以下经验:a) 将 Stripe V2 Checkout 或 Payment Intents 集成到 Discourse 中,或 b) 通过 Discourse 插件处理服务器轮询?

提前感谢 :+1:

听起来你需要请求捐款来更新你的捐款插件。:slight_smile:

我自己也在开发一个 Stripe 插件。我看到它还是 v1 版本。

编辑:哦!但也许我已经在用 v3 了:(在 plugin.rb 中):

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

我相当肯定,对于像 @angus@joebuhlig 这样的人来说,轮询和 Web 钩子并不是什么大问题,但恐怕我目前的情况和你一样。:frowning:

我一直试图这样将 Stripe Gem 更新到最新版本:

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

但它报错如下:

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 使用的是 3.28.0,但它仍然在调用 v1 API。

编辑:我没看到 v2 API。API upgrades | Stripe Documentation 似乎仍然显示 v1。我已根据 Stripe Login | Sign in to the Stripe Dashboard 升级到最新版本。

@ChrisBeach 很乐意提供帮助。如果你能在插件上创建一个分支,并把我们带到你目前能搞定的部分,我会在 / 给你一些具体的指导,确保我们能在截止日期前完成。

@Angus 这是一个非常友善的提议,我真的很感激。当我开始着手集成工作时,我会告知你。

我已在本地成功更新 stripe gem,步骤如下:

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

然后执行 /discourse$ bundle exec rake db:migrate

好消息,在英国,升级 Stripe 支付集成的压力暂时解除了:

我想试试这个插件。它与最新的 Discourse 2.4 兼容吗?谢谢!

是的,我目前在我的论坛 https://se23.life 上使用它。