solidus_stripe 2.0.0 → 3.2.1

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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +50 -1
  3. data/README.md +131 -7
  4. data/app/assets/javascripts/spree/frontend/solidus_stripe.js +6 -0
  5. data/app/assets/javascripts/spree/frontend/solidus_stripe/stripe-cart-page-checkout.js +88 -0
  6. data/app/assets/javascripts/spree/frontend/solidus_stripe/stripe-elements.js +148 -0
  7. data/app/assets/javascripts/spree/frontend/solidus_stripe/stripe-init.js +20 -0
  8. data/app/assets/javascripts/spree/frontend/solidus_stripe/stripe-payment-intents.js +84 -0
  9. data/app/assets/javascripts/spree/frontend/solidus_stripe/stripe-payment-request-button-shared.js +123 -0
  10. data/app/assets/javascripts/spree/frontend/solidus_stripe/stripe-payment.js +16 -0
  11. data/app/controllers/solidus_stripe/intents_controller.rb +29 -20
  12. data/app/decorators/models/spree/order_update_attributes_decorator.rb +39 -0
  13. data/app/decorators/models/spree/payment_decorator.rb +11 -0
  14. data/app/models/solidus_stripe/create_intents_order_service.rb +70 -0
  15. data/app/models/spree/payment_method/stripe_credit_card.rb +4 -9
  16. data/lib/generators/solidus_stripe/install/install_generator.rb +2 -5
  17. data/lib/solidus_stripe/engine.rb +0 -1
  18. data/lib/solidus_stripe/version.rb +1 -1
  19. data/lib/views/frontend/spree/checkout/payment/_stripe.html.erb +1 -1
  20. data/lib/views/frontend/spree/checkout/payment/v3/_elements.html.erb +1 -0
  21. data/lib/views/frontend/spree/checkout/payment/v3/_form_elements.html.erb +1 -3
  22. data/lib/views/frontend/spree/checkout/payment/v3/_intents.html.erb +1 -5
  23. data/lib/views/frontend/spree/checkout/payment/v3/_stripe.html.erb +2 -5
  24. data/lib/views/frontend/spree/orders/_stripe_payment_request_button.html.erb +1 -79
  25. data/solidus_stripe.gemspec +1 -1
  26. data/spec/features/stripe_checkout_spec.rb +143 -68
  27. data/spec/spec_helper.rb +1 -0
  28. data/spec/support/solidus_address_helper.rb +15 -0
  29. metadata +17 -8
  30. data/app/assets/javascripts/solidus_stripe/stripe-init.js +0 -1
  31. data/app/assets/javascripts/solidus_stripe/stripe-init/base.js +0 -180
  32. data/lib/views/frontend/spree/checkout/payment/v3/_elements_js.html.erb +0 -28
  33. data/lib/views/frontend/spree/checkout/payment/v3/_intents_js.html.erb +0 -48
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solidus_stripe
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Solidus Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-03 00:00:00.000000000 Z
11
+ date: 2020-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: solidus_core
@@ -36,14 +36,14 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 0.4.0
39
+ version: '0.4'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: 0.4.0
46
+ version: '0.4'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activemerchant
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -91,12 +91,20 @@ files:
91
91
  - LICENSE.md
92
92
  - README.md
93
93
  - Rakefile
94
- - app/assets/javascripts/solidus_stripe/stripe-init.js
95
- - app/assets/javascripts/solidus_stripe/stripe-init/base.js
94
+ - app/assets/javascripts/spree/frontend/solidus_stripe.js
95
+ - app/assets/javascripts/spree/frontend/solidus_stripe/stripe-cart-page-checkout.js
96
+ - app/assets/javascripts/spree/frontend/solidus_stripe/stripe-elements.js
97
+ - app/assets/javascripts/spree/frontend/solidus_stripe/stripe-init.js
98
+ - app/assets/javascripts/spree/frontend/solidus_stripe/stripe-payment-intents.js
99
+ - app/assets/javascripts/spree/frontend/solidus_stripe/stripe-payment-request-button-shared.js
100
+ - app/assets/javascripts/spree/frontend/solidus_stripe/stripe-payment.js
96
101
  - app/controllers/solidus_stripe/intents_controller.rb
97
102
  - app/controllers/solidus_stripe/payment_request_controller.rb
98
103
  - app/controllers/spree/stripe_controller.rb
104
+ - app/decorators/models/spree/order_update_attributes_decorator.rb
105
+ - app/decorators/models/spree/payment_decorator.rb
99
106
  - app/models/solidus_stripe/address_from_params_service.rb
107
+ - app/models/solidus_stripe/create_intents_order_service.rb
100
108
  - app/models/solidus_stripe/prepare_order_for_payment_service.rb
101
109
  - app/models/solidus_stripe/shipping_rates_service.rb
102
110
  - app/models/spree/payment_method/stripe_credit_card.rb
@@ -119,10 +127,9 @@ files:
119
127
  - lib/views/frontend/spree/checkout/existing_payment/_stripe.html.erb
120
128
  - lib/views/frontend/spree/checkout/payment/_stripe.html.erb
