spree_stripe 1.7.1 → 1.8.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/app/controllers/spree_stripe/confirm_payments_controller.rb +52 -0
- data/app/helpers/spree_stripe/base_helper.rb +24 -2
- data/app/javascript/spree_stripe/controllers/stripe_button_controller.js +256 -338
- data/app/javascript/spree_stripe/controllers/stripe_controller.js +129 -206
- data/app/models/spree/payment_sessions/stripe.rb +1 -2
- data/app/models/spree_stripe/gateway/payment_intents.rb +0 -4
- data/app/models/spree_stripe/gateway/payment_sessions.rb +1 -1
- data/app/models/spree_stripe/order_decorator.rb +0 -27
- data/app/models/spree_stripe/shipment_decorator.rb +3 -3
- data/app/services/spree_stripe/create_payment_session.rb +18 -0
- data/app/services/spree_stripe/webhook_handlers/payment_intent_payment_failed.rb +4 -15
- data/app/services/spree_stripe/webhook_handlers/payment_intent_succeeded.rb +1 -7
- data/app/views/spree/checkout/payment/_spree_stripe.html.erb +58 -58
- data/app/views/spree_stripe/_quick_checkout.html.erb +9 -15
- data/config/locales/en.yml +1 -8
- data/config/routes.rb +3 -22
- data/db/migrate/20250310152812_setup_spree_stripe_models.rb +0 -17
- data/lib/spree_stripe/configuration.rb +0 -1
- data/lib/spree_stripe/engine.rb +0 -7
- data/lib/spree_stripe/version.rb +1 -1
- metadata +5 -44
- data/app/controllers/spree_stripe/payment_intents_controller.rb +0 -61
- data/app/jobs/spree_stripe/complete_order_job.rb +0 -8
- data/app/models/spree_stripe/payment_intent.rb +0 -81
- data/app/services/spree_stripe/create_payment_intent.rb +0 -40
- data/app/services/spree_stripe/create_setup_intent.rb +0 -20
- data/lib/spree_api_v2/spree/api/v2/platform/affirm_serializer.rb +0 -9
- data/lib/spree_api_v2/spree/api/v2/platform/after_pay_serializer.rb +0 -9
- data/lib/spree_api_v2/spree/api/v2/platform/alipay_serializer.rb +0 -9
- data/lib/spree_api_v2/spree/api/v2/platform/ideal_serializer.rb +0 -9
- data/lib/spree_api_v2/spree/api/v2/platform/klarna_serializer.rb +0 -9
- data/lib/spree_api_v2/spree/api/v2/platform/link_serializer.rb +0 -9
- data/lib/spree_api_v2/spree/api/v2/platform/przelewy24_serializer.rb +0 -9
- data/lib/spree_api_v2/spree/api/v2/platform/sepa_debit_serializer.rb +0 -9
- data/lib/spree_api_v2/spree/api/v2/storefront/stripe/base_controller.rb +0 -21
- data/lib/spree_api_v2/spree/api/v2/storefront/stripe/payment_intents_controller.rb +0 -89
- data/lib/spree_api_v2/spree/api/v2/storefront/stripe/setup_intents_controller.rb +0 -19
- data/lib/spree_api_v2/spree/v2/storefront/affirm_serializer.rb +0 -7
- data/lib/spree_api_v2/spree/v2/storefront/after_pay_serializer.rb +0 -7
- data/lib/spree_api_v2/spree/v2/storefront/alipay_serializer.rb +0 -7
- data/lib/spree_api_v2/spree/v2/storefront/ideal_serializer.rb +0 -7
- data/lib/spree_api_v2/spree/v2/storefront/klarna_serializer.rb +0 -7
- data/lib/spree_api_v2/spree/v2/storefront/link_serializer.rb +0 -7
- data/lib/spree_api_v2/spree/v2/storefront/payment_intent_serializer.rb +0 -15
- data/lib/spree_api_v2/spree/v2/storefront/przelewy24_serializer.rb +0 -7
- data/lib/spree_api_v2/spree/v2/storefront/sepa_debit_serializer.rb +0 -7
- data/lib/spree_api_v2/spree_stripe/v2/storefront/payment_method_serializer_decorator.rb +0 -17
- data/lib/spree_stripe/testing_support/factories/payment_intent_factory.rb +0 -24
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6ec2a5a3cd5e0a0b8e5160018ad055ff16dd27a2eea3e8404e4906e83b9e0758
|
|
4
|
+
data.tar.gz: b51ad1b1e21337ad780f5e2269c1850b0fd1dfb39ac778db187ae0629c933944
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f3f47966c0982f865f7dfa55074f4df6c2f8c90e2c5bdb656012266eb7c46ed690260b47fab15d7fabf0889fbaef8d22fbd153548d23f4316bcc6cdca4353d64
|
|
7
|
+
data.tar.gz: 4c9696c085fa47b26f0eb6c6dd06f4b855e0de02dd7ec583efea2c552e8be03c9d9f2952500001357ae04c06e0315a65374846a833d2267a7b6ed89b4b25e325
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Stripe redirects here after payment confirmation. Mirrors the Next.js storefront's server-side
|
|
2
|
+
# completion: finalizes the payment session + order via existing services, then
|
|
3
|
+
# redirects to the confirmation page. Completion is idempotent — an already-completed
|
|
4
|
+
# order (e.g. the webhook won the race) is treated as success.
|
|
5
|
+
module SpreeStripe
|
|
6
|
+
class ConfirmPaymentsController < (defined?(Spree::StoreController) ? Spree::StoreController : Spree::BaseController)
|
|
7
|
+
include Spree::CheckoutAnalyticsHelper if defined?(Spree::CheckoutAnalyticsHelper)
|
|
8
|
+
|
|
9
|
+
# GET /stripe/confirm_payment/:id?session=ps_...&redirect_status=...
|
|
10
|
+
def show
|
|
11
|
+
@order = current_store.orders.find_by_prefix_id!(params[:id])
|
|
12
|
+
|
|
13
|
+
return redirect_to_cart_canceled if @order.canceled?
|
|
14
|
+
return redirect_to_complete if @order.completed?
|
|
15
|
+
|
|
16
|
+
payment_session = @order.payment_sessions.find_by_prefix_id!(params[:session])
|
|
17
|
+
payment_session.payment_method.complete_payment_session(
|
|
18
|
+
payment_session: payment_session,
|
|
19
|
+
params: { session_result: params[:redirect_status] }
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
return handle_failure(payment_session.errors.full_messages.to_sentence) unless payment_session.completed?
|
|
23
|
+
|
|
24
|
+
Spree::Dependencies.carts_complete_service.constantize.call(cart: @order) unless @order.completed?
|
|
25
|
+
|
|
26
|
+
if @order.reload.completed?
|
|
27
|
+
track_checkout_completed if respond_to?(:track_checkout_completed)
|
|
28
|
+
redirect_to_complete
|
|
29
|
+
else
|
|
30
|
+
handle_failure
|
|
31
|
+
end
|
|
32
|
+
rescue Spree::Core::GatewayError => e
|
|
33
|
+
handle_failure(e.message)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
def redirect_to_complete
|
|
39
|
+
redirect_to spree.checkout_complete_path(@order.token), status: :see_other
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def redirect_to_cart_canceled
|
|
43
|
+
flash[:error] = Spree.t(:order_canceled)
|
|
44
|
+
redirect_to spree.cart_path, status: :see_other
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def handle_failure(message = nil)
|
|
48
|
+
flash[:error] = message.presence || Spree.t('stripe.payment_could_not_be_processed')
|
|
49
|
+
redirect_to spree.checkout_state_path(@order.token, 'payment'), status: :see_other
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -4,10 +4,32 @@ module SpreeStripe
|
|
|
4
4
|
@current_stripe_gateway ||= current_store.stripe_gateway
|
|
5
5
|
end
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
# Server-side payment session for the current order, used for the legacy
|
|
8
|
+
# Rails storefront payment flow: reuses the order's pending Stripe
|
|
9
|
+
# session (keeping its amount in sync) or creates one. Memoized per request.
|
|
10
|
+
# @return [Spree::PaymentSessions::Stripe, nil]
|
|
11
|
+
def current_stripe_payment_session
|
|
8
12
|
return if current_stripe_gateway.nil?
|
|
9
13
|
|
|
10
|
-
@
|
|
14
|
+
@current_stripe_payment_session ||= SpreeStripe::CreatePaymentSession.new.call(@order, current_stripe_gateway)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# The cart-prefixed id the v3 Store API addresses carts by (e.g. `cart_xxx`).
|
|
18
|
+
# Must match Spree::Api::V3::CartSerializer's encoding exactly.
|
|
19
|
+
# @return [String]
|
|
20
|
+
def stripe_cart_prefixed_id(order)
|
|
21
|
+
"cart_#{Spree::PrefixedId::SQIDS.encode([order.id])}"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# The store's publishable Spree API key, used by the storefront JS as the
|
|
25
|
+
# `X-Spree-API-Key` header for v3 Store API calls. Creates one on first use
|
|
26
|
+
# when the store has no active publishable key yet.
|
|
27
|
+
# @return [String]
|
|
28
|
+
def current_store_publishable_api_key
|
|
29
|
+
@current_store_publishable_api_key ||= (
|
|
30
|
+
current_store.api_keys.publishable.active.first ||
|
|
31
|
+
current_store.api_keys.create!(key_type: 'publishable', name: 'Storefront')
|
|
32
|
+
).plaintext_token
|
|
11
33
|
end
|
|
12
34
|
end
|
|
13
35
|
end
|