Configuration options for the Stripe payments plugin.
booleanfalseIf set to true, a Customer object will be created in Stripe - if
it doesn't already exist - for authenticated users, which prevents payment methods attached to other Customers
to be used with the same PaymentIntent. This is done by adding a custom field to the Customer entity to store
the Stripe customer ID, so switching this on will require a database migration / synchronization.
'automatic' | 'manual'v3.2.0'automatic'Controls how the PaymentIntent captures funds.
'automatic' (the default) charges the card as soon as the customer confirms payment, which
is the plugin's historic behaviour.
'manual' uses Stripe's separate authorization and capture flow. Confirming the payment only
places a hold on the funds (PaymentIntent status requires_capture). The plugin then adds an
Authorized payment to the order so Vendure can allocate stock, and captures the funds only
once that payment is committed and the order safely reaches PaymentAuthorized. The capture
happens outside the database transaction, and the payment_intent.succeeded webhook settles
any payment that is still Authorized after a successful capture. If the order cannot be
arranged (for example the item sold out during checkout) or the authorization does not cover
the order total, the authorization is voided instead of charged, so the customer is never
charged for an order that cannot be fulfilled.
Manual capture requires the payment_intent.amount_capturable_updated and
payment_intent.canceled webhook events to be enabled, and only applies to payment methods that support authorize-then-capture (cards and
several others). See the plugin README for details.
( injector: Injector, ctx: RequestContext, order: Order, ) => Stripe.MetadataParam | Promise<Stripe.MetadataParam>v1.9.7Attach extra metadata to Stripe payment intent creation call.
Example
Note: If the paymentIntentCreateParams is also used and returns a metadata key, then the values
returned by both functions will be merged.
( injector: Injector, ctx: RequestContext, order: Order, ) => AdditionalPaymentIntentCreateParams | Promise<AdditionalPaymentIntentCreateParams>v2.1.0Provide additional parameters to the Stripe payment intent creation. By default,
the plugin will already pass the amount, currency, customer and automatic_payment_methods: { enabled: true } parameters.
For example, if you want to provide a description for the payment intent, you can do so like this:
Example
Note: a capture_method returned here is ignored. The plugin's captureMethod option is
authoritative, since the payment handler and webhook flow depend on it, so the intent is
always created with the configured mode and a conflicting value is logged and dropped.
( injector: Injector, ctx: RequestContext, order: Order, ) => AdditionalRequestOptions | Promise<AdditionalRequestOptions>v3.1.0Provide additional options to the Stripe payment intent creation. By default,
the plugin will already pass the idempotencyKey parameter.
For example, if you want to provide a stripeAccount for the payment intent, you can do so like this:
Example
( injector: Injector, ctx: RequestContext, order: Order, ) => AdditionalCustomerCreateParams | Promise<AdditionalCustomerCreateParams>v2.1.0Provide additional parameters to the Stripe customer creation. By default,
the plugin will already pass the email and name parameters.
For example, if you want to provide an address for the customer:
Example
booleanIf your Stripe account also generates payment intents which are independent of Vendure orders, you can set this
to true to skip processing those payment intents.
Architecture reviews, custom plugin work, migrations, ongoing support. Get a hand from the team that builds Vendure.
Talk to the team