Monetizzo i miei forum utilizzando un plugin Discourse che ho scritto per accettare pagamenti tramite Stripe Checkout (versione 1).
È stato semplice perché Stripe gestiva l’intero flusso di pagamento sul lato client (JavaScript), con un’unica callback al termine dell’operazione, sia essa andata a buon fine o meno.
Con l’imminente arrivo di nuove normative UE, Stripe richiede ora l’implementazione della versione 2 di Checkout, nota anche come “Payment Intents”, con una scadenza per la transizione fissata a settembre 2019.
Questo rappresenta un problema perché, per quanto riesco a capire, entrambe le API adottano un flusso di lavoro più complesso, che richiede all’utente di effettuare polling sull’API per attendere il completamento del pagamento oppure di utilizzare web-hook.
Sono molto preoccupato di dover modificare il mio plugin perché:
Non sono uno sviluppatore Ruby / Ember molto esperto (ho ripreso gran parte del codice da un plugin esistente per crearne uno mio)
Non so se l’API dei plugin di Discourse offra un meccanismo adatto per implementare questo tipo di polling (dove il risultato finale è molto importante)
Qualcuno ha esperienza di: a) integrazione di Stripe V2 Checkout o Payment Intents con Discourse, oppure b) gestione del polling lato server tramite un plugin di Discourse?
Sembra che tu debba chiedere donazioni per aggiornare il tuo plugin delle donazioni.
Sto lavorando anch’io a un plugin per Stripe. E vedo che è alla v1.
EDIT: Oh!, ma forse sono io sulla v3: (in plugin.rb):
register_html_builder('server:before-head-close') do
"<script src='https://js.stripe.com/v3/'></script>"
end
Sono quasi certo che per qualcuno come @angus o @joebuhlig polling e webhook non siano un grosso problema, ma temo di essere arrivato allo stesso punto in cui sei tu.
Ho provato ad aggiornare la Gemma Stripe all’ultima versione in questo modo:
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 felice di aiutare. Se potessi creare un branch sul plugin e darci il via con ciò che riesci a capire, lavorerò per darti alcuni suggerimenti specifici per assicurarci di arrivare alla fine prima della scadenza.