121
129
  - lib/views/frontend/spree/checkout/payment/v2/_javascript.html.erb
122
- - lib/views/frontend/spree/checkout/payment/v3/_elements_js.html.erb
130
+ - lib/views/frontend/spree/checkout/payment/v3/_elements.html.erb
123
131
  - lib/views/frontend/spree/checkout/payment/v3/_form_elements.html.erb
124
132
  - lib/views/frontend/spree/checkout/payment/v3/_intents.html.erb
125
- - lib/views/frontend/spree/checkout/payment/v3/_intents_js.html.erb
126
133
  - lib/views/frontend/spree/checkout/payment/v3/_stripe.html.erb
127
134
  - lib/views/frontend/spree/orders/_stripe_payment_request_button.html.erb
128
135
  - solidus_stripe.gemspec
@@ -132,6 +139,7 @@ files:
132
139
  - spec/models/solidus_stripe/shipping_rates_service_spec.rb
133
140
  - spec/models/spree/payment_method/stripe_credit_card_spec.rb
134
141
  - spec/spec_helper.rb
142
+ - spec/support/solidus_address_helper.rb
135
143
  homepage: https://solidus.io
136
144
  licenses:
137
145
  - BSD-3
@@ -165,3 +173,4 @@ test_files:
165
173
  - spec/models/solidus_stripe/shipping_rates_service_spec.rb
166
174
  - spec/models/spree/payment_method/stripe_credit_card_spec.rb
167
175
  - spec/spec_helper.rb
