Card brand choice
Since June 2016, EU regulation mandates merchants and acquirers to follow consumers’ card brand choice for payments made with co-badged cards (e.g., cards branded with both Visa and Mastercard and a local scheme such as Cartes Bancaires). In practice, this means that merchants must allow customers to select their preferred brand in a payment form. Merchants can set a default brand choice as long as customers have the option to change that choice.
The Payment Intents API enables merchants to follow a customer’s preferred card brand choice if specified. If a preferred choice is not specified by the customer, you instruct Stripe to select one to optimize for authorization rate.
Only Stripe Elements and custom payment forms support card brand choice at this time.
Identifying the available card networks
When you create a payment method object, Stripe returns a list of networks the card can run on:
{ "id": "pm_1ExKbO2eZvKYlo2CcAu5tDP9", "object": "payment_method", ... "card": { "brand": "visa", ... "wallet": null, "networks": { "available": ["visa", "cartes_bancaires"] } }, "created": 1563398634, "customer": null, "livemode": false, "metadata": {}, "type": "card" }
Confirming the card network using Stripe Elements
Create a component in your payment form to include a way for your customers to specify their preferred card brand. In your existing Stripe Elements integration, pass the card brand choice (e.g., cartes_bancaires
) as the payment_method_options.card.network
in confirmCardPayment:
var preferredNetwork = 'cartes_bancaires'; var paymentMethodOptions = {} stripe.createPaymentMethod('card', cardElement, { billing_details: { name: 'Jenny Rosen', }, }).then(function(response) { // Check if cartes_bancaires is an available card network var networks = response.paymentMethod.card.networks; if (networks.available.includes(preferredNetwork)) { paymentMethodOptions = { card: { network: preferredNetwork, }, }, } return stripe.confirmCardPayment( '{PAYMENT_INTENT_CLIENT_SECRET}', { payment_method: response.paymentMethod.id, payment_method_options: paymentMethodOptions, } ); }).then(function(result) { /* handle error/success */ });
Confirming the card network on the server
When you create and confirm a payment intent for that payment method, set payment_method_options.card.network
to the card brand your customer selected in your custom payment form (e.g., cartes_bancaires
):
You might need to redirect your customer to the 3DS authentication page if the PaymentIntent
response has a status of requires_action
. See the documentation on card authentication and 3D Secure for more information.
curl https://api.stripe.com/v1/payment_intents \ -u
\ -d "amount"=1099 \ -d "confirm"="true" \ -d "currency"="usd" \ -d "payment_method"="{{PAYMENT_METHOD_ID}}" \ -d "payment_method_options[card][network]"="cartes_bancaires" \ -d "payment_method_types[]"="card" \ -d "return_url"="https://example.com/return_url"sk_test_4eC39HqLyjWDarjtT1zdp7dc
Identifying the network a charge was processed on
The charge object associated with a successful payment intent contains a network
field indicating which card network the payment was processed on:
{ "id": "ch_1Ff52K2eZvKYlo2CWe10i0s7", "object": "charge", ... "payment_method_details": { "card": { "brand": "visa", ... "network": "cartes_bancaires", "three_d_secure": null, "wallet": null }, "type": "card" } }
Supported card brands
The following card brand choices are supported:
amex
cartes_bancaires
diners_club
discover
jcb
mastercard
visa
unionpay
Testing
You can use the following co-badged cards to test your integration:
Number | Brand | CVC | Date |
---|---|---|---|
4000002500001001 | Cartes Bancaires / Visa | Any 3 digits | Any future date |
5555552500001001 | Cartes Bancaires / Mastercard | Any 3 digits | Any future date |