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.
Files changed (142) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +9 -0
  3. data/README.md +59 -0
  4. data/Rakefile +26 -0
  5. data/app/assets/config/spree_adyen_manifest.js +5 -0
  6. data/app/controllers/spree_adyen/apple_pay_domain_verification_controller.rb +11 -0
  7. data/app/controllers/spree_adyen/payment_sessions_controller.rb +67 -0
  8. data/app/controllers/spree_adyen/store_controller_decorator.rb +9 -0
  9. data/app/controllers/spree_adyen/webhooks_controller.rb +46 -0
  10. data/app/helpers/spree_adyen/base_helper.rb +18 -0
  11. data/app/javascript/spree_adyen/application.js +17 -0
  12. data/app/javascript/spree_adyen/controllers/checkout_adyen_controller.js +80 -0
  13. data/app/javascript/spree_adyen/controllers/redirect_adyen_controller.js +35 -0
  14. data/app/jobs/spree_adyen/add_allowed_origin_job.rb +24 -0
  15. data/app/jobs/spree_adyen/base_job.rb +5 -0
  16. data/app/jobs/spree_adyen/webhooks/process_authorisation_event_job.rb +10 -0
  17. data/app/jobs/spree_adyen/webhooks/process_cancellation_event_job.rb +10 -0
  18. data/app/jobs/spree_adyen/webhooks/process_capture_event_job.rb +10 -0
  19. data/app/models/spree/payment_sessions/adyen.rb +59 -0
  20. data/app/models/spree_adyen/base.rb +6 -0
  21. data/app/models/spree_adyen/custom_domain_decorator.rb +17 -0
  22. data/app/models/spree_adyen/gateway/payment_sessions.rb +151 -0
  23. data/app/models/spree_adyen/gateway.rb +487 -0
  24. data/app/models/spree_adyen/order_decorator.rb +23 -0
  25. data/app/models/spree_adyen/payment_decorator.rb +66 -0
  26. data/app/models/spree_adyen/payment_method_decorator.rb +15 -0
  27. data/app/models/spree_adyen/payment_session.rb +121 -0
  28. data/app/models/spree_adyen/payment_sources/ach_direct_debit.rb +17 -0
  29. data/app/models/spree_adyen/payment_sources/affirm.rb +17 -0
  30. data/app/models/spree_adyen/payment_sources/afterpay.rb +17 -0
  31. data/app/models/spree_adyen/payment_sources/alipay.rb +19 -0
  32. data/app/models/spree_adyen/payment_sources/alipay_hk.rb +17 -0
  33. data/app/models/spree_adyen/payment_sources/alma.rb +17 -0
  34. data/app/models/spree_adyen/payment_sources/ancv.rb +17 -0
  35. data/app/models/spree_adyen/payment_sources/apple_pay.rb +19 -0
  36. data/app/models/spree_adyen/payment_sources/atome.rb +17 -0
  37. data/app/models/spree_adyen/payment_sources/bacs.rb +17 -0
  38. data/app/models/spree_adyen/payment_sources/bancontact.rb +19 -0
  39. data/app/models/spree_adyen/payment_sources/bank_transfer.rb +17 -0
  40. data/app/models/spree_adyen/payment_sources/base.rb +7 -0
  41. data/app/models/spree_adyen/payment_sources/bcmc.rb +17 -0
  42. data/app/models/spree_adyen/payment_sources/bcmc_mobile.rb +17 -0
  43. data/app/models/spree_adyen/payment_sources/benefit.rb +17 -0
  44. data/app/models/spree_adyen/payment_sources/billie.rb +17 -0
  45. data/app/models/spree_adyen/payment_sources/bizum.rb +17 -0
  46. data/app/models/spree_adyen/payment_sources/blik.rb +15 -0
  47. data/app/models/spree_adyen/payment_sources/boleto.rb +17 -0
  48. data/app/models/spree_adyen/payment_sources/cash_app_afterpay.rb +17 -0
  49. data/app/models/spree_adyen/payment_sources/cashapp.rb +17 -0
  50. data/app/models/spree_adyen/payment_sources/clearpay.rb +17 -0
  51. data/app/models/spree_adyen/payment_sources/dana.rb +17 -0
  52. data/app/models/spree_adyen/payment_sources/doku.rb +19 -0
  53. data/app/models/spree_adyen/payment_sources/duitnow.rb +17 -0
  54. data/app/models/spree_adyen/payment_sources/ebanking_fi.rb +19 -0
  55. data/app/models/spree_adyen/payment_sources/eft_directdebit_ca.rb +19 -0
  56. data/app/models/spree_adyen/payment_sources/eftpos_australia.rb +19 -0
  57. data/app/models/spree_adyen/payment_sources/elo.rb +19 -0
  58. data/app/models/spree_adyen/payment_sources/eps.rb +19 -0
  59. data/app/models/spree_adyen/payment_sources/fastlane.rb +19 -0
  60. data/app/models/spree_adyen/payment_sources/fpx.rb +19 -0
  61. data/app/models/spree_adyen/payment_sources/gcash.rb +19 -0
  62. data/app/models/spree_adyen/payment_sources/gift_cards.rb +19 -0
  63. data/app/models/spree_adyen/payment_sources/giropay.rb +19 -0
  64. data/app/models/spree_adyen/payment_sources/givex.rb +19 -0
  65. data/app/models/spree_adyen/payment_sources/gopay_wallet.rb +19 -0
  66. data/app/models/spree_adyen/payment_sources/grabpay.rb +19 -0
  67. data/app/models/spree_adyen/payment_sources/grabpay_paylater.rb +19 -0
  68. data/app/models/spree_adyen/payment_sources/hipercard.rb +19 -0
  69. data/app/models/spree_adyen/payment_sources/ideal.rb +15 -0
  70. data/app/models/spree_adyen/payment_sources/kakaopay.rb +19 -0
  71. data/app/models/spree_adyen/payment_sources/kcp_naverpay.rb +19 -0
  72. data/app/models/spree_adyen/payment_sources/klarna.rb +32 -0
  73. data/app/models/spree_adyen/payment_sources/oney.rb +13 -0
  74. data/app/models/spree_adyen/payment_sources/online_banking_czech_republic.rb +15 -0
  75. data/app/models/spree_adyen/payment_sources/online_banking_poland.rb +15 -0
  76. data/app/models/spree_adyen/payment_sources/pay_by_bank.rb +15 -0
  77. data/app/models/spree_adyen/payment_sources/paypal.rb +15 -0
  78. data/app/models/spree_adyen/payment_sources/paypo.rb +15 -0
  79. data/app/models/spree_adyen/payment_sources/paysafecard.rb +15 -0
  80. data/app/models/spree_adyen/payment_sources/rate_pay_direct_debit.rb +15 -0
  81. data/app/models/spree_adyen/payment_sources/riverty.rb +15 -0
  82. data/app/models/spree_adyen/payment_sources/samsung_pay.rb +15 -0
  83. data/app/models/spree_adyen/payment_sources/scalapay.rb +13 -0
  84. data/app/models/spree_adyen/payment_sources/sepa_direct_debit.rb +15 -0
  85. data/app/models/spree_adyen/payment_sources/trustly.rb +15 -0
  86. data/app/models/spree_adyen/payment_sources/unknown.rb +19 -0
  87. data/app/models/spree_adyen/payment_sources/wechat_pay.rb +15 -0
  88. data/app/models/spree_adyen/store_decorator.rb +17 -0
  89. data/app/presenters/spree_adyen/address_presenter.rb +21 -0
  90. data/app/presenters/spree_adyen/application_info_presenter.rb +21 -0
  91. data/app/presenters/spree_adyen/cancel_payload_presenter.rb +31 -0
  92. data/app/presenters/spree_adyen/capture_payload_presenter.rb +36 -0
  93. data/app/presenters/spree_adyen/checkout_presenter.rb +51 -0
  94. data/app/presenters/spree_adyen/payment_sessions/request_payload_presenter.rb +140 -0
  95. data/app/presenters/spree_adyen/payments/request_payload_presenter.rb +85 -0
  96. data/app/presenters/spree_adyen/refund_payload_presenter.rb +38 -0
  97. data/app/presenters/spree_adyen/webhook_payload_presenter.rb +28 -0
  98. data/app/presenters/spree_adyen/webhooks/credit_card_presenter.rb +43 -0
  99. data/app/services/spree_adyen/gateways/add_allowed_origin.rb +36 -0
  100. data/app/services/spree_adyen/gateways/configuration.rb +41 -0
  101. data/app/services/spree_adyen/gateways/configure.rb +60 -0
  102. data/app/services/spree_adyen/payment_sessions/find_or_create.rb +51 -0
  103. data/app/services/spree_adyen/payment_sessions/process_with_result.rb +49 -0
  104. data/app/services/spree_adyen/webhooks/actions/create_source.rb +112 -0
  105. data/app/services/spree_adyen/webhooks/actions/find_or_create_credit_card.rb +33 -0
  106. data/app/services/spree_adyen/webhooks/event.rb +104 -0
  107. data/app/services/spree_adyen/webhooks/event_processors/authorisation_event_processor.rb +69 -0
  108. data/app/services/spree_adyen/webhooks/event_processors/cancellation_event_processor.rb +49 -0
  109. data/app/services/spree_adyen/webhooks/event_processors/capture_event_processor.rb +48 -0
  110. data/app/services/spree_adyen/webhooks/handle_event.rb +43 -0
  111. data/app/services/spree_adyen/webhooks/standard_hmac_validator.rb +37 -0
  112. data/app/views/layouts/spree_adyen/default.html.erb +14 -0
  113. data/app/views/spree/admin/payment_methods/configuration_guides/_spree_adyen.html.erb +14 -0
  114. data/app/views/spree/admin/payment_methods/custom_form_fields/_spree_adyen.html.erb +18 -0
  115. data/app/views/spree/admin/payment_methods/descriptions/_spree_adyen.html.erb +12 -0
  116. data/app/views/spree/admin/payments/source_forms/_spree_adyen.html.erb +7 -0
  117. data/app/views/spree/checkout/payment/_spree_adyen.html.erb +40 -0
  118. data/app/views/spree_adyen/_drop_in.html.erb +12 -0
  119. data/app/views/spree_adyen/_head.html.erb +2 -0
  120. data/app/views/spree_adyen/payment_sessions/redirect.html.erb +5 -0
  121. data/config/importmap.rb +7 -0
  122. data/config/initializers/spree.rb +34 -0
  123. data/config/initializers/spree_permitted_attributes.rb +5 -0
  124. data/config/locales/en.yml +11 -0
  125. data/config/routes.rb +35 -0
  126. data/db/migrate/20250630150000_setup_spree_adyen_models.rb +17 -0
  127. data/db/migrate/20250811140113_add_channel_to_adyen_payment_sessions.rb +10 -0
  128. data/db/migrate/20250813152608_add_return_url_to_spree_adyen_payment_sessions.rb +15 -0
  129. data/lib/generators/spree_adyen/install/install_generator.rb +20 -0
  130. data/lib/spree_adyen/configuration.rb +42 -0
  131. data/lib/spree_adyen/engine.rb +79 -0
  132. data/lib/spree_adyen/factories.rb +3 -0
  133. data/lib/spree_adyen/testing_support/factories/gateway_factory.rb +29 -0
  134. data/lib/spree_adyen/testing_support/factories/payment_session_factory.rb +40 -0
  135. data/lib/spree_adyen/version.rb +7 -0
  136. data/lib/spree_adyen.rb +39 -0
  137. data/lib/spree_api_v2/spree/api/v2/storefront/adyen/base_controller.rb +21 -0
  138. data/lib/spree_api_v2/spree/api/v2/storefront/adyen/payment_sessions_controller.rb +72 -0
  139. data/lib/spree_api_v2/spree_adyen/api/v2/storefront/payment_session_serializer.rb +21 -0
  140. data/vendor/javascript/@adyen--adyen-web.js +4 -0
  141. data/vendor/stylesheets/adyen.css +106 -0
  142. 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,17 @@
