Payments
More payment scenarios
Card brand choice

Card brand choice

Enable your customers to select their preferred brand in your payment form.

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.

Identifying the available card networks

When you create a PaymentMethod, 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 */ });
const preferredNetwork = 'cartes_bancaires'; let paymentMethodOptions = {}; const {paymentMethod, error} = await stripe.createPaymentMethod({ type: 'card', card: cardElement, billing_details: { name: 'Jenny Rosen', }, }); if (error) { // Show error in payment form console.log(error); } else { // Check if cartes_bancaires is an available card network const networks = paymentMethod.card.networks; if (networks.available.includes(preferredNetwork)) { paymentMethodOptions = { card: { network: preferredNetwork, }, } } const {paymentIntent, error} = await stripe.confirmCardPayment( '{PAYMENT_INTENT_CLIENT_SECRET}', { payment_method: paymentMethod.id, payment_method_options: paymentMethodOptions, }, ); }

Confirming the card network on the server

When you create and confirm a PaymentIntent for that PaymentMethod, set payment_method_options.card.network to the card brand your customer selected in your custom payment form (e.g., cartes_bancaires):

curl https://api.stripe.com/v1/payment_intents \ -u sk_test_4eC39HqLyjWDarjtT1zdp7dc: \ -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"
# Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' intent = Stripe::PaymentIntent.create({ amount: 1099, confirm: true, currency: 'usd', payment_method: '{{PAYMENT_METHOD_ID}}', payment_method_options: { card: { network: 'cartes_bancaires', }, }, payment_method_types: ['card'], return_url: 'https://example.com/return_url', })
# Set your secret key. Remember to switch to your live secret key in production! # See your keys here: https://dashboard.stripe.com/account/apikeys stripe.api_key = 'sk_test_4eC39HqLyjWDarjtT1zdp7dc' intent = stripe.PaymentIntent.create( amount=1099, confirm=True, currency='usd', payment_method='{{PAYMENT_METHOD_ID}}', payment_method_options={ 'card': { 'network': 'cartes_bancaires' } }, payment_method_types=['card'], return_url='https://example.com/return_url', )
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys \Stripe\Stripe::setApiKey('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); $intent = \Stripe\PaymentIntent::create([ 'amount' => 1099, 'confirm' => true, 'currency' => 'usd', 'payment_method' => '{{PAYMENT_METHOD_ID}}', 'payment_method_options' => [ 'card' => [ 'network' => 'cartes_bancaires' ] ], 'payment_method_types' => ['card'], 'return_url' => 'https://example.com/return_url', ]);
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys Stripe.apiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; PaymentIntentCreateParams createParams = PaymentIntentCreateParams.builder() .setAmount(1099) .setConfirm(true) .setCurrency("usd") .setPaymentMethod("{{PAYMENT_METHOD_ID}}") .setPaymentMethodOptions(PaymentIntentCreateParams.PaymentMethodOptions.Card.Network("cartes_bancaires")) .setPaymentMethodType("card") .setReturnUrl("https://example.com/return_url") .build(); PaymentIntent intent = PaymentIntent.create(createParams);
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys const stripe = require('stripe')('sk_test_4eC39HqLyjWDarjtT1zdp7dc'); (async () => { const paymentIntent = await stripe.paymentIntents.create({ amount: 1099, confirm: true, currency: 'usd', payment_method: '{{PAYMENT_METHOD_ID}}', payment_method_options: { card: { network: 'cartes_bancaires', }, }, payment_method_types: ['card'], return_url: 'https://example.com/return_url', }); })();
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys stripe.Key = "sk_test_4eC39HqLyjWDarjtT1zdp7dc" params := &stripe.PaymentIntentParams{ Amount: stripe.Int64(1099), Confirm: stripe.Bool(true), Currency: stripe.String(string(stripe.CurrencyUSD)), PaymentMethod: stripe.String("{{PAYMENT_METHOD_ID}}"), PaymentMethodOptions: &stripe.PaymentIntentPaymentMethodOptionsParams{ Card: &stripe.PaymentIntentPaymentMethodOptionsCardParams{ Network: stripe.String("cartes_bancaires"), }, }, PaymentMethodTypes: stripe.StringSlice([]string{ "card", }), ReturnUrl: stripe.String("https://example.com/return_url"), } paymentintent.New(params)
// Set your secret key. Remember to switch to your live secret key in production! // See your keys here: https://dashboard.stripe.com/account/apikeys StripeConfiguration.ApiKey = "sk_test_4eC39HqLyjWDarjtT1zdp7dc"; var service = new PaymentIntentService(); var options = new PaymentIntentCreateOptions { Amount = 1099, Confirm = true, Currency = "usd", PaymentMethod = "{{PAYMENT_METHOD_ID}}", PaymentMethodOptions = new PaymentIntentPaymentMethodOptionsOptions { Card = new PaymentIntentPaymentMethodOptionsCardOptions { Network = "cartes_bancaires", }, }, PaymentMethodTypes = new List<string> { "card" }, ReturnUrl = "https://example.com/return_url", }; service.Create(options);

Identifying the network a charge was processed on

The charge object associated with a successful PaymentIntent 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
Token Brand
tok_visa_cartesBancaires Cartes Bancaires / Visa
tok_mastercard_cartesBancaires Cartes Bancaires / Mastercard
Payment Method Brand
pm_card_visa_credit_fr_cartesBancaires Cartes Bancaires / Visa
pm_card_mastercard_credit_fr_cartesBancaires Cartes Bancaires / Mastercard
Was this page helpful?
Questions? Contact us.
Developer tutorials on YouTube.
You can unsubscribe at any time. Read our privacy policy.