Files
openfoodnetwork/app/services/stripe_payment_status.rb

33 lines
1.1 KiB
Ruby

# frozen_string_literal: true
class StripePaymentStatus
def initialize(payment)
@payment = payment
end
# Returns the current payment status from a live call to the Stripe API.
# Returns nil if the payment is not a Stripe payment or does not have a payment intent.
# If the payment requires authorization the status will be "requires_action".
# If the payment has been captured the status will be "succeeded".
# Docs: https://stripe.com/docs/api/payment_intents/object#payment_intent_object-status
def stripe_status
return if payment.response_code.blank?
Stripe::PaymentIntentValidator.new(payment).call.status
rescue Stripe::StripeError
# Stripe::PaymentIntentValidator will raise an error if the response from the Stripe API
# call indicates the last attempted action on the payment intent failed.
"failed"
end
# If the payment is a Stripe payment and has been captured in the associated Stripe account,
# returns true, otherwise false.
def stripe_captured?
stripe_status == "succeeded"
end
private
attr_reader :payment
end