1
+ module SpreeAdyen
2
+ module PaymentSources
3
+ class Affirm < ::Spree::PaymentSource
4
+ def actions
5
+ %w[credit void capture]
6
+ end
7
+
8
+ def self.display_name
9
+ 'Affirm'
10
+ end
11
+
12
+ def display_payment_info
13
+ 'Affirm'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module SpreeAdyen
2
+ module PaymentSources
3
+ class Afterpay < ::Spree::PaymentSource
4
+ def actions
5
+ %w[credit void]
6
+ end
7
+
8
+ def self.display_name
9
+ 'Afterpay'
10
+ end
11
+
12
+ def display_payment_info
13
+ 'Afterpay'
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,17 @@
1
+ module SpreeAdyen
2
+ module PaymentSources
3
+ class AlipayHk < ::Spree::PaymentSource
4
+ def actions
5
+ %w[credit void]
6
+ end
7
+
8
+ def self.display_name
9
+ 'AlipayHK'
10
+ end
11
+
12
+ def display_payment_info
13
+ 'AlipayHK'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module SpreeAdyen
2
+ module PaymentSources
3
+ class Alma < ::Spree::PaymentSource
4
+ def actions
5
+ %w[credit void]
6
+ end
7
+
8
+ def self.display_name
9
+ 'Alma'
10
+ end
11
+
12
+ def display_payment_info
13
+ 'Alma'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module SpreeAdyen
2
+ module PaymentSources
3
+ class Ancv < ::Spree::PaymentSource
4
+ def actions
5
+ %w[credit void]
6
+ end
7
+
8
+ def self.display_name
9
+ 'ANCV'
10
+ end
11
+
12
+ def display_payment_info
13
+ 'ANCV'
14
+ end
15
+ end
16
+ end
17
+ 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 Atome < ::Spree::PaymentSource
4
+ def actions
5
+ %w[credit void]
6
+ end
7
+
8
+ def self.display_name
9
+ 'Atome'
10
+ end
11
+
12
+ def display_payment_info
13
+ 'Atome'
14
+ end
15
+ end
16
+ end
17
+ 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,7 @@
1
+ module SpreeAdyen
2
+ module PaymentSources
3
+ class Base < ::Spree::PaymentSource
4
+ self.abstract_class = true
5
+ end
6
+ end
7
+ 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 Benefit < ::Spree::PaymentSource
4
+ def actions
5
+ %w[credit void]
6
+ end
7
+
8
+ def self.display_name
9
+ 'BENEFIT'
10
+ end
11
+
12
+ def display_payment_info
13
+ 'BENEFIT'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module SpreeAdyen
2
+ module PaymentSources
3
+ class Billie < ::Spree::PaymentSource
4
+ def actions
5
+ %w[credit void capture]
6
+ end
7
+
8
+ def self.display_name
9
+ 'Billie'
10
+ end
11
+
12
+ def display_payment_info
13
+ 'Billie'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module SpreeAdyen
2
+ module PaymentSources
3
+ class Bizum < ::Spree::PaymentSource
4
+ def actions
5
+ %w[credit void]
6
+ end
7
+
8
+ def self.display_name
9
+ 'Bizum'
10
+ end
11
+
12
+ def display_payment_info
13
+ 'Bizum'
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ module SpreeAdyen
2
+ module PaymentSources
3
+ class Blik < Base
4
+ store_accessor :public_metadata
5
+
6
+ def actions
7
+ %w[credit void]
8
+ end
9
+
10
+ def self.display_name
11
+ 'BLIK'
12
+ end
13
+ end
14
+ end
15
+ 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,17 @@
1
+ module SpreeAdyen
2
+ module PaymentSources
3
+ class Dana < ::Spree::PaymentSource
4
+ def actions
5
+ %w[credit void]
6
+ end
7
+
8
+ def self.display_name
9
+ 'DANA'
10
+ end
11
+
12
+ def display_payment_info
13
+ 'DANA'
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
@@ -0,0 +1,17 @@
1
+ module SpreeAdyen
2
+ module PaymentSources
3
+ class Duitnow < ::Spree::PaymentSource
4
+ def actions
5
+ %w[credit void]
6
+ end
7
+
8
+ def self.display_name
9
+ 'DuitNow'
10
+ end
11
+
12
+ def display_payment_info
13
+ 'DuitNow'
14
+ end
15
+ end
16
+ end
17
+ end