solidus_braintree 1.4.0 → 2.0.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 +4 -4
- data/.circleci/config.yml +12 -0
- data/.gem_release.yml +5 -0
- data/.github_changelog_generator +2 -0
- data/.gitignore +20 -11
- data/.rspec +1 -1
- data/.rubocop.yml +79 -0
- data/CHANGELOG.md +178 -18
- data/Gemfile +31 -23
- data/LICENSE +26 -0
- data/README.md +387 -26
- data/Rakefile +4 -19
- data/app/assets/config/solidus_braintree_manifest.js +1 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_active_blue_button_280x48.svg +19 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_active_blue_button_320x48.svg +19 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_active_blue_button_375x48.svg +19 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_active_white_button_280x48.svg +19 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_active_white_button_320x48.svg +19 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_active_white_button_375x48.svg +19 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_blue_acceptance_mark.svg +15 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_blue_button_280x48.svg +19 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_blue_button_320x48.svg +19 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_blue_button_375x48.svg +19 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_blue_logo.svg +18 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_white_acceptance_mark.svg +20 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_white_button_280x48.svg +19 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_white_button_320x48.svg +19 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_white_button_375x48.svg +19 -0
- data/app/assets/images/solidus_braintree/venmo/venmo_white_logo.svg +18 -0
- data/app/assets/javascripts/solidus_braintree/apple_pay_button.js +179 -0
- data/app/assets/javascripts/solidus_braintree/checkout.js +108 -0
- data/app/assets/javascripts/solidus_braintree/client.js +239 -0
- data/app/assets/javascripts/solidus_braintree/constants.js +89 -0
- data/app/assets/javascripts/solidus_braintree/frontend.js +14 -0
- data/app/assets/javascripts/solidus_braintree/hosted_form.js +46 -0
- data/app/assets/javascripts/solidus_braintree/paypal_button.js +178 -0
- data/app/assets/javascripts/solidus_braintree/paypal_messaging.js +22 -0
- data/app/assets/javascripts/solidus_braintree/promise.js +20 -0
- data/app/assets/javascripts/solidus_braintree/venmo_button.js +86 -0
- data/app/assets/javascripts/spree/backend/solidus_braintree.js +96 -0
- data/app/assets/javascripts/spree/frontend/paypal_button.js +34 -0
- data/app/assets/javascripts/spree/frontend/solidus_braintree.js +1 -0
- data/app/assets/stylesheets/spree/backend/solidus_braintree.scss +28 -0
- data/app/assets/stylesheets/spree/frontend/solidus_braintree.scss +51 -0
- data/app/decorators/controllers/solidus_braintree/admin_payments_controller_decorator.rb +11 -0
- data/app/decorators/controllers/solidus_braintree/checkout_controller_decorator.rb +11 -0
- data/app/decorators/controllers/solidus_braintree/client_tokens_controller.rb +41 -0
- data/app/decorators/controllers/solidus_braintree/orders_controller_decorator.rb +11 -0
- data/app/decorators/models/solidus_braintree/spree/store_decorator.rb +20 -0
- data/app/decorators/models/solidus_braintree/spree/user_decorator.rb +13 -0
- data/app/helpers/solidus_braintree/braintree_admin_helper.rb +23 -0
- data/app/helpers/solidus_braintree/braintree_checkout_helper.rb +60 -0
- data/app/models/application_record.rb +5 -0
- data/app/models/solidus_braintree/address.rb +64 -0
- data/app/models/solidus_braintree/avs_result.rb +69 -0
- data/app/models/solidus_braintree/configuration.rb +39 -0
- data/app/models/solidus_braintree/customer.rb +8 -0
- data/app/models/solidus_braintree/gateway.rb +433 -0
- data/app/models/solidus_braintree/response.rb +80 -0
- data/app/models/solidus_braintree/source.rb +135 -0
- data/app/models/solidus_braintree/transaction.rb +31 -0
- data/app/models/solidus_braintree/transaction_address.rb +88 -0
- data/app/models/solidus_braintree/transaction_import.rb +98 -0
- data/app/overrides/spree/payments/payment/add_paypal_funding_source_to_payment.rb +9 -0
- data/app/views/spree/api/payments/source_views/_braintree.json.jbuilder +1 -1
- data/app/views/spree/checkout/existing_payment/_braintree.html.erb +10 -0
- data/app/views/spree/shared/_apple_pay_button.html.erb +27 -0
- data/app/views/spree/shared/_braintree_errors.html.erb +16 -0
- data/app/views/spree/shared/_braintree_head_scripts.html.erb +26 -0
- data/app/views/spree/shared/_braintree_hosted_fields.html.erb +43 -0
- data/app/views/spree/shared/_paypal_cart_button.html.erb +38 -0
- data/app/views/spree/shared/_paypal_messaging.html.erb +13 -0
- data/app/views/spree/shared/_venmo_button.html.erb +33 -0
- data/bin/console +4 -1
- data/bin/rails +5 -5
- data/bin/rails-engine +13 -0
- data/bin/rails-sandbox +16 -0
- data/bin/rake +7 -0
- data/bin/sandbox +103 -0
- data/bin/setup +5 -4
- data/config/locales/en.yml +94 -2
- data/config/locales/it.yml +56 -0
- data/config/routes.rb +12 -3
- data/db/migrate/20160830061749_create_solidus_paypal_braintree_sources.rb +16 -0
- data/db/migrate/20160906201711_create_solidus_paypal_braintree_customers.rb +13 -0
- data/db/migrate/20161114231422_create_solidus_paypal_braintree_configurations.rb +11 -0
- data/db/migrate/20161125172005_add_braintree_configuration_to_stores.rb +7 -0
- data/db/migrate/20170203191030_add_credit_card_to_braintree_configuration.rb +6 -0
- data/db/migrate/20170505193712_add_null_constraint_to_sources.rb +38 -0
- data/db/migrate/20170508085402_add_not_null_constraint_to_sources_payment_type.rb +14 -0
- data/db/migrate/20190705115327_add_paypal_button_preferences_to_braintree_configurations.rb +5 -0
- data/db/migrate/20190911141712_add_3d_secure_to_braintree_configuration.rb +5 -0
- data/db/migrate/20211222170950_add_paypal_funding_source_to_solidus_paypal_braintree_sources.rb +5 -0
- data/db/migrate/20220104150301_add_venmo_to_braintree_configuration.rb +5 -0
- data/db/migrate/20230109080950_rename_solidus_paypal_braintree_source_type.rb +31 -0
- data/lib/controllers/backend/solidus_braintree/configurations_controller.rb +48 -0
- data/lib/controllers/frontend/solidus_braintree/checkouts_controller.rb +31 -0
- data/lib/controllers/frontend/solidus_braintree/transactions_controller.rb +67 -0
- data/lib/generators/solidus_braintree/install/install_generator.rb +54 -18
- data/lib/generators/solidus_braintree/install/templates/initializer.rb +6 -0
- data/lib/solidus_braintree/country_mapper.rb +37 -0
- data/lib/solidus_braintree/engine.rb +55 -10
- data/lib/solidus_braintree/extension_configuration.rb +23 -0
- data/lib/solidus_braintree/request_protection.rb +21 -0
- data/lib/solidus_braintree/testing_support/factories.rb +53 -0
- data/lib/solidus_braintree/version.rb +3 -1
- data/lib/solidus_braintree.rb +14 -2
- data/lib/solidus_paypal_braintree.rb +6 -0
- data/lib/views/backend/solidus_braintree/configurations/list.html.erb +63 -0
- data/lib/views/backend/spree/admin/payments/source_forms/_braintree.html.erb +16 -0
- data/lib/views/backend/spree/admin/payments/source_views/_braintree.html.erb +39 -0
- data/lib/views/backend/spree/admin/shared/preference_fields/_preference_select.html.erb +13 -0
- data/lib/views/backend_v1.2/spree/admin/payments/source_forms/_braintree.html.erb +16 -0
- data/lib/views/backend_v2.4/spree/admin/shared/preference_fields/_hash.html.erb +12 -0
- data/lib/views/frontend/solidus_braintree/payments/_payment.html.erb +12 -0
- data/lib/views/frontend/spree/checkout/payment/_braintree.html.erb +23 -0
- data/lib/views/frontend/spree/shared/_paypal_checkout_button.html.erb +32 -0
- data/solidus_braintree.gemspec +39 -38
- data/spec/controllers/solidus_braintree/checkouts_controller_spec.rb +99 -0
- data/spec/controllers/solidus_braintree/client_tokens_controller_spec.rb +55 -0
- data/spec/controllers/solidus_braintree/configurations_controller_spec.rb +73 -0
- data/spec/controllers/solidus_braintree/transactions_controller_spec.rb +183 -0
- data/spec/features/backend/configuration_spec.rb +23 -0
- data/spec/features/backend/new_payment_spec.rb +137 -0
- data/spec/features/frontend/braintree_credit_card_checkout_spec.rb +191 -0
- data/spec/features/frontend/paypal_checkout_spec.rb +166 -0
- data/spec/features/frontend/venmo_checkout_spec.rb +194 -0
- data/spec/fixtures/cassettes/admin/invalid_credit_card.yml +63 -0
- data/spec/fixtures/cassettes/admin/resubmit_credit_card.yml +352 -0
- data/spec/fixtures/cassettes/admin/valid_credit_card.yml +412 -0
- data/spec/fixtures/cassettes/braintree/create_profile.yml +71 -0
- data/spec/fixtures/cassettes/braintree/generate_token.yml +63 -0
- data/spec/fixtures/cassettes/braintree/token.yml +63 -0
- data/spec/fixtures/cassettes/checkout/invalid_credit_card.yml +63 -0
- data/spec/fixtures/cassettes/checkout/resubmit_credit_card.yml +216 -0
- data/spec/fixtures/cassettes/checkout/update.yml +71 -0
- data/spec/fixtures/cassettes/checkout/valid_credit_card.yml +171 -0
- data/spec/fixtures/cassettes/checkout/valid_venmo_transaction.yml +599 -0
- data/spec/fixtures/cassettes/gateway/authorize/credit_card/address.yml +86 -0
- data/spec/fixtures/cassettes/gateway/authorize/merchant_account/EUR.yml +154 -0
- data/spec/fixtures/cassettes/gateway/authorize/paypal/EUR.yml +90 -0
- data/spec/fixtures/cassettes/gateway/authorize/paypal/address.yml +90 -0
- data/spec/fixtures/cassettes/gateway/authorize.yml +86 -0
- data/spec/fixtures/cassettes/gateway/authorized_transaction.yml +73 -0
- data/spec/fixtures/cassettes/gateway/cancel/missing.yml +63 -0
- data/spec/fixtures/cassettes/gateway/cancel/refunds.yml +272 -0
- data/spec/fixtures/cassettes/gateway/cancel/void.yml +201 -0
- data/spec/fixtures/cassettes/gateway/capture.yml +141 -0
- data/spec/fixtures/cassettes/gateway/complete.yml +157 -0
- data/spec/fixtures/cassettes/gateway/credit.yml +208 -0
- data/spec/fixtures/cassettes/gateway/customer.yml +79 -0
- data/spec/fixtures/cassettes/gateway/purchase.yml +87 -0
- data/spec/fixtures/cassettes/gateway/settled_transaction.yml +140 -0
- data/spec/fixtures/cassettes/gateway/void.yml +137 -0
- data/spec/fixtures/cassettes/source/bin.yml +295 -0
- data/spec/fixtures/cassettes/source/card_type.yml +267 -0
- data/spec/fixtures/cassettes/source/last4.yml +267 -0
- data/spec/fixtures/cassettes/transaction/import/valid/capture.yml +224 -0
- data/spec/fixtures/cassettes/transaction/import/valid.yml +71 -0
- data/spec/fixtures/views/spree/orders/edit.html.erb +50 -0
- data/spec/helpers/solidus_braintree/braintree_admin_helper_spec.rb +17 -0
- data/spec/helpers/solidus_braintree/braintree_checkout_helper_spec.rb +70 -0
- data/spec/models/solidus_braintree/address_spec.rb +71 -0
- data/spec/models/solidus_braintree/avs_result_spec.rb +317 -0
- data/spec/models/solidus_braintree/gateway_spec.rb +742 -0
- data/spec/models/solidus_braintree/response_spec.rb +280 -0
- data/spec/models/solidus_braintree/source_spec.rb +539 -0
- data/spec/models/solidus_braintree/transaction_address_spec.rb +235 -0
- data/spec/models/solidus_braintree/transaction_import_spec.rb +302 -0
- data/spec/models/solidus_braintree/transaction_spec.rb +86 -0
- data/spec/models/spree/store_spec.rb +14 -0
- data/spec/requests/spree/api/orders_controller_spec.rb +36 -0
- data/spec/spec_helper.rb +32 -0
- data/spec/support/capybara.rb +7 -0
- data/spec/support/gateway_helpers.rb +29 -0
- data/spec/support/order_ready_for_payment.rb +37 -0
- data/spec/support/vcr.rb +42 -0
- data/spec/support/views.rb +1 -0
- metadata +276 -224
- data/LICENSE.txt +0 -21
- data/app/controllers/spree/api/braintree_client_token_controller.rb +0 -13
- data/app/decorators/lib/solidus_braintree/spree/permitted_attributes_decorator.rb +0 -9
- data/app/decorators/models/solidus_braintree/spree/credit_card_decorator.rb +0 -11
- data/app/decorators/models/solidus_braintree/spree/payment_decorator.rb +0 -10
- data/app/helpers/braintree_view_helpers.rb +0 -20
- data/app/models/concerns/solidus_braintree/add_name_validation_concern.rb +0 -8
- data/app/models/concerns/solidus_braintree/inject_device_data_concern.rb +0 -18
- data/app/models/concerns/solidus_braintree/payment_braintree_nonce_concern.rb +0 -8
- data/app/models/concerns/solidus_braintree/permitted_attributes_concern.rb +0 -11
- data/app/models/concerns/solidus_braintree/skip_require_card_numbers_concern.rb +0 -14
- data/app/models/concerns/solidus_braintree/use_data_field_concern.rb +0 -23
- data/app/models/solidus/gateway/braintree_gateway.rb +0 -306
- data/app/overrides/spree/checkout/_confirm/braintree_security.html.erb.deface +0 -9
- data/app/views/spree/admin/payments/source_forms/_braintree.html.erb +0 -38
- data/app/views/spree/admin/payments/source_views/_braintree.html.erb +0 -30
- data/app/views/spree/checkout/payment/_braintree.html.erb +0 -55
- data/app/views/spree/checkout/payment/_braintree_initialization.html.erb +0 -12
- data/config/initializers/braintree.rb +0 -3
- data/db/migrate/20150910170527_add_data_to_credit_card.rb +0 -5
- data/db/migrate/20160426221931_add_braintree_device_data_to_order.rb +0 -5
- data/lib/assets/javascripts/spree/backend/braintree/solidus_braintree.js +0 -59
- data/lib/assets/javascripts/spree/frontend/braintree/solidus_braintree.js +0 -144
- data/lib/assets/javascripts/vendor/braintree.js +0 -8
- data/lib/assets/stylesheets/spree/frontend/solidus_braintree.scss +0 -26
data/config/locales/en.yml
CHANGED
|
@@ -1,4 +1,96 @@
|
|
|
1
1
|
en:
|
|
2
|
+
activerecord:
|
|
3
|
+
models:
|
|
4
|
+
solidus_braintree/gateway: Braintree
|
|
5
|
+
attributes:
|
|
6
|
+
solidus_braintree/configuration:
|
|
7
|
+
paypal: PayPal
|
|
8
|
+
apple_pay: Apple Pay
|
|
9
|
+
credit_card: Credit Card
|
|
10
|
+
three_d_secure: 3D Secure
|
|
11
|
+
venmo: Venmo
|
|
12
|
+
spree:
|
|
13
|
+
admin:
|
|
14
|
+
tab:
|
|
15
|
+
braintree: Braintree
|
|
16
|
+
client_sdk_enabled: Client SDK enabled?
|
|
17
|
+
environment: Environment
|
|
18
|
+
merchant_currency_map: Merchant currency map
|
|
19
|
+
merchant_id: Merchant ID
|
|
20
|
+
paypal_payee_email_map: Paypal payee email map
|
|
21
|
+
private_key: Private key
|
|
22
|
+
public_key: Public key
|
|
23
|
+
token_generation_enabled: Token generation enabled?
|
|
24
|
+
paypal_flow: PayPal flow
|
|
25
|
+
paypal_funding: 'PayPal Funding: %{funding}'
|
|
26
|
+
paypal_funding_source: 'PayPal Funding Source'
|
|
2
27
|
solidus_braintree:
|
|
3
|
-
|
|
4
|
-
|
|
28
|
+
braintree: Braintree
|
|
29
|
+
nonce: Nonce
|
|
30
|
+
token: Token
|
|
31
|
+
errors:
|
|
32
|
+
default_error: "Something bad happened!"
|
|
33
|
+
paypal_popup_closed: "PayPal popup has been closed before payment completion."
|
|
34
|
+
empty_fields: "All fields are empty! Please fill out the form."
|
|
35
|
+
invalid_fields: "Some payment input fields are invalid."
|
|
36
|
+
invalid_card: "Credit card data is incorrect."
|
|
37
|
+
network_error: "Network error occurred."
|
|
38
|
+
duplicate_iframe: "Duplicate Braintree iframe."
|
|
39
|
+
fail_on_duplicate: "This payment method already exists in your vault."
|
|
40
|
+
cvv_verification_failed: "CVV did not pass verification."
|
|
41
|
+
threeds:
|
|
42
|
+
authentication_failed: "3D Secure authentication failed. Please try again using a different payment method."
|
|
43
|
+
venmo:
|
|
44
|
+
canceled: "App is not available or you aborted the payment flow."
|
|
45
|
+
desktop_canceled: "Venmo authorization was canceled by closing the Venmo Desktop modal."
|
|
46
|
+
app_canceled: "Payment flow was canceled."
|
|
47
|
+
payment_type:
|
|
48
|
+
label: Payment Type
|
|
49
|
+
apple_pay_card: Apple Pay
|
|
50
|
+
credit_card: Credit Card
|
|
51
|
+
pay_pal_account: PayPal
|
|
52
|
+
venmo_account: Venmo
|
|
53
|
+
configurations:
|
|
54
|
+
title: Braintree Configurations
|
|
55
|
+
tab: Braintree
|
|
56
|
+
update_success: Successfully updated Braintree configurations.
|
|
57
|
+
update_error: An error occurred while updating Braintree configurations.
|
|
58
|
+
gateway_rejection_reasons:
|
|
59
|
+
avs: AVS check failed.
|
|
60
|
+
avs_and_cvv: AVS and CVV check failed.
|
|
61
|
+
cvv: CVV check failed.
|
|
62
|
+
duplicate: Duplicate transaction.
|
|
63
|
+
fraud: Credit card was rejected because of potential fraud.
|
|
64
|
+
three_d_secure: 3D Secure check failed.
|
|
65
|
+
transaction_statuses:
|
|
66
|
+
authorization_expired: Payment authorization has expired.
|
|
67
|
+
failed: An error occurred when sending the transaction to the processor.
|
|
68
|
+
gateway_rejected: Gateway rejected this transaction.
|
|
69
|
+
processor_declined: Processor declined this transaction.
|
|
70
|
+
settlement_declined: Settlement was declined by processor.
|
|
71
|
+
paypal_funding_sources:
|
|
72
|
+
applepay: 'Apple Pay'
|
|
73
|
+
bancontact: 'Bancontact'
|
|
74
|
+
blik: 'BLIK'
|
|
75
|
+
boleto: 'Boleto'
|
|
76
|
+
card: 'Credit or debit card'
|
|
77
|
+
credit: 'PayPal Credit'
|
|
78
|
+
eps: 'eps'
|
|
79
|
+
giropay: 'giropay'
|
|
80
|
+
ideal: 'iDEAL'
|
|
81
|
+
itau: 'Itau'
|
|
82
|
+
maxima: 'Maxima'
|
|
83
|
+
mercadopago: 'Mercado Pago'
|
|
84
|
+
mybank: 'MyBank'
|
|
85
|
+
oxxo: 'Oxxo'
|
|
86
|
+
p24: 'Przelewy24'
|
|
87
|
+
paylater: 'Pay Later'
|
|
88
|
+
paypal: 'PayPal'
|
|
89
|
+
payu: 'PayU'
|
|
90
|
+
sepa: 'SEPA-Lastschrift'
|
|
91
|
+
sofort: 'Sofort'
|
|
92
|
+
trustly: 'Trustly'
|
|
93
|
+
venmo: 'Venmo'
|
|
94
|
+
verkkopankki: 'Verkkopankki'
|
|
95
|
+
wechatpay: 'WeChat Pay'
|
|
96
|
+
zimpler: 'Zimpler'
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
it:
|
|
2
|
+
activerecord:
|
|
3
|
+
models:
|
|
4
|
+
solidus_braintree/gateway: Braintree
|
|
5
|
+
spree:
|
|
6
|
+
admin:
|
|
7
|
+
tab:
|
|
8
|
+
braintree: Braintree
|
|
9
|
+
client_sdk_enabled: Client SDK abilitato?
|
|
10
|
+
environment: Environment
|
|
11
|
+
merchant_currency_map: Associazioni tra merchant Braintree e valute
|
|
12
|
+
merchant_id: Merchant ID
|
|
13
|
+
paypal_payee_email_map: Associazioni tra email beneficiari PayPal e valute
|
|
14
|
+
private_key: Private key
|
|
15
|
+
public_key: Public key
|
|
16
|
+
token_generation_enabled: Generazione dei Token abilitata?
|
|
17
|
+
paypal_flow: Flusso PayPal
|
|
18
|
+
solidus_braintree:
|
|
19
|
+
braintree: Braintree
|
|
20
|
+
nonce: Nonce
|
|
21
|
+
token: Token
|
|
22
|
+
errors:
|
|
23
|
+
default_error: Qualcosa è andato storto!
|
|
24
|
+
paypal_popup_closed: La finestra di PayPal è stata chiusa prima di completare il pagamento.
|
|
25
|
+
empty_fields: I campi non possono essere vuoti!
|
|
26
|
+
invalid_fields: Alcuni campi non sono corretti.
|
|
27
|
+
invalid_card: I dati della carta di credito non sono corretti.
|
|
28
|
+
network_error: Si è verificato un errore di rete.
|
|
29
|
+
duplicate_iframe: Ci sono due iframe di Braintree.
|
|
30
|
+
fail_on_duplicate: Questo metodo di pagamento esiste già.
|
|
31
|
+
cvv_verification_failed: Il codice CVV non è corretto.
|
|
32
|
+
threeds:
|
|
33
|
+
authentication_failed: "Autenticazione 3D Secure fallita. Riprova usando un altro metodo di pagamento."
|
|
34
|
+
payment_type:
|
|
35
|
+
label: Metodo di Pagamento
|
|
36
|
+
apple_pay_card: Apple Pay
|
|
37
|
+
credit_card: Carta di credito
|
|
38
|
+
pay_pal_account: PayPal
|
|
39
|
+
configurations:
|
|
40
|
+
title: Configurazioni di Braintree
|
|
41
|
+
tab: Braintree
|
|
42
|
+
update_success: Configurazioni di Braintree aggiornate con successo.
|
|
43
|
+
update_error: Si è verificato un errore durante l'aggiornamento delle configurazioni di Braintree.
|
|
44
|
+
gateway_rejection_reasons:
|
|
45
|
+
avs: Controllo AVS fallito.
|
|
46
|
+
avs_and_cvv: Controlli AVS e CVV falliti.
|
|
47
|
+
cvv: Controllo CVV fallito.
|
|
48
|
+
duplicate: Transazione duplicata.
|
|
49
|
+
fraud: La carta di credito è stata rifiutata a seguito di un potenziale uso fraudolento.
|
|
50
|
+
three_d_secure: Controllo '3D Secure' fallito.
|
|
51
|
+
transaction_statuses:
|
|
52
|
+
authorization_expired: L'autorizzazione di pagamento è scaduta.
|
|
53
|
+
failed: Si è verificato un errore durante l'invio della transazione al sistema di pagamento.
|
|
54
|
+
gateway_rejected: Il gateway di pagamento ha rifiutato questa transazione.
|
|
55
|
+
processor_declined: Il sistema di pagamento ha rifiutato questa transazione.
|
|
56
|
+
settlement_declined: Il saldo di questa transazione è stato rifiutato dal sistema di pagamento.
|
data/config/routes.rb
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
SolidusBraintree::Engine.routes.draw do
|
|
4
|
+
resource :checkout, only: [:update, :edit]
|
|
5
|
+
resource :client_token, only: [:create], format: :json
|
|
6
|
+
resource :transactions, only: [:create]
|
|
7
|
+
|
|
8
|
+
resources :configurations do
|
|
9
|
+
collection do
|
|
10
|
+
get :list
|
|
11
|
+
post :update
|
|
12
|
+
end
|
|
4
13
|
end
|
|
5
14
|
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class CreateSolidusPaypalBraintreeSources < SolidusSupport::Migration[4.2]
|
|
2
|
+
def change
|
|
3
|
+
create_table :solidus_paypal_braintree_sources do |t|
|
|
4
|
+
t.string :nonce
|
|
5
|
+
t.string :token
|
|
6
|
+
t.string :payment_type
|
|
7
|
+
t.integer :user_id, index: true
|
|
8
|
+
t.references :customer, index: true
|
|
9
|
+
t.references :payment_method, index: true
|
|
10
|
+
|
|
11
|
+
t.timestamps null: false
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
add_foreign_key :solidus_paypal_braintree_sources, :spree_payment_methods, column: :payment_method_id
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class CreateSolidusPaypalBraintreeCustomers < SolidusSupport::Migration[4.2]
|
|
2
|
+
def change
|
|
3
|
+
create_table :solidus_paypal_braintree_customers do |t|
|
|
4
|
+
t.references :user
|
|
5
|
+
t.string :braintree_customer_id
|
|
6
|
+
|
|
7
|
+
t.timestamps
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
add_index :solidus_paypal_braintree_customers, :user_id, unique: true, name: "index_braintree_customers_on_user_id"
|
|
11
|
+
add_index :solidus_paypal_braintree_customers, :braintree_customer_id, unique: true, name: "index_braintree_customers_on_braintree_customer_id" # rubocop:disable Layout/LineLength
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class CreateSolidusPaypalBraintreeConfigurations < SolidusSupport::Migration[4.2]
|
|
2
|
+
def change
|
|
3
|
+
create_table :solidus_paypal_braintree_configurations do |t|
|
|
4
|
+
t.boolean :paypal, null: false, default: false
|
|
5
|
+
t.boolean :apple_pay, null: false, default: false
|
|
6
|
+
t.integer :store_id, null: false, index: true, foreign_key: { references: :spree_stores }
|
|
7
|
+
|
|
8
|
+
t.timestamps null: false
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
class AddBraintreeConfigurationToStores < SolidusSupport::Migration[4.2]
|
|
2
|
+
# The content of this migration has been removed because store's Braintree
|
|
3
|
+
# configuration doesn't already have paypal_button_preferences fields, so
|
|
4
|
+
# their validations will break this migration.
|
|
5
|
+
#
|
|
6
|
+
# Ref here for more info https://github.com/solidusio/solidus_paypal_braintree/pull/249
|
|
7
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
class AddNullConstraintToSources < SolidusSupport::Migration[4.2]
|
|
2
|
+
class SpreePayment < ActiveRecord::Base
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
class SolidusPaypalBraintreeSource < ActiveRecord::Base
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def up
|
|
9
|
+
payments = SpreePayment.arel_table
|
|
10
|
+
sources = SolidusPaypalBraintreeSource.arel_table
|
|
11
|
+
join_sources = payments.join(sources).on(
|
|
12
|
+
payments[:source_id].eq(sources[:id]).and(
|
|
13
|
+
payments[:source_type].eq("SolidusPaypalBraintree::Source")
|
|
14
|
+
).and(
|
|
15
|
+
sources[:payment_method_id].eq(nil)
|
|
16
|
+
)
|
|
17
|
+
).join_sources
|
|
18
|
+
|
|
19
|
+
count = SpreePayment.joins(join_sources).count
|
|
20
|
+
Rails.logger.info("Updating #{count} problematic sources")
|
|
21
|
+
|
|
22
|
+
SpreePayment.joins(join_sources).find_each do |payment|
|
|
23
|
+
Rails.logger.info("Updating source #{payment.source_id} with payment method id #{payment.payment_method_id}")
|
|
24
|
+
SolidusPaypalBraintreeSource.where(id: payment.source_id).update_all(
|
|
25
|
+
payment_method_id: payment.payment_method_id
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# We use a foreign key constraint on the model,
|
|
30
|
+
# but it doesnt make sense to have this model exist without a payment method
|
|
31
|
+
# as two of its methods delegate to the payment method.
|
|
32
|
+
change_column_null(:solidus_paypal_braintree_sources, :payment_method_id, false)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def down
|
|
36
|
+
change_column_null(:solidus_paypal_braintree_sources, :payment_method_id, true)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class AddNotNullConstraintToSourcesPaymentType < SolidusSupport::Migration[4.2]
|
|
2
|
+
class SolidusPaypalBraintreeSource < ActiveRecord::Base
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
def change
|
|
6
|
+
reversible do |dir|
|
|
7
|
+
dir.up do
|
|
8
|
+
SolidusPaypalBraintreeSource.where(payment_type: nil).
|
|
9
|
+
update_all(payment_type: 'CreditCard')
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
change_column_null(:solidus_paypal_braintree_sources, :payment_type, false)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class RenameSolidusPaypalBraintreeSourceType < ActiveRecord::Migration[6.1]
|
|
2
|
+
# This is based on the best practices recommended in
|
|
3
|
+
# https://github.com/ankane/strong_migrations#backfilling-data on how to
|
|
4
|
+
# safely update a table.
|
|
5
|
+
|
|
6
|
+
disable_ddl_transaction!
|
|
7
|
+
|
|
8
|
+
def up
|
|
9
|
+
Spree::Payment.unscoped
|
|
10
|
+
.where(source_type: 'SolidusPaypalBraintree::Source').in_batches do |relation|
|
|
11
|
+
relation.update_all("source_type = 'SolidusBraintree::Source'")
|
|
12
|
+
sleep(0.01)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
Spree::WalletPaymentSource.unscoped
|
|
16
|
+
.where(payment_source_type: 'SolidusPaypalBraintree::Source').in_batches do |relation|
|
|
17
|
+
relation.update_all("payment_source_type = 'SolidusBraintree::Source'")
|
|
18
|
+
sleep(0.01)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
Spree::PaymentMethod.unscoped
|
|
22
|
+
.where('type = ?', 'SolidusPaypalBraintree::Gateway').in_batches do |relation|
|
|
23
|
+
relation.update_all("type = 'SolidusBraintree::Gateway'")
|
|
24
|
+
sleep(0.01)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def down
|
|
29
|
+
raise ActiveRecord::IrreversibleMigration
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SolidusBraintree
|
|
4
|
+
class ConfigurationsController < ::Spree::Admin::BaseController
|
|
5
|
+
helper ::Spree::Core::Engine.routes.url_helpers
|
|
6
|
+
|
|
7
|
+
def list
|
|
8
|
+
authorize! :list, SolidusBraintree::Configuration
|
|
9
|
+
|
|
10
|
+
@configurations = ::Spree::Store.all.map { |s| s.braintree_configuration || s.create_braintree_configuration }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def update
|
|
14
|
+
authorize! :update, SolidusBraintree::Configuration
|
|
15
|
+
|
|
16
|
+
params = configurations_params[:configuration_fields]
|
|
17
|
+
results = SolidusBraintree::Configuration.update(params.keys, params.values)
|
|
18
|
+
if results.all?(&:valid?)
|
|
19
|
+
flash[:success] = t('update_success', scope: 'solidus_braintree.configurations')
|
|
20
|
+
else
|
|
21
|
+
flash[:error] = t('update_error', scope: 'solidus_braintree.configurations')
|
|
22
|
+
end
|
|
23
|
+
redirect_to action: :list
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def configurations_params
|
|
29
|
+
params.require(:configurations).
|
|
30
|
+
permit(configuration_fields: [
|
|
31
|
+
:paypal,
|
|
32
|
+
:apple_pay,
|
|
33
|
+
:venmo,
|
|
34
|
+
:credit_card,
|
|
35
|
+
:three_d_secure,
|
|
36
|
+
:preferred_paypal_button_locale,
|
|
37
|
+
:preferred_paypal_button_color,
|
|
38
|
+
:preferred_paypal_button_shape,
|
|
39
|
+
:preferred_paypal_button_label,
|
|
40
|
+
:preferred_paypal_button_tagline,
|
|
41
|
+
:preferred_paypal_button_layout,
|
|
42
|
+
:preferred_paypal_button_messaging,
|
|
43
|
+
:preferred_venmo_button_color,
|
|
44
|
+
:preferred_venmo_button_width
|
|
45
|
+
])
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SolidusBraintree
|
|
4
|
+
class CheckoutsController < ::Spree::CheckoutController
|
|
5
|
+
PERMITTED_PAYMENT_PARAMS = [
|
|
6
|
+
:payment_method_id,
|
|
7
|
+
{ source_attributes: [
|
|
8
|
+
:nonce,
|
|
9
|
+
:payment_type
|
|
10
|
+
] }
|
|
11
|
+
].freeze
|
|
12
|
+
|
|
13
|
+
def update
|
|
14
|
+
@payment = ::Spree::PaymentCreate.new(@order, payment_params).build
|
|
15
|
+
|
|
16
|
+
if @payment.save
|
|
17
|
+
render plain: "ok"
|
|
18
|
+
else
|
|
19
|
+
render plain: "not-ok"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def payment_params
|
|
24
|
+
params.
|
|
25
|
+
require(:order).
|
|
26
|
+
require(:payments_attributes).
|
|
27
|
+
first.
|
|
28
|
+
permit(PERMITTED_PAYMENT_PARAMS)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SolidusBraintree
|
|
4
|
+
class TransactionsController < ::Spree::StoreController
|
|
5
|
+
class InvalidImportError < StandardError; end
|
|
6
|
+
|
|
7
|
+
PERMITTED_BRAINTREE_TRANSACTION_PARAMS = [
|
|
8
|
+
:nonce,
|
|
9
|
+
:payment_type,
|
|
10
|
+
:paypal_funding_source,
|
|
11
|
+
:phone,
|
|
12
|
+
:email,
|
|
13
|
+
{ address_attributes: [
|
|
14
|
+
:country_code, :country_name, :name, :city, :zip, :state_code,
|
|
15
|
+
:address_line_1, :address_line_2, :first_name, :last_name
|
|
16
|
+
] }
|
|
17
|
+
].freeze
|
|
18
|
+
|
|
19
|
+
def create
|
|
20
|
+
transaction = SolidusBraintree::Transaction.new transaction_params
|
|
21
|
+
import = SolidusBraintree::TransactionImport.new(current_order, transaction)
|
|
22
|
+
restart_checkout = params[:options] && params[:options][:restart_checkout] == "true"
|
|
23
|
+
|
|
24
|
+
respond_to do |format|
|
|
25
|
+
if import.valid?
|
|
26
|
+
import.import!(import_state, restart_checkout: restart_checkout)
|
|
27
|
+
|
|
28
|
+
format.html { redirect_to redirect_url(import) }
|
|
29
|
+
format.json { render json: { redirectUrl: redirect_url(import) } }
|
|
30
|
+
else
|
|
31
|
+
status = 422
|
|
32
|
+
format.html { import_error(import) }
|
|
33
|
+
format.json { render json: { errors: import.errors, status: status }, status: status }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def import_state
|
|
41
|
+
params[:state] || 'confirm'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def import_error(import)
|
|
45
|
+
raise InvalidImportError,
|
|
46
|
+
"Import invalid: #{import.errors.full_messages.join(', ')}"
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def redirect_url(import)
|
|
50
|
+
if import.order.complete?
|
|
51
|
+
spree.order_url(import.order)
|
|
52
|
+
else
|
|
53
|
+
spree.checkout_state_url(import.order.state)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def transaction_params
|
|
58
|
+
params.require(:transaction)
|
|
59
|
+
.permit(PERMITTED_BRAINTREE_TRANSACTION_PARAMS)
|
|
60
|
+
.merge({ payment_method: payment_method })
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def payment_method
|
|
64
|
+
SolidusBraintree::Gateway.find(params[:payment_method_id])
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -1,36 +1,72 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module SolidusBraintree
|
|
2
4
|
module Generators
|
|
3
5
|
class InstallGenerator < Rails::Generators::Base
|
|
4
6
|
class_option :auto_run_migrations, type: :boolean, default: false
|
|
7
|
+
source_root File.expand_path('templates', __dir__)
|
|
8
|
+
|
|
9
|
+
def setup_initializer
|
|
10
|
+
legacy_initializer_pathname =
|
|
11
|
+
Pathname.new(destination_root).join('config/initializers/solidus_paypal_braintree.rb')
|
|
12
|
+
|
|
13
|
+
if legacy_initializer_pathname.exist?
|
|
14
|
+
legacy_initializer_pathname.rename('config/initializers/solidus_braintree.rb')
|
|
15
|
+
|
|
16
|
+
gsub_file 'config/initializers/solidus_braintree.rb',
|
|
17
|
+
"SolidusPaypalBraintree.configure do |config|\n",
|
|
18
|
+
"SolidusBraintree.configure do |config|\n"
|
|
19
|
+
else
|
|
20
|
+
template 'initializer.rb', 'config/initializers/solidus_braintree.rb'
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def setup_javascripts
|
|
25
|
+
gsub_file 'vendor/assets/javascripts/spree/frontend/all.js',
|
|
26
|
+
"//= require spree/frontend/solidus_paypal_braintree\n", ''
|
|
27
|
+
|
|
28
|
+
append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/solidus_braintree\n"
|
|
5
29
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
30
|
+
gsub_file 'vendor/assets/javascripts/spree/backend/all.js',
|
|
31
|
+
"//= require spree/backend/solidus_paypal_braintree\n", ''
|
|
32
|
+
|
|
33
|
+
append_file 'vendor/assets/javascripts/spree/backend/all.js', "//= require spree/backend/solidus_braintree\n"
|
|
9
34
|
end
|
|
10
35
|
|
|
11
|
-
def
|
|
12
|
-
|
|
36
|
+
def setup_stylesheets
|
|
37
|
+
gsub_file 'vendor/assets/stylesheets/spree/frontend/all.css',
|
|
38
|
+
" *= require spree/frontend/solidus_paypal_braintree\n", ''
|
|
39
|
+
|
|
40
|
+
inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css',
|
|
41
|
+
" *= require spree/frontend/solidus_braintree\n", before: %r{\*/}, verbose: true
|
|
42
|
+
|
|
43
|
+
gsub_file 'vendor/assets/stylesheets/spree/backend/all.css',
|
|
44
|
+
" *= require spree/backend/solidus_paypal_braintree\n", ''
|
|
45
|
+
|
|
46
|
+
inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css',
|
|
47
|
+
" *= require spree/backend/solidus_braintree\n", before: %r{\*/}, verbose: true
|
|
13
48
|
end
|
|
14
49
|
|
|
15
50
|
def add_migrations
|
|
16
|
-
|
|
51
|
+
rake 'railties:install:migrations FROM=solidus_braintree'
|
|
17
52
|
end
|
|
18
53
|
|
|
19
|
-
def
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
end
|
|
54
|
+
def mount_engine
|
|
55
|
+
gsub_file 'config/routes.rb',
|
|
56
|
+
"mount SolidusPaypalBraintree::Engine, at: '/solidus_paypal_braintree'\n", ''
|
|
57
|
+
|
|
58
|
+
route "mount SolidusBraintree::Engine, at: '/solidus_braintree'"
|
|
25
59
|
end
|
|
26
60
|
|
|
27
|
-
|
|
61
|
+
def run_migrations
|
|
62
|
+
run_migrations = options[:auto_run_migrations] ||
|
|
63
|
+
['', 'y', 'Y'].include?(ask('Would you like to run the migrations now? [Y/n]'))
|
|
28
64
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
65
|
+
if run_migrations
|
|
66
|
+
rake 'db:migrate'
|
|
67
|
+
else
|
|
68
|
+
puts 'Skipping bin/rails db:migrate, don\'t forget to run it!' # rubocop:disable Rails/Output
|
|
69
|
+
end
|
|
34
70
|
end
|
|
35
71
|
end
|
|
36
72
|
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SolidusBraintree
|
|
4
|
+
module CountryMapper
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
USA_VARIANTS = [
|
|
8
|
+
"the united states of america",
|
|
9
|
+
"united states of america",
|
|
10
|
+
"the united states",
|
|
11
|
+
"united states",
|
|
12
|
+
"us of a",
|
|
13
|
+
"u.s.a.",
|
|
14
|
+
"usa",
|
|
15
|
+
"u.s.",
|
|
16
|
+
"us"
|
|
17
|
+
].freeze
|
|
18
|
+
|
|
19
|
+
CANADA_VARIANTS = [
|
|
20
|
+
"canada",
|
|
21
|
+
"ca"
|
|
22
|
+
].freeze
|
|
23
|
+
|
|
24
|
+
# Generates a hash mapping each variant of the country name to the same ISO
|
|
25
|
+
# ie: { "usa" => "US", "united states" => "US", "canada" => "CA", ... }
|
|
26
|
+
COUNTRY_MAP = {
|
|
27
|
+
USA_VARIANTS => "US",
|
|
28
|
+
CANADA_VARIANTS => "CA"
|
|
29
|
+
}.flat_map { |variants, iso| variants.map { |v| [v, iso] } }.to_h
|
|
30
|
+
|
|
31
|
+
included do
|
|
32
|
+
def iso_from_name(country_name)
|
|
33
|
+
COUNTRY_MAP[country_name.downcase.strip]
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|