stripe-ruby/lib/stripe/resources/payment_intent.rb
2024-03-07 23:11:29 +00:00

300 lines
14 KiB
Ruby

# File generated from our OpenAPI spec
# frozen_string_literal: true
module Stripe
# A PaymentIntent guides you through the process of collecting a payment from your customer.
# We recommend that you create exactly one PaymentIntent for each order or
# customer session in your system. You can reference the PaymentIntent later to
# see the history of payment attempts for a particular session.
#
# A PaymentIntent transitions through
# [multiple statuses](https://stripe.com/docs/payments/intents#intent-statuses)
# throughout its lifetime as it interfaces with Stripe.js to perform
# authentication flows and ultimately creates at most one successful charge.
#
# Related guide: [Payment Intents API](https://stripe.com/docs/payments/payment-intents)
class PaymentIntent < APIResource
extend Stripe::APIOperations::Create
extend Stripe::APIOperations::List
extend Stripe::APIOperations::Search
include Stripe::APIOperations::Save
OBJECT_NAME = "payment_intent"
def self.object_name
"payment_intent"
end
# Manually reconcile the remaining amount for a customer_balance PaymentIntent.
def apply_customer_balance(params = {}, opts = {})
request_stripe_object(
method: :post,
path: format("/v1/payment_intents/%<intent>s/apply_customer_balance", { intent: CGI.escape(self["id"]) }),
params: params,
opts: opts
)
end
# Manually reconcile the remaining amount for a customer_balance PaymentIntent.
def self.apply_customer_balance(intent, params = {}, opts = {})
request_stripe_object(
method: :post,
path: format("/v1/payment_intents/%<intent>s/apply_customer_balance", { intent: CGI.escape(intent) }),
params: params,
opts: opts
)
end
# You can cancel a PaymentIntent object when it's in one of these statuses: requires_payment_method, requires_capture, requires_confirmation, requires_action or, [in rare cases](https://stripe.com/docs/payments/intents), processing.
#
# After it's canceled, no additional charges are made by the PaymentIntent and any operations on the PaymentIntent fail with an error. For PaymentIntents with a status of requires_capture, the remaining amount_capturable is automatically refunded.
#
# You can't cancel the PaymentIntent for a Checkout Session. [Expire the Checkout Session](https://stripe.com/docs/api/checkout/sessions/expire) instead.
def cancel(params = {}, opts = {})
request_stripe_object(
method: :post,
path: format("/v1/payment_intents/%<intent>s/cancel", { intent: CGI.escape(self["id"]) }),
params: params,
opts: opts
)
end
# You can cancel a PaymentIntent object when it's in one of these statuses: requires_payment_method, requires_capture, requires_confirmation, requires_action or, [in rare cases](https://stripe.com/docs/payments/intents), processing.
#
# After it's canceled, no additional charges are made by the PaymentIntent and any operations on the PaymentIntent fail with an error. For PaymentIntents with a status of requires_capture, the remaining amount_capturable is automatically refunded.
#
# You can't cancel the PaymentIntent for a Checkout Session. [Expire the Checkout Session](https://stripe.com/docs/api/checkout/sessions/expire) instead.
def self.cancel(intent, params = {}, opts = {})
request_stripe_object(
method: :post,
path: format("/v1/payment_intents/%<intent>s/cancel", { intent: CGI.escape(intent) }),
params: params,
opts: opts
)
end
# Capture the funds of an existing uncaptured PaymentIntent when its status is requires_capture.
#
# Uncaptured PaymentIntents are cancelled a set number of days (7 by default) after their creation.
#
# Learn more about [separate authorization and capture](https://stripe.com/docs/payments/capture-later).
def capture(params = {}, opts = {})
request_stripe_object(
method: :post,
path: format("/v1/payment_intents/%<intent>s/capture", { intent: CGI.escape(self["id"]) }),
params: params,
opts: opts
)
end
# Capture the funds of an existing uncaptured PaymentIntent when its status is requires_capture.
#
# Uncaptured PaymentIntents are cancelled a set number of days (7 by default) after their creation.
#
# Learn more about [separate authorization and capture](https://stripe.com/docs/payments/capture-later).
def self.capture(intent, params = {}, opts = {})
request_stripe_object(
method: :post,
path: format("/v1/payment_intents/%<intent>s/capture", { intent: CGI.escape(intent) }),
params: params,
opts: opts
)
end
# Confirm that your customer intends to pay with current or provided
# payment method. Upon confirmation, the PaymentIntent will attempt to initiate
# a payment.
# If the selected payment method requires additional authentication steps, the
# PaymentIntent will transition to the requires_action status and
# suggest additional actions via next_action. If payment fails,
# the PaymentIntent transitions to the requires_payment_method status or the
# canceled status if the confirmation limit is reached. If
# payment succeeds, the PaymentIntent will transition to the succeeded
# status (or requires_capture, if capture_method is set to manual).
# If the confirmation_method is automatic, payment may be attempted
# using our [client SDKs](https://stripe.com/docs/stripe-js/reference#stripe-handle-card-payment)
# and the PaymentIntent's [client_secret](https://stripe.com/docs/api#payment_intent_object-client_secret).
# After next_actions are handled by the client, no additional
# confirmation is required to complete the payment.
# If the confirmation_method is manual, all payment attempts must be
# initiated using a secret key.
# If any actions are required for the payment, the PaymentIntent will
# return to the requires_confirmation state
# after those actions are completed. Your server needs to then
# explicitly re-confirm the PaymentIntent to initiate the next payment
# attempt.
def confirm(params = {}, opts = {})
request_stripe_object(
method: :post,
path: format("/v1/payment_intents/%<intent>s/confirm", { intent: CGI.escape(self["id"]) }),
params: params,
opts: opts
)
end
# Confirm that your customer intends to pay with current or provided
# payment method. Upon confirmation, the PaymentIntent will attempt to initiate
# a payment.
# If the selected payment method requires additional authentication steps, the
# PaymentIntent will transition to the requires_action status and
# suggest additional actions via next_action. If payment fails,
# the PaymentIntent transitions to the requires_payment_method status or the
# canceled status if the confirmation limit is reached. If
# payment succeeds, the PaymentIntent will transition to the succeeded
# status (or requires_capture, if capture_method is set to manual).
# If the confirmation_method is automatic, payment may be attempted
# using our [client SDKs](https://stripe.com/docs/stripe-js/reference#stripe-handle-card-payment)
# and the PaymentIntent's [client_secret](https://stripe.com/docs/api#payment_intent_object-client_secret).
# After next_actions are handled by the client, no additional
# confirmation is required to complete the payment.
# If the confirmation_method is manual, all payment attempts must be
# initiated using a secret key.
# If any actions are required for the payment, the PaymentIntent will
# return to the requires_confirmation state
# after those actions are completed. Your server needs to then
# explicitly re-confirm the PaymentIntent to initiate the next payment
# attempt.
def self.confirm(intent, params = {}, opts = {})
request_stripe_object(
method: :post,
path: format("/v1/payment_intents/%<intent>s/confirm", { intent: CGI.escape(intent) }),
params: params,
opts: opts
)
end
# Creates a PaymentIntent object.
#
# After the PaymentIntent is created, attach a payment method and [confirm](https://stripe.com/docs/api/payment_intents/confirm)
# to continue the payment. Learn more about <a href="/docs/payments/payment-intents">the available payment flows
# with the Payment Intents API.
#
# When you use confirm=true during creation, it's equivalent to creating
# and confirming the PaymentIntent in the same call. You can use any parameters
# available in the [confirm API](https://stripe.com/docs/api/payment_intents/confirm) when you supply
# confirm=true.
def self.create(params = {}, opts = {})
request_stripe_object(method: :post, path: "/v1/payment_intents", params: params, opts: opts)
end
# Perform an incremental authorization on an eligible
# [PaymentIntent](https://stripe.com/docs/api/payment_intents/object). To be eligible, the
# PaymentIntent's status must be requires_capture and
# [incremental_authorization_supported](https://stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported)
# must be true.
#
# Incremental authorizations attempt to increase the authorized amount on
# your customer's card to the new, higher amount provided. Similar to the
# initial authorization, incremental authorizations can be declined. A
# single PaymentIntent can call this endpoint multiple times to further
# increase the authorized amount.
#
# If the incremental authorization succeeds, the PaymentIntent object
# returns with the updated
# [amount](https://stripe.com/docs/api/payment_intents/object#payment_intent_object-amount).
# If the incremental authorization fails, a
# [card_declined](https://stripe.com/docs/error-codes#card-declined) error returns, and no other
# fields on the PaymentIntent or Charge update. The PaymentIntent
# object remains capturable for the previously authorized amount.
#
# Each PaymentIntent can have a maximum of 10 incremental authorization attempts, including declines.
# After it's captured, a PaymentIntent can no longer be incremented.
#
# Learn more about [incremental authorizations](https://stripe.com/docs/terminal/features/incremental-authorizations).
def increment_authorization(params = {}, opts = {})
request_stripe_object(
method: :post,
path: format("/v1/payment_intents/%<intent>s/increment_authorization", { intent: CGI.escape(self["id"]) }),
params: params,
opts: opts
)
end
# Perform an incremental authorization on an eligible
# [PaymentIntent](https://stripe.com/docs/api/payment_intents/object). To be eligible, the
# PaymentIntent's status must be requires_capture and
# [incremental_authorization_supported](https://stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported)
# must be true.
#
# Incremental authorizations attempt to increase the authorized amount on
# your customer's card to the new, higher amount provided. Similar to the
# initial authorization, incremental authorizations can be declined. A
# single PaymentIntent can call this endpoint multiple times to further
# increase the authorized amount.
#
# If the incremental authorization succeeds, the PaymentIntent object
# returns with the updated
# [amount](https://stripe.com/docs/api/payment_intents/object#payment_intent_object-amount).
# If the incremental authorization fails, a
# [card_declined](https://stripe.com/docs/error-codes#card-declined) error returns, and no other
# fields on the PaymentIntent or Charge update. The PaymentIntent
# object remains capturable for the previously authorized amount.
#
# Each PaymentIntent can have a maximum of 10 incremental authorization attempts, including declines.
# After it's captured, a PaymentIntent can no longer be incremented.
#
# Learn more about [incremental authorizations](https://stripe.com/docs/terminal/features/incremental-authorizations).
def self.increment_authorization(intent, params = {}, opts = {})
request_stripe_object(
method: :post,
path: format("/v1/payment_intents/%<intent>s/increment_authorization", { intent: CGI.escape(intent) }),
params: params,
opts: opts
)
end
# Returns a list of PaymentIntents.
def self.list(filters = {}, opts = {})
request_stripe_object(method: :get, path: "/v1/payment_intents", params: filters, opts: opts)
end
def self.search(params = {}, opts = {})
request_stripe_object(
method: :get,
path: "/v1/payment_intents/search",
params: params,
opts: opts
)
end
def self.search_auto_paging_each(params = {}, opts = {}, &blk)
search(params, opts).auto_paging_each(&blk)
end
# Updates properties on a PaymentIntent object without confirming.
#
# Depending on which properties you update, you might need to confirm the
# PaymentIntent again. For example, updating the payment_method
# always requires you to confirm the PaymentIntent again. If you prefer to
# update and confirm at the same time, we recommend updating properties through
# the [confirm API](https://stripe.com/docs/api/payment_intents/confirm) instead.
def self.update(id, params = {}, opts = {})
request_stripe_object(
method: :post,
path: format("/v1/payment_intents/%<id>s", { id: CGI.escape(id) }),
params: params,
opts: opts
)
end
# Verifies microdeposits on a PaymentIntent object.
def verify_microdeposits(params = {}, opts = {})
request_stripe_object(
method: :post,
path: format("/v1/payment_intents/%<intent>s/verify_microdeposits", { intent: CGI.escape(self["id"]) }),
params: params,
opts: opts
)
end
# Verifies microdeposits on a PaymentIntent object.
def self.verify_microdeposits(intent, params = {}, opts = {})
request_stripe_object(
method: :post,
path: format("/v1/payment_intents/%<intent>s/verify_microdeposits", { intent: CGI.escape(intent) }),
params: params,
opts: opts
)
end
end
end