mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
43 lines
1.0 KiB
Ruby
43 lines
1.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# This class validates if a given payment intent ID is valid in Stripe
|
|
module Stripe
|
|
class PaymentIntentValidator
|
|
def initialize(payment)
|
|
@payment = payment
|
|
end
|
|
|
|
def call
|
|
payment_intent_response = Stripe::PaymentIntent.retrieve(
|
|
payment_intent_id,
|
|
stripe_account: stripe_account_id
|
|
)
|
|
|
|
raise_if_last_payment_error_present(payment_intent_response)
|
|
|
|
payment_intent_response
|
|
end
|
|
|
|
private
|
|
|
|
attr_accessor :payment
|
|
|
|
def payment_intent_id
|
|
payment.response_code
|
|
end
|
|
|
|
def stripe_account_id
|
|
enterprise_id = payment.payment_method&.preferred_enterprise_id
|
|
|
|
StripeAccount.find_by(enterprise_id:)&.stripe_user_id
|
|
end
|
|
|
|
def raise_if_last_payment_error_present(payment_intent_response)
|
|
return unless payment_intent_response.respond_to?(:last_payment_error) &&
|
|
payment_intent_response.last_payment_error.present?
|
|
|
|
raise Stripe::StripeError, payment_intent_response.last_payment_error.message
|
|
end
|
|
end
|
|
end
|