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?
Klingt so, als müsstest du Spenden sammeln, um dein Spenden-Plugin aktualisieren zu lassen.
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.
Ich habe versucht, das Stripe-Gem wie folgt auf die neueste Version zu aktualisieren:
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)
@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.