spree_adyen 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +9 -0
- data/README.md +59 -0
- data/Rakefile +26 -0
- data/app/assets/config/spree_adyen_manifest.js +5 -0
- data/app/controllers/spree_adyen/apple_pay_domain_verification_controller.rb +11 -0
- data/app/controllers/spree_adyen/payment_sessions_controller.rb +67 -0
- data/app/controllers/spree_adyen/store_controller_decorator.rb +9 -0
- data/app/controllers/spree_adyen/webhooks_controller.rb +46 -0
- data/app/helpers/spree_adyen/base_helper.rb +18 -0
- data/app/javascript/spree_adyen/application.js +17 -0
- data/app/javascript/spree_adyen/controllers/checkout_adyen_controller.js +80 -0
- data/app/javascript/spree_adyen/controllers/redirect_adyen_controller.js +35 -0
- data/app/jobs/spree_adyen/add_allowed_origin_job.rb +24 -0
- data/app/jobs/spree_adyen/base_job.rb +5 -0
- data/app/jobs/spree_adyen/webhooks/process_authorisation_event_job.rb +10 -0
- data/app/jobs/spree_adyen/webhooks/process_cancellation_event_job.rb +10 -0
- data/app/jobs/spree_adyen/webhooks/process_capture_event_job.rb +10 -0
- data/app/models/spree/payment_sessions/adyen.rb +59 -0
- data/app/models/spree_adyen/base.rb +6 -0
- data/app/models/spree_adyen/custom_domain_decorator.rb +17 -0
- data/app/models/spree_adyen/gateway/payment_sessions.rb +151 -0
- data/app/models/spree_adyen/gateway.rb +487 -0
- data/app/models/spree_adyen/order_decorator.rb +23 -0
- data/app/models/spree_adyen/payment_decorator.rb +66 -0
- data/app/models/spree_adyen/payment_method_decorator.rb +15 -0
- data/app/models/spree_adyen/payment_session.rb +121 -0
- data/app/models/spree_adyen/payment_sources/ach_direct_debit.rb +17 -0
- data/app/models/spree_adyen/payment_sources/affirm.rb +17 -0
- data/app/models/spree_adyen/payment_sources/afterpay.rb +17 -0
- data/app/models/spree_adyen/payment_sources/alipay.rb +19 -0
- data/app/models/spree_adyen/payment_sources/alipay_hk.rb +17 -0
- data/app/models/spree_adyen/payment_sources/alma.rb +17 -0
- data/app/models/spree_adyen/payment_sources/ancv.rb +17 -0
- data/app/models/spree_adyen/payment_sources/apple_pay.rb +19 -0
- data/app/models/spree_adyen/payment_sources/atome.rb +17 -0
- data/app/models/spree_adyen/payment_sources/bacs.rb +17 -0
- data/app/models/spree_adyen/payment_sources/bancontact.rb +19 -0
- data/app/models/spree_adyen/payment_sources/bank_transfer.rb +17 -0
- data/app/models/spree_adyen/payment_sources/base.rb +7 -0
- data/app/models/spree_adyen/payment_sources/bcmc.rb +17 -0
- data/app/models/spree_adyen/payment_sources/bcmc_mobile.rb +17 -0
- data/app/models/spree_adyen/payment_sources/benefit.rb +17 -0
- data/app/models/spree_adyen/payment_sources/billie.rb +17 -0
- data/app/models/spree_adyen/payment_sources/bizum.rb +17 -0
- data/app/models/spree_adyen/payment_sources/blik.rb +15 -0
- data/app/models/spree_adyen/payment_sources/boleto.rb +17 -0
- data/app/models/spree_adyen/payment_sources/cash_app_afterpay.rb +17 -0
- data/app/models/spree_adyen/payment_sources/cashapp.rb +17 -0
- data/app/models/spree_adyen/payment_sources/clearpay.rb +17 -0
- data/app/models/spree_adyen/payment_sources/dana.rb +17 -0
- data/app/models/spree_adyen/payment_sources/doku.rb +19 -0
- data/app/models/spree_adyen/payment_sources/duitnow.rb +17 -0
- data/app/models/spree_adyen/payment_sources/ebanking_fi.rb +19 -0
- data/app/models/spree_adyen/payment_sources/eft_directdebit_ca.rb +19 -0
- data/app/models/spree_adyen/payment_sources/eftpos_australia.rb +19 -0
- data/app/models/spree_adyen/payment_sources/elo.rb +19 -0
- data/app/models/spree_adyen/payment_sources/eps.rb +19 -0
- data/app/models/spree_adyen/payment_sources/fastlane.rb +19 -0
- data/app/models/spree_adyen/payment_sources/fpx.rb +19 -0
- data/app/models/spree_adyen/payment_sources/gcash.rb +19 -0
- data/app/models/spree_adyen/payment_sources/gift_cards.rb +19 -0
- data/app/models/spree_adyen/payment_sources/giropay.rb +19 -0
- data/app/models/spree_adyen/payment_sources/givex.rb +19 -0
- data/app/models/spree_adyen/payment_sources/gopay_wallet.rb +19 -0
- data/app/models/spree_adyen/payment_sources/grabpay.rb +19 -0
- data/app/models/spree_adyen/payment_sources/grabpay_paylater.rb +19 -0
- data/app/models/spree_adyen/payment_sources/hipercard.rb +19 -0
- data/app/models/spree_adyen/payment_sources/ideal.rb +15 -0
- data/app/models/spree_adyen/payment_sources/kakaopay.rb +19 -0
- data/app/models/spree_adyen/payment_sources/kcp_naverpay.rb +19 -0
- data/app/models/spree_adyen/payment_sources/klarna.rb +32 -0
- data/app/models/spree_adyen/payment_sources/oney.rb +13 -0
- data/app/models/spree_adyen/payment_sources/online_banking_czech_republic.rb +15 -0
- data/app/models/spree_adyen/payment_sources/online_banking_poland.rb +15 -0
- data/app/models/spree_adyen/payment_sources/pay_by_bank.rb +15 -0
- data/app/models/spree_adyen/payment_sources/paypal.rb +15 -0
- data/app/models/spree_adyen/payment_sources/paypo.rb +15 -0
- data/app/models/spree_adyen/payment_sources/paysafecard.rb +15 -0
- data/app/models/spree_adyen/payment_sources/rate_pay_direct_debit.rb +15 -0
- data/app/models/spree_adyen/payment_sources/riverty.rb +15 -0
- data/app/models/spree_adyen/payment_sources/samsung_pay.rb +15 -0
- data/app/models/spree_adyen/payment_sources/scalapay.rb +13 -0
- data/app/models/spree_adyen/payment_sources/sepa_direct_debit.rb +15 -0
- data/app/models/spree_adyen/payment_sources/trustly.rb +15 -0
- data/app/models/spree_adyen/payment_sources/unknown.rb +19 -0
- data/app/models/spree_adyen/payment_sources/wechat_pay.rb +15 -0
- data/app/models/spree_adyen/store_decorator.rb +17 -0
- data/app/presenters/spree_adyen/address_presenter.rb +21 -0
- data/app/presenters/spree_adyen/application_info_presenter.rb +21 -0
- data/app/presenters/spree_adyen/cancel_payload_presenter.rb +31 -0
- data/app/presenters/spree_adyen/capture_payload_presenter.rb +36 -0
- data/app/presenters/spree_adyen/checkout_presenter.rb +51 -0
- data/app/presenters/spree_adyen/payment_sessions/request_payload_presenter.rb +140 -0
- data/app/presenters/spree_adyen/payments/request_payload_presenter.rb +85 -0
- data/app/presenters/spree_adyen/refund_payload_presenter.rb +38 -0
- data/app/presenters/spree_adyen/webhook_payload_presenter.rb +28 -0
- data/app/presenters/spree_adyen/webhooks/credit_card_presenter.rb +43 -0
- data/app/services/spree_adyen/gateways/add_allowed_origin.rb +36 -0
- data/app/services/spree_adyen/gateways/configuration.rb +41 -0
- data/app/services/spree_adyen/gateways/configure.rb +60 -0
- data/app/services/spree_adyen/payment_sessions/find_or_create.rb +51 -0
- data/app/services/spree_adyen/payment_sessions/process_with_result.rb +49 -0
- data/app/services/spree_adyen/webhooks/actions/create_source.rb +112 -0
- data/app/services/spree_adyen/webhooks/actions/find_or_create_credit_card.rb +33 -0
- data/app/services/spree_adyen/webhooks/event.rb +104 -0
- data/app/services/spree_adyen/webhooks/event_processors/authorisation_event_processor.rb +69 -0
- data/app/services/spree_adyen/webhooks/event_processors/cancellation_event_processor.rb +49 -0
- data/app/services/spree_adyen/webhooks/event_processors/capture_event_processor.rb +48 -0
- data/app/services/spree_adyen/webhooks/handle_event.rb +43 -0
- data/app/services/spree_adyen/webhooks/standard_hmac_validator.rb +37 -0
- data/app/views/layouts/spree_adyen/default.html.erb +14 -0
- data/app/views/spree/admin/payment_methods/configuration_guides/_spree_adyen.html.erb +14 -0
- data/app/views/spree/admin/payment_methods/custom_form_fields/_spree_adyen.html.erb +18 -0
- data/app/views/spree/admin/payment_methods/descriptions/_spree_adyen.html.erb +12 -0
- data/app/views/spree/admin/payments/source_forms/_spree_adyen.html.erb +7 -0
- data/app/views/spree/checkout/payment/_spree_adyen.html.erb +40 -0
- data/app/views/spree_adyen/_drop_in.html.erb +12 -0
- data/app/views/spree_adyen/_head.html.erb +2 -0
- data/app/views/spree_adyen/payment_sessions/redirect.html.erb +5 -0
- data/config/importmap.rb +7 -0
- data/config/initializers/spree.rb +34 -0
- data/config/initializers/spree_permitted_attributes.rb +5 -0
- data/config/locales/en.yml +11 -0
- data/config/routes.rb +35 -0
- data/db/migrate/20250630150000_setup_spree_adyen_models.rb +17 -0
- data/db/migrate/20250811140113_add_channel_to_adyen_payment_sessions.rb +10 -0
- data/db/migrate/20250813152608_add_return_url_to_spree_adyen_payment_sessions.rb +15 -0
- data/lib/generators/spree_adyen/install/install_generator.rb +20 -0
- data/lib/spree_adyen/configuration.rb +42 -0
- data/lib/spree_adyen/engine.rb +79 -0
- data/lib/spree_adyen/factories.rb +3 -0
- data/lib/spree_adyen/testing_support/factories/gateway_factory.rb +29 -0
- data/lib/spree_adyen/testing_support/factories/payment_session_factory.rb +40 -0
- data/lib/spree_adyen/version.rb +7 -0
- data/lib/spree_adyen.rb +39 -0
- data/lib/spree_api_v2/spree/api/v2/storefront/adyen/base_controller.rb +21 -0
- data/lib/spree_api_v2/spree/api/v2/storefront/adyen/payment_sessions_controller.rb +72 -0
- data/lib/spree_api_v2/spree_adyen/api/v2/storefront/payment_session_serializer.rb +21 -0
- data/vendor/javascript/@adyen--adyen-web.js +4 -0
- data/vendor/stylesheets/adyen.css +106 -0
- metadata +301 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentDecorator
|
|
3
|
+
def self.prepended(base)
|
|
4
|
+
base.state_machine.event :started_processing do
|
|
5
|
+
transition from: [:checkout, :pending, :completed, :processing, :capture_pending, :void_pending], to: :processing
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
base.state_machine.event :pend_capture do
|
|
9
|
+
transition from: [:pending, :processing, :checkout], to: :capture_pending
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
base.state_machine.event :pend_void do
|
|
13
|
+
transition from: [:pending, :processing, :checkout], to: :void_pending
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def capture!(amount = nil)
|
|
18
|
+
if payment_method.adyen? && !capture_pending?
|
|
19
|
+
request_capture!(amount)
|
|
20
|
+
else
|
|
21
|
+
super(amount)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def void_transaction!
|
|
26
|
+
if payment_method.adyen? && !void_pending?
|
|
27
|
+
request_void!
|
|
28
|
+
else
|
|
29
|
+
super
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Takes the amount in cents to request a capture of the payment.
|
|
34
|
+
# This is used instead of #capture! for Adyen that sends the capture result via a webhook.
|
|
35
|
+
def request_capture!(amount = nil)
|
|
36
|
+
return true if completed? || capture_pending?
|
|
37
|
+
|
|
38
|
+
amount ||= money.amount_in_cents
|
|
39
|
+
|
|
40
|
+
protect_from_connection_error do
|
|
41
|
+
response = payment_method.request_capture(amount, response_code, gateway_options)
|
|
42
|
+
handle_response(response, :pend_capture, :failure)
|
|
43
|
+
end
|
|
44
|
+
rescue Spree::Core::GatewayError
|
|
45
|
+
failure!
|
|
46
|
+
raise
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Sends a request to void the payment.
|
|
50
|
+
# This is used instead of #void_transaction! for Adyen that sends the void result via a webhook.
|
|
51
|
+
def request_void!
|
|
52
|
+
return true if void? || void_pending?
|
|
53
|
+
|
|
54
|
+
started_processing!
|
|
55
|
+
protect_from_connection_error do
|
|
56
|
+
response = payment_method.request_void(response_code, source, gateway_options)
|
|
57
|
+
handle_response(response, :pend_void, :failure)
|
|
58
|
+
end
|
|
59
|
+
rescue Spree::Core::GatewayError
|
|
60
|
+
failure!
|
|
61
|
+
raise
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
Spree::Payment.prepend(SpreeAdyen::PaymentDecorator)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentMethodDecorator
|
|
3
|
+
ADYEN_TYPE = 'SpreeAdyen::Gateway'.freeze unless const_defined?(:ADYEN_TYPE)
|
|
4
|
+
|
|
5
|
+
def self.prepended(base)
|
|
6
|
+
base.scope :adyen, -> { where(type: ADYEN_TYPE) }
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def adyen?
|
|
10
|
+
type == ADYEN_TYPE
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
Spree::PaymentMethod.prepend(SpreeAdyen::PaymentMethodDecorator)
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
class PaymentSession < Base
|
|
3
|
+
AVAILABLE_CHANNELS = {
|
|
4
|
+
ios: 'iOS',
|
|
5
|
+
android: 'Android',
|
|
6
|
+
web: 'Web'
|
|
7
|
+
}.freeze
|
|
8
|
+
|
|
9
|
+
acts_as_paranoid
|
|
10
|
+
#
|
|
11
|
+
# Associations
|
|
12
|
+
#
|
|
13
|
+
belongs_to :order, class_name: 'Spree::Order'
|
|
14
|
+
belongs_to :payment_method, class_name: 'Spree::PaymentMethod'
|
|
15
|
+
belongs_to :user, class_name: Spree.user_class.name, optional: true
|
|
16
|
+
|
|
17
|
+
#
|
|
18
|
+
# Attributes
|
|
19
|
+
#
|
|
20
|
+
attribute :skip_expiration_date_validation, :boolean, default: false
|
|
21
|
+
|
|
22
|
+
#
|
|
23
|
+
# Validations
|
|
24
|
+
#
|
|
25
|
+
validates :order, :payment_method, presence: true
|
|
26
|
+
validates :adyen_id, uniqueness: true, presence: true
|
|
27
|
+
validates :adyen_data, :status, :expires_at, presence: true
|
|
28
|
+
validates :amount, presence: true, numericality: { greater_than: 0 }
|
|
29
|
+
validates :currency, presence: true
|
|
30
|
+
validates :channel, presence: true, inclusion: { in: AVAILABLE_CHANNELS.values }
|
|
31
|
+
validates :return_url, presence: true
|
|
32
|
+
|
|
33
|
+
validate :amount_cannot_be_greater_than_payment_allowed_amount
|
|
34
|
+
validate :currency_matches_order_currency
|
|
35
|
+
validate :expiration_date_cannot_be_in_the_past_or_later_than_24_hours, on: :create, unless: :skip_expiration_date_validation
|
|
36
|
+
|
|
37
|
+
scope :not_expired, -> { where('expires_at > ?', DateTime.current) }
|
|
38
|
+
|
|
39
|
+
state_machine :status, initial: :initial do
|
|
40
|
+
event :pending do
|
|
41
|
+
transition %i[initial] => :pending
|
|
42
|
+
end
|
|
43
|
+
event :complete do
|
|
44
|
+
transition %i[pending initial] => :completed
|
|
45
|
+
end
|
|
46
|
+
event :cancel do
|
|
47
|
+
transition %i[pending initial] => :canceled
|
|
48
|
+
end
|
|
49
|
+
event :refuse do
|
|
50
|
+
transition %i[pending initial] => :refused
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
#
|
|
55
|
+
# Callbacks
|
|
56
|
+
#
|
|
57
|
+
before_validation :set_amount_from_order
|
|
58
|
+
before_validation :set_currency_from_order
|
|
59
|
+
before_validation :set_default_channel, on: :create, if: -> { channel.blank? }
|
|
60
|
+
before_validation :set_return_url, on: :create, if: -> { return_url.blank? }
|
|
61
|
+
before_validation :create_session_in_adyen, on: :create
|
|
62
|
+
|
|
63
|
+
#
|
|
64
|
+
# Delegations
|
|
65
|
+
#
|
|
66
|
+
delegate :store, :currency, to: :order
|
|
67
|
+
|
|
68
|
+
private
|
|
69
|
+
|
|
70
|
+
def set_amount_from_order
|
|
71
|
+
self.amount ||= order&.total_minus_store_credits
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def set_currency_from_order
|
|
75
|
+
self.currency = order&.currency
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def set_default_channel
|
|
79
|
+
self.channel = AVAILABLE_CHANNELS[:web]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def set_return_url
|
|
83
|
+
return if order.blank?
|
|
84
|
+
|
|
85
|
+
self.return_url = "#{order.store.storefront_url}/adyen/payment_sessions/redirect"
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def expiration_date_cannot_be_in_the_past_or_later_than_24_hours
|
|
89
|
+
errors.add(:expires_at, "can't be in the past") if expires_at.present? && expires_at < DateTime.current
|
|
90
|
+
|
|
91
|
+
return unless expires_at.present? && expires_at > 24.hours.from_now
|
|
92
|
+
|
|
93
|
+
errors.add(:expires_at, "can't be more than 24 hours from now")
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def currency_matches_order_currency
|
|
97
|
+
errors.add(:currency, 'must match order currency') if currency != order&.currency
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def amount_cannot_be_greater_than_payment_allowed_amount
|
|
101
|
+
return if order.nil?
|
|
102
|
+
|
|
103
|
+
allowed_payment_amount = order.total_minus_store_credits - order.payment_total
|
|
104
|
+
errors.add(:amount, "can't be greater than allowed payment amount of #{allowed_payment_amount}") if amount > allowed_payment_amount
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def create_session_in_adyen
|
|
108
|
+
return if adyen_id.present?
|
|
109
|
+
|
|
110
|
+
response = payment_method.create_adyen_session(amount, order, channel, return_url)
|
|
111
|
+
return unless response.success?
|
|
112
|
+
|
|
113
|
+
self.adyen_id = response.params['id']
|
|
114
|
+
self.adyen_data = response.params['sessionData']
|
|
115
|
+
self.expires_at = response.params['expiresAt']
|
|
116
|
+
rescue Spree::Core::GatewayError
|
|
117
|
+
# Let validations handle missing adyen_id, adyen_data, expires_at
|
|
118
|
+
nil
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentSources
|
|
3
|
+
class AchDirectDebit < ::Spree::PaymentSource
|
|
4
|
+
def actions
|
|
5
|
+
%w[credit void]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.display_name
|
|
9
|
+
'ACH Direct Debit'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def display_payment_info
|
|
13
|
+
'ACH Direct Debit'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentSources
|
|
3
|
+
class Alipay < ::Spree::PaymentSource
|
|
4
|
+
store_accessor :public_metadata, :buyer_id, :buyer_logon_id, :trade_no
|
|
5
|
+
|
|
6
|
+
def actions
|
|
7
|
+
%w[credit void]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.display_name
|
|
11
|
+
'Alipay'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def display_buyer_info
|
|
15
|
+
"Alipay: #{buyer_logon_id}"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentSources
|
|
3
|
+
class ApplePay < ::Spree::PaymentSource
|
|
4
|
+
store_accessor :public_metadata, :payment_data, :payment_method, :transaction_identifier
|
|
5
|
+
|
|
6
|
+
def actions
|
|
7
|
+
%w[credit void capture]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.display_name
|
|
11
|
+
'Apple Pay'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def display_payment_info
|
|
15
|
+
"Apple Pay: #{payment_method}"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentSources
|
|
3
|
+
class Bacs < ::Spree::PaymentSource
|
|
4
|
+
def actions
|
|
5
|
+
%w[credit void capture]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.display_name
|
|
9
|
+
'BACS Direct Debit'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def display_payment_info
|
|
13
|
+
'BACS Direct Debit'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentSources
|
|
3
|
+
class Bancontact < ::Spree::PaymentSource
|
|
4
|
+
store_accessor :public_metadata, :bank_code, :card_number
|
|
5
|
+
|
|
6
|
+
def actions
|
|
7
|
+
%w[credit]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.display_name
|
|
11
|
+
'Bancontact'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def display_card_info
|
|
15
|
+
"Card: #{card_number} (Bank: #{bank_code})"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentSources
|
|
3
|
+
class BankTransfer < ::Spree::PaymentSource
|
|
4
|
+
def actions
|
|
5
|
+
%w[credit void]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.display_name
|
|
9
|
+
'Bank transfer'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def display_payment_info
|
|
13
|
+
'Bank transfer'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentSources
|
|
3
|
+
class Bcmc < ::Spree::PaymentSource
|
|
4
|
+
def actions
|
|
5
|
+
%w[credit void]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.display_name
|
|
9
|
+
'Bancontact card'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def display_payment_info
|
|
13
|
+
'Bancontact card'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentSources
|
|
3
|
+
class BcmcMobile < ::Spree::PaymentSource
|
|
4
|
+
def actions
|
|
5
|
+
%w[credit void]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.display_name
|
|
9
|
+
'Bancontact mobile'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def display_payment_info
|
|
13
|
+
'Bancontact mobile'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentSources
|
|
3
|
+
class Boleto < ::Spree::PaymentSource
|
|
4
|
+
def actions
|
|
5
|
+
%w[credit void]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.display_name
|
|
9
|
+
'Boleto Bancário'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def display_payment_info
|
|
13
|
+
'Boleto Bancário'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentSources
|
|
3
|
+
class CashAppAfterpay < ::Spree::PaymentSource
|
|
4
|
+
def actions
|
|
5
|
+
%w[credit void]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.display_name
|
|
9
|
+
'Cash App Afterpay'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def display_payment_info
|
|
13
|
+
'Cash App Afterpay'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentSources
|
|
3
|
+
class Cashapp < ::Spree::PaymentSource
|
|
4
|
+
def actions
|
|
5
|
+
%w[credit void]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.display_name
|
|
9
|
+
'Cash App Pay'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def display_payment_info
|
|
13
|
+
'Cash App Pay'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentSources
|
|
3
|
+
class Clearpay < ::Spree::PaymentSource
|
|
4
|
+
def actions
|
|
5
|
+
%w[credit void capture]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.display_name
|
|
9
|
+
'Clearpay'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def display_payment_info
|
|
13
|
+
'Clearpay'
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module SpreeAdyen
|
|
2
|
+
module PaymentSources
|
|
3
|
+
class Doku < ::Spree::PaymentSource
|
|
4
|
+
store_accessor :public_metadata, :payment_reference
|
|
5
|
+
|
|
6
|
+
def actions
|
|
7
|
+
%w[credit void]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.display_name
|
|
11
|
+
'Doku Indomaret'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def display_payment_info
|
|
15
|
+
"Doku Indomaret: #{payment_reference}"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|