176
+ - spec/support/solidus_address_helper.rb
@@ -1 +0,0 @@
1
- //= require ./stripe-init/base
@@ -1,180 +0,0 @@
1
- window.SolidusStripe = window.SolidusStripe || {};
2
-
3
- SolidusStripe.paymentMethod = {
4
- config: $('[data-stripe-config').data('stripe-config'),
5
- requestShipping: false
6
- }
7
-
8
- var authToken = $('meta[name="csrf-token"]').attr('content');
9
-
10
- var stripe = Stripe(SolidusStripe.paymentMethod.config.publishable_key)
11
- var elements = stripe.elements({locale: 'en'});
12
-
13
- var element = $('#payment_method_' + SolidusStripe.paymentMethod.config.id);
14
- var form = element.parents('form');
15
- var errorElement = form.find('#card-errors');
16
- var submitButton = form.find('input[type="submit"]');
17
-
18
- function stripeTokenHandler(token) {
19
- var baseSelector = `<input type='hidden' class='stripeToken' name='payment_source[${SolidusStripe.paymentMethod.config.id}]`;
20
-
21
- element.append(`${baseSelector}[gateway_payment_profile_id]' value='${token.id}'/>`);
22
- element.append(`${baseSelector}[last_digits]' value='${token.card.last4}'/>`);
23
- element.append(`${baseSelector}[month]' value='${token.card.exp_month}'/>`);
24
- element.append(`${baseSelector}[year]' value='${token.card.exp_year}'/>`);
25
- form.find('input#cc_type').val(mapCC(token.card.brand || token.card.type));
26
- };
27
-
28
- function initElements() {
29
- var style = {
30
- base: {
31
- color: 'black',
32
- fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
33
- fontSmoothing: 'antialiased',
34
- fontSize: '14px',
35
- '::placeholder': {
36
- color: 'silver'
37
- }
38
- },
39
- invalid: {
40
- color: 'red',
41
- iconColor: 'red'
42
- }
43
- };
44
-
45
- elements.create('cardExpiry', {style: style}).mount('#card_expiry');
46
- elements.create('cardCvc', {style: style}).mount('#card_cvc');
47
-
48
- var cardNumber = elements.create('cardNumber', {style: style});
49
- cardNumber.mount('#card_number');
50
-
51
- return cardNumber;
52
- }
53
-
54
- function setUpPaymentRequest(config, onPrButtonMounted) {
55
- if (typeof config !== 'undefined') {
56
- var paymentRequest = stripe.paymentRequest({
57
- country: config.country,
58
- currency: config.currency,
59
- total: {
60
- label: config.label,
61
- amount: config.amount
62
- },
63
- requestPayerName: true,
64
- requestPayerEmail: true,
65
- requestShipping: config.requestShipping,
66
- shippingOptions: [
67
- ]
68
- });
69
-
70
- var prButton = elements.create('paymentRequestButton', {
71
- paymentRequest: paymentRequest
72
- });
73
-
74
- paymentRequest.canMakePayment().then(function(result) {
75
- var id = 'payment-request-button';
76
-
77
- if (result) {
78
- prButton.mount('#' + id);
79
- } else {
80
- document.getElementById(id).style.display = 'none';
81
- }
82
- if (typeof onPrButtonMounted === 'function') {
83
- onPrButtonMounted(id, result);
84
- }
85
- });
86
-
87
- paymentRequest.on('paymentmethod', function(result) {
88
- errorElement.text('').hide();
89
- handlePayment(result);
90
- });
91
-
92
- paymentRequest.on('shippingaddresschange', function(ev) {
93
- fetch('/stripe/shipping_rates', {
94
- method: 'POST',
95
- headers: { 'Content-Type': 'application/json' },
96
- body: JSON.stringify({
97
- authenticity_token: authToken,
98
- shipping_address: ev.shippingAddress
99
- })
100
- }).then(function(response) {
101
- return response.json();
102
- }).then(function(result) {
103
- if (result.error) {
104
- showError(result.error);
105
- return false;
106
- } else {
107
- ev.updateWith({
108
- status: 'success',
109
- shippingOptions: result.shipping_rates
110
- });
111
- }
112
- });
113
- });
114
-
115
- return paymentRequest;
116
- }
117
- };
118
-
119
- function handleServerResponse(response, payment) {
120
- if (response.error) {
121
- showError(response.error);
122
- completePaymentRequest(payment, 'fail');
123
- } else if (response.requires_action) {
124
- stripe.handleCardAction(
125
- response.stripe_payment_intent_client_secret
126
- ).then(function(result) {
127
- if (result.error) {
128
- showError(result.error.message);
129
- } else {
130
- fetch('/stripe/confirm_intents', {
131
- method: 'POST',
132
- headers: { 'Content-Type': 'application/json' },
133
- body: JSON.stringify({
134
- spree_payment_method_id: SolidusStripe.paymentMethod.config.id,
135
- stripe_payment_intent_id: result.paymentIntent.id,
136
- authenticity_token: authToken
137
- })
138
- }).then(function(confirmResult) {
139
- return confirmResult.json();
140
- }).then(handleServerResponse);
141
- }
142
- });
143
- } else {
144
- completePaymentRequest(payment, 'success');
145
- submitPayment(payment);
146
- }
147
- }
148
-
149
- function completePaymentRequest(payment, state) {
150
- if (payment && typeof payment.complete === 'function') {
151
- payment.complete(state);
152
- }
153
- }
154
-
155
- function showError(error) {
156
- errorElement.text(error).show();
157
-
158
- if (submitButton.length) {
159
- setTimeout(function() {
160
- $.rails.enableElement(submitButton[0]);
161
- submitButton.removeAttr('disabled').removeClass('disabled');
162
- }, 100);
163
- }
164
- };
165
-
166
- function mapCC(ccType) {
167
- if (ccType === 'MasterCard') {
168
- return 'mastercard';
169
- } else if (ccType === 'Visa') {
170
- return 'visa';
171
- } else if (ccType === 'American Express') {
172
- return 'amex';
173
- } else if (ccType === 'Discover') {
174
- return 'discover';
175
- } else if (ccType === 'Diners Club') {
176
- return 'dinersclub';
177
- } else if (ccType === 'JCB') {
178
- return 'jcb';
179
- }
180
- };
@@ -1,28 +0,0 @@
1
- <script>
2
- // Stripe V3 elements specific JS code
3
-
4
- var cardNumber = initElements();
5
-
6
- cardNumber.addEventListener('change', function(event) {
7
- if (event.error) {
8
- showError(event.error.message);
9
- } else {
10
- errorElement.hide().text('');
11
- }
12
- });
13
-
14
- form.bind('submit', function(event) {
15
- if (element.is(':visible')) {
16
- event.preventDefault();
17
-
18
- stripe.createToken(cardNumber).then(function(result) {
19
- if (result.error) {
20
- showError(result.error.message);
21
- } else {
22
- stripeTokenHandler(result.token);
23
- form[0].submit();
24
- }
25
- });
26
- }
27
- });
28
- </script>
@@ -1,48 +0,0 @@
1
- <script>
2
- // Stripe Intents JS code
3
-
4
- var cardNumber = initElements();
5
- var paymentRequest = setUpPaymentRequest(SolidusStripe.paymentMethod.config.payment_request);
6
-
7
- form.bind('submit', function(event) {
8
- if (element.is(':visible')) {
9
- event.preventDefault();
10
-
11
- errorElement.text('').hide();
12
-
13
- stripe.createPaymentMethod(
14
- 'card',
15
- cardNumber
16
- ).then(function(result) {
17
- handlePayment(result);
18
- });
19
- }
20
- });
21
-
22
- function handlePayment(payment) {
23
- if (payment.error) {
24
- showError(payment.error.message);
25
- } else {
26
- stripeTokenHandler(payment.paymentMethod);
27
- fetch('/stripe/confirm_intents', {
28
- method: 'POST',
29
- headers: {
30
- 'Content-Type': 'application/json'
31
- },
32
- body: JSON.stringify({
33
- spree_payment_method_id: SolidusStripe.paymentMethod.config.id,
34
- stripe_payment_method_id: payment.paymentMethod.id,
35
- authenticity_token: authToken
36
- })
37
- }).then(function(response) {
38
- response.json().then(function(json) {
39
- handleServerResponse(json, payment);
40
- })
41
- });
42
- }
43
- };
44
-
45
- function submitPayment(_payment) {
46
- form.unbind('submit').submit();
47
- }
48
- </script>