Интеграция с новой версией Stripe Checkout или Stripe Payment Intents?

Я монетизирую свои форумы с помощью плагина Discourse, который написал сам, чтобы принимать платежи через Stripe Checkout (версия 1).

Это было просто, так как Stripe обрабатывал весь рабочий процесс оплаты на стороне клиента (JavaScript), с одним обратным вызовом при успешном завершении или сбое оплаты.

С надвигающимися новыми регуляциями ЕС Stripe теперь требует внедрения их Checkout версии 2, или «Payment Intents», со сроком перехода на сентябрь 2019 года.

Это проблематично, поскольку (насколько я могу судить) оба этих API используют более сложный рабочий процесс, требующий от потребителя опроса их API для ожидания завершения оплаты или использования веб-хуков.

Я очень нервничаю по поводу изменения своего плагина, потому что:

  • Я не очень опытный разработчик Ruby / Ember (я взял большую часть кода из существующего плагина и создал на его основе свой)
  • Я не знаю, предоставляет ли API плагинов Discourse подходящий механизм для реализации такого рода опроса (где конечный результат имеет решающее значение)

Есть ли у кого-нибудь опыт: а) интеграции Stripe V2 Checkout или Payment Intents с Discourse, или б) обработки опроса сервера через плагин 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, опрос и веб-хуки не являются большой проблемой, но боюсь, что я нахожусь примерно там же, где и вы. :frowning:

Я пытаюсь обновить Gem Stripe до последней версии следующим образом:

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, но это всё ещё делает вызовы к API v1.

РЕДАКТИРОВАНИЕ: Я не вижу API v2. API upgrades | Stripe Documentation всё ещё показывает v1. Я обновился до последней версии согласно Stripe Login | Sign in to the Stripe Dashboard

@ChrisBeach с радостью помогу. Если ты сможешь создать ветку в плагине и начать с того, что тебе удалось выяснить, я подключусь и дам конкретные указания, чтобы мы успели завершить всё до дедлайна.

@Angus, это очень любезно с вашей стороны, и я искренне это ценю. Дам знать, когда приступлю к работе над интеграцией.

Я успешно обновил gem Stripe на локальной машине следующим образом:

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