# Gérer les moyens de paiement par défaut dans le Dashboard

Mettez à niveau votre API pour gérer les moyens de paiement dans le Dashboard par défaut.

Le 16&nbsp;août&nbsp;2023, Stripe a [mis à jour le processus de sélection](https://stripe.com/blog/dynamic-payment-methods) des moyens de paiement par défaut applicables aux PaymentIntents et SetupIntents créés avec les API [/v1/payment_intents](https://docs.stripe.com/api/payment_intents.md) et [/v1/setup_intents](https://docs.stripe.com/api/setup_intents.md).

Dans les versions antérieures de l’API Stripe, si vous ne spécifiiez pas de paramètre [payment_method_types](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_types) lors de la requête de création, Stripe utilisait par défaut le moyen de paiement par carte pour les PaymentIntents et pour les SetupIntents.

Désormais, si vous ne spécifiez pas le paramètre `payment_method_types` dans la demande de création, Stripe applique par défaut les moyens de paiement admissibles que vous gérez depuis votre [Dashboard](https://dashboard.stripe.com/settings/payment_methods) à vos PaymentIntents et SetupIntents.

### Moyens de paiement

Par défaut, Stripe active les cartes bancaires et autres moyens de paiement courants. Vous avez la possibilité d’activer ou de désactiver des moyens de paiement directement depuis le [Dashboard Stripe](https://dashboard.stripe.com/settings/payment_methods). Dans Checkout, Stripe évalue la devise et les restrictions éventuelles, puis présente dynamiquement au client les moyens de paiement pris en charge.

Pour voir comment vos moyens de paiement s’affichent pour les clients, saisissez un ID de transaction ou définissez le montant et la devise d’une commande sur la page [Vérification des moyens de paiement](https://dashboard.stripe.com/settings/payment_methods/review) du Dashboard.

Checkout prend en charge Apple Pay et Google Pay sans modifications au niveau de l’intégration. Découvrez comment [tester les wallets](https://docs.stripe.com/testing/wallets.md?ui=embedded-page).

## Mettre à jour vos flux de paiement

Choisissez le chemin de mise à niveau qui correspond à votre intégration Stripe actuelle&nbsp;:

#### Elements

Si votre intégration utilise le Card Element ou des Elements de moyens de paiement individuels, nous vous recommandons de migrer vers les [Payment Elements](https://docs.stripe.com/payments/payment-element/migration.md). Cette intégration unique et unifiée vous permet d’accepter plus de 25&nbsp;moyens de paiement différents.

### Créer le PaymentIntent

Dans cette version de l’API, la spécification du paramètre [automatic_payment_methods.enabled](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-automatic_payment_methods-enabled) est facultatif. Si vous ne le spécifiez pas, Stripe considère que la valeur est `true`, ce qui active sa fonctionnalité par défaut.

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d amount=1099 \
  -d currency=usd
```

### Confirmations côté client avec Stripe.js

Si votre intégration utilise Stripe.js pour confirmer les paiements avec [confirmPayment](https://docs.stripe.com/js/payment_intents/confirm_payment) ou par [moyen de paiement](https://docs.stripe.com/js/payment_intents/payment_method), vos processus existants restent les mêmes et ne nécessitent aucun autre changement.

Lorsque vous confirmez des paiements, nous vous recommandons de fournir le paramètre [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url). Ce paramètre vous permet d’accepter des moyens de paiement qui [nécessitent une redirection](https://docs.stripe.com/payments/payment-methods/payment-method-support.md#additional-api-supportability).

#### HTML + JS

```javascript
const form = document.getElementById('payment-form');

form.addEventListener('submit', async (event) => {
  event.preventDefault();

  const {error} = await stripe.confirmPayment({
    //`Elements` instance that was used to create the Payment Element
    elements,
    confirmParams: {
      return_url: 'https://example.com/return_url',
    },
  });

  if (error) {
    // This point will only be reached if there is an immediate error when
    // confirming the payment. Show error to your customer (for example, payment
    // details incomplete)
    const messageContainer = document.querySelector('#error-message');
    messageContainer.textContent = error.message;
  } else {
    // Your customer will be redirected to your `return_url`. For some payment
    // methods like iDEAL, your customer will be redirected to an intermediate
    // site first to authorize the payment, then redirected to the `return_url`.
  }
});
```

#### Réagir

```jsx
import React, {useState} from 'react';
import {useStripe, useElements, PaymentElement} from '@stripe/react-stripe-js';

const CheckoutForm = () => {
  const stripe = useStripe();
  const elements = useElements();

  const [errorMessage, setErrorMessage] = useState(null);

  const handleSubmit = async (event) => {
    // We don't want to let default form submission happen here,
    // which would refresh the page.
    event.preventDefault();

    if (!stripe || !elements) {
      // Stripe.js hasn't yet loaded.
      // Make sure to disable form submission until Stripe.js has loaded.
      return;
    }

    const {error} = await stripe.confirmPayment({
      //`Elements` instance that was used to create the Payment Element
      elements,
      confirmParams: {
        return_url: 'https://example.com/return_url',
      },
    });


    if (error) {
      // This point will only be reached if there is an immediate error when
      // confirming the payment. Show error to your customer (for example, payment
      // details incomplete)
      setErrorMessage(error.message);
    } else {
      // Your customer will be redirected to your `return_url`. For some payment
      // methods like iDEAL, your customer will be redirected to an intermediate
      // site first to authorize the payment, then redirected to the `return_url`.
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <PaymentElement />
      <button disabled={!stripe}>Submit</button>
      {/* Show error message to your customers */}
      {errorMessage && <div>{errorMessage}</div>}
    </form>
  )
};

export default CheckoutForm;
```

### Confirmation côté serveur

Si vous utilisez la confirmation côté serveur, vous devez utiliser le paramètre [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) dans votre intégration.

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d amount=1099 \
  -d currency=usd \
  -d confirm=true \
  -d "payment_method={{PAYMENTMETHOD_ID}}" \
  --data-urlencode "return_url=https://example.com/return_url"
```

Vous pouvez également créer le PaymentIntent ou le SetupIntent avec le paramètre [automatic_payment_methods.allow_redirects](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-automatic_payment_methods-allow_redirects) défini sur `never`. Cela désactive l’exigence `return_url` lors de la confirmation. Vous pouvez toujours gérer les moyens de paiement depuis le [Dashboard](https://dashboard.stripe.com/settings/payment_methods), mais les [moyens de paiement qui nécessitent une redirection](https://docs.stripe.com/payments/bank-redirects.md#bank-redirects-api-support) ne sont pas éligibles.

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d amount=1099 \
  -d currency=usd \
  -d confirm=true \
  -d "payment_method={{PAYMENTMETHOD_ID}}" \
  -d "automatic_payment_methods[enabled]=true" \
  -d "automatic_payment_methods[allow_redirects]=never"
```

Enfin, vous pouvez créer le PaymentIntent ou le SetupIntent avec le paramètre [allowed_payment_method_types](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-allowed_payment_method_types). Cela désactive également l’obligation de fournir `return_url` lors de la confirmation. Avec cette option, vous ne pouvez pas gérer les moyens de paiement depuis le [Dashboard](https://dashboard.stripe.com/settings/payment_methods).

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d amount=1099 \
  -d currency=usd \
  -d confirm=true \
  -d "payment_method={{PAYMENTMETHOD_ID}}" \
  -d "allowed_payment_method_types[]=card"
```

#### Checkout et Payment Links

Si votre intégration utilise Checkout et Payment Links, consultez le [guide de mise à niveau de votre version d’API](https://docs.stripe.com/upgrades.md) pour effectuer la mise à niveau sans modifier votre code d’intégration.

#### API

Si votre intégration confirme les paiements avec le paramètre [off_session](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-off_session) défini sur `true`, vos processus existants restent les mêmes et ne nécessitent aucune autre modification.

Sinon, vous devez fournir le paramètre [return_url](https://docs.stripe.com/api/payment_intents/confirm.md#confirm_payment_intent-return_url) dans votre intégration.

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d amount=1099 \
  -d currency=usd \
  -d confirm=true \
  -d "payment_method={{PAYMENTMETHOD_ID}}" \
  --data-urlencode "return_url=https://example.com/return_url"
```

Vous pouvez également créer le PaymentIntent ou le SetupIntent avec le paramètre [automatic_payment_methods.allow_redirects](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-automatic_payment_methods-allow_redirects) défini sur `never`. Cela désactive également l’exigence `return_url` lors de la confirmation. Vous pouvez toujours gérer les moyens de paiement à partir du [Dashboard](https://dashboard.stripe.com/settings/payment_methods), mais les moyens de paiement qui nécessitent une redirection ne seront pas admissibles.

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d amount=1099 \
  -d currency=usd \
  -d confirm=true \
  -d "payment_method={{PAYMENTMETHOD_ID}}" \
  -d "automatic_payment_methods[enabled]=true" \
  -d "automatic_payment_methods[allow_redirects]=never"
```

Enfin, vous pouvez créer le PaymentIntent ou le SetupIntent avec le paramètre [allowed_payment_method_types](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-allowed_payment_method_types). Cela désactive également l’obligation de fournir `return_url` lors de la confirmation. Avec cette option, vous ne pouvez pas gérer les moyens de paiement depuis le [Dashboard](https://dashboard.stripe.com/settings/payment_methods).

```curl
curl https://api.stripe.com/v1/payment_intents \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d amount=1099 \
  -d currency=usd \
  -d confirm=true \
  -d "payment_method={{PAYMENTMETHOD_ID}}" \
  -d "allowed_payment_method_types[]=card"
```
