新しい Stripe Checkout または Stripe Payment Intents のバージョンとの統合について?

私は自作した Discourse プラグイン を使用してフォーラムを収益化しており、Stripe Checkout(バージョン 1)経由で決済を受け付けています。

Stripe が JavaScript クライアント側で決済ワークフロー全体を処理し、決済の成功/失敗時に単一のコールバックを返す仕組みだったため、これは比較的容易でした。

しかし、新たな EU 規制が迫る中、Stripe は Checkout バージョン 2 の実装、すなわち「Payment Intents」への移行を義務付けており、移行期限は 2019 年 9 月です。

これは問題です。私の理解する限り、これらの API はより複雑なワークフローを採用しており、決済完了を待つために API をポーリングするか、ウェブフックを使用する必要があります。

プラグインを変更することに非常に不安を感じています。その理由は以下の通りです。

  • 私は Ruby / Ember の開発経験があまりありません(私のプラグインは、既存の プラグイン のコードをほとんど流用して作成しました)
  • Discourse プラグイン API が、最終結果が極めて重要なこのようなポーリングを実装するための適切なメカニズムを提供しているかどうかがわからない

a) Discourse への Stripe V2 Checkout または Payment Intents の統合、または 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 memberships3.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 で使用しています。