Integration mit der neuen Stripe Checkout- oder Stripe Payment Intents-Version?

Ich monetisiere meine Foren mithilfe eines Discourse-Plugins, das ich geschrieben habe, um Zahlungen über Stripe Checkout (Version 1) zu akzeptieren.

Das war unkompliziert, da Stripe den gesamten Zahlungsablauf auf der Client-Seite (JavaScript) verwaltete, mit einem einzigen Callback bei Erfolg oder Fehlschlag der Zahlung.

Aufgrund der anbrechenden neuen EU-Verordnungen schreibt Stripe nun die Implementierung von Checkout Version 2, auch „Payment Intents“ genannt, vor. Die Umstellungsfrist endet im September 2019.

Das ist problematisch, denn (soweit ich das überblicke) verwenden beide APIs einen komplexeren Workflow. Dabei muss der Nutzer entweder seine API abfragen, um auf den Abschluss der Zahlung zu warten, oder Webhooks nutzen.

Ich bin sehr besorgt, mein Plugin ändern zu müssen, weil:

  • Ich kein besonders erfahrener Ruby- / Ember-Entwickler bin (ich habe den Großteil des Codes aus einem bestehenden Plugin übernommen, um meines zu erstellen)
  • Ich nicht weiß, ob die Discourse-Plugin-API einen geeigneten Mechanismus für die Implementierung dieser Art von Abfragen bietet (bei denen das Endergebnis sehr wichtig ist)

Hat jemand Erfahrung mit a) der Integration von Stripe V2 Checkout oder Payment Intents in Discourse oder b) der Handhabung von Server-Abfragen über ein Discourse-Plugin?

Vielen Dank im Voraus :+1:

Klingt so, als müsstest du Spenden sammeln, um dein Spenden-Plugin aktualisieren zu lassen. :slight_smile:

Ich arbeite selbst an einem Stripe-Plugin. Und ich sehe, dass es v1 ist.

EDIT: Oh!, aber vielleicht bin ich ja bei v3: (in plugin.rb):

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

Ich bin mir ziemlich sicher, dass für jemanden wie @angus oder @joebuhlig das Abfragen und Webhooks kein großes Problem darstellen, aber ich fürchte, ich stehe genau an dem Punkt, an dem du bist. :frowning:

Ich habe versucht, das Stripe-Gem wie folgt auf die neueste Version zu aktualisieren:

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

und es schlägt wie folgt fehl:

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 verwendet 3.28.0, aber das ruft immer noch die v1-API auf.

EDIT: Ich sehe keine v2-API. API upgrades | Stripe Documentation zeigt immer noch v1. Ich habe laut Stripe Login | Sign in to the Stripe Dashboard auf die neueste Version aktualisiert.

@ChrisBeach Gerne helfe ich dir. Wenn du einen Branch für das Plugin erstellen und uns mit dem starten könntest, was du bereits herausgefunden hast, werde ich mich einarbeiten und dir einige konkrete Hinweise geben, damit wir die Deadline sicher schaffen.

@Angus das ist ein sehr nettes Angebot, das ich wirklich zu schätzen weiß. Ich gebe dir Bescheid, sobald ich mit der Integration beginne.

Ich habe das Stripe-Gem lokal erfolgreich wie folgt aktualisiert:

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

Anschließend: /discourse$ bundle exec rake db:migrate

Gute Nachrichten: Der Druck, die Stripe-Zahlungsintegration zu aktualisieren, ist vorerst (zumindest im Vereinigten Königreich) abgewendet:

Ich bin daran interessiert, dieses Plugin auszuprobieren. Funktioniert es mit der neuesten Discourse 2.4? Danke!

Ja, ich verwende es derzeit auf meinem Forum https://se23.life