# 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/%s/apply_customer_balance", { 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 cancel(params = {}, opts = {}) request_stripe_object( method: :post, path: format("/v1/payment_intents/%s/cancel", { 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 capture(params = {}, opts = {}) request_stripe_object( method: :post, path: format("/v1/payment_intents/%s/capture", { 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 confirm(params = {}, opts = {}) request_stripe_object( method: :post, path: format("/v1/payment_intents/%s/confirm", { intent: CGI.escape(self["id"]) }), params: params, opts: opts ) end # Perform an decremental 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 # [decremental_authorization.status](https://stripe.com/docs/api/charges/object#charge_object-payment_method_details-card-decremental_authorization) # must be available. # # Decremental authorizations decrease the authorized amount on your customer's card # to the new, lower amount provided. A single PaymentIntent can call this endpoint multiple times to further decrease the authorized amount. # # After decrement, the PaymentIntent object # returns with the updated # [amount](https://stripe.com/docs/api/payment_intents/object#payment_intent_object-amount). # The PaymentIntent will now be capturable up to the new authorized amount. # # Each PaymentIntent can have a maximum of 10 decremental or incremental authorization attempts, including declines. # After it's captured, a PaymentIntent can no longer be decremented. def decrement_authorization(params = {}, opts = {}) request_stripe_object( method: :post, path: format("/v1/payment_intents/%s/decrement_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 increment_authorization(params = {}, opts = {}) request_stripe_object( method: :post, path: format("/v1/payment_intents/%s/increment_authorization", { intent: CGI.escape(self["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/%s/verify_microdeposits", { 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/%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 self.cancel(intent, params = {}, opts = {}) request_stripe_object( method: :post, path: format("/v1/payment_intents/%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 self.capture(intent, params = {}, opts = {}) request_stripe_object( method: :post, path: format("/v1/payment_intents/%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 self.confirm(intent, params = {}, opts = {}) request_stripe_object( method: :post, path: format("/v1/payment_intents/%s/confirm", { intent: CGI.escape(intent) }), params: params, opts: opts ) end # Perform an decremental 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 # [decremental_authorization.status](https://stripe.com/docs/api/charges/object#charge_object-payment_method_details-card-decremental_authorization) # must be available. # # Decremental authorizations decrease the authorized amount on your customer's card # to the new, lower amount provided. A single PaymentIntent can call this endpoint multiple times to further decrease the authorized amount. # # After decrement, the PaymentIntent object # returns with the updated # [amount](https://stripe.com/docs/api/payment_intents/object#payment_intent_object-amount). # The PaymentIntent will now be capturable up to the new authorized amount. # # Each PaymentIntent can have a maximum of 10 decremental or incremental authorization attempts, including declines. # After it's captured, a PaymentIntent can no longer be decremented. def self.decrement_authorization(intent, params = {}, opts = {}) request_stripe_object( method: :post, path: format("/v1/payment_intents/%s/decrement_authorization", { intent: CGI.escape(intent) }), 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/%s/increment_authorization", { intent: CGI.escape(intent) }), 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/%s/verify_microdeposits", { 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 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 # 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/%s", { id: CGI.escape(id) }), params: params, opts: opts ) end end end