mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-12-12 23:09:03 +01:00
47 lines
1.6 KiB
Ruby
47 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Provides methods for pay cart by Stripe
|
|
class Payments::StripeService
|
|
require 'stripe/service'
|
|
include Payments::PaymentConcern
|
|
|
|
def payment(order, coupon_code, payment_id)
|
|
amount = debit_amount(order, coupon_code)
|
|
|
|
raise Cart::ZeroPriceError if amount.zero?
|
|
|
|
# Create the PaymentIntent
|
|
intent = Stripe::PaymentIntent.create(
|
|
{
|
|
payment_method: payment_id,
|
|
amount: Stripe::Service.new.stripe_amount(amount),
|
|
currency: Setting.get('stripe_currency'),
|
|
confirmation_method: 'manual',
|
|
confirm: true,
|
|
customer: order.statistic_profile.user.payment_gateway_object.gateway_object_id
|
|
}, { api_key: Setting.get('stripe_secret_key') }
|
|
)
|
|
|
|
if intent&.status == 'succeeded'
|
|
o = payment_success(order, coupon_code, 'card', intent.id, intent.class.name)
|
|
return { order: o }
|
|
end
|
|
|
|
if intent&.status == 'requires_action' && intent&.next_action&.type == 'use_stripe_sdk'
|
|
{ order: order, payment: { requires_action: true, payment_intent_client_secret: intent.client_secret,
|
|
type: 'payment' } }
|
|
end
|
|
end
|
|
|
|
def confirm_payment(order, coupon_code, payment_id)
|
|
intent = Stripe::PaymentIntent.confirm(payment_id, {}, { api_key: Setting.get('stripe_secret_key') })
|
|
if intent&.status == 'succeeded'
|
|
o = payment_success(order, coupon_code, 'card', intent.id, intent.class.name)
|
|
{ order: o }
|
|
else
|
|
order.update(state: 'payment_failed')
|
|
{ order: order, payment: { error: { statusText: 'payment failed' } } }
|
|
end
|
|
end
|
|
end
|