Accepter un paiement Sofort
Découvrez comment accepter les paiements effectués à l'aide de Sofort, un moyen de paiement très répandu en Europe.
Avertissement
Le moyen de paiement SOFORT n’est plus disponible depuis le 31 mars 2025. Pour en savoir plus, consultez notre page de support.
Mise en garde
Nous vous recommandons de suivre le guide Accepter un paiement, sauf si vous devez exécuter la confirmation manuelle côté serveur, ou si votre intégration requiert la présentation de moyens de paiement de manière distincte. Si vous avez déjà intégré Elements, consultez le Guide de migration du Payment Element.
Sofort est un moyen de paiement à usage unique et à notification différée avec lequel le client doit authentifier son paiement. Le client paie avec Sofort en étant redirigé depuis votre application vers le portail de sa banque afin qu’il authentifie le paiement. Le client reçoit généralement la notification d’échec ou de réussite sous 2 à 14 jours.
Remarque
Pour accepter Sofort, vous devez respecter les Conditions d’utilisation du service Sofort.
Configurer StripeCôté serveurCôté client
Côté serveur
Pour cette intégration, votre serveur doit être doté d’endpoints qui communiquent avec l’API Stripe. Utilisez nos bibliothèques officielles pour accéder à l’API Stripe depuis votre serveur :
Côté client
Le SDK React Native est disponible en open source et fait l’objet d’une documentation complète. En interne, il utilise des SDK Android et iOS natifs. Pour installer le SDK React Native de Stripe, exécutez l’une des commandes suivantes dans le répertoire de votre projet (selon le gestionnaire de paquets que vous utilisez) :
Ensuite, installez les autres dépendances nécessaires :
- For iOS, go to the ios directory and run
pod install
to ensure that you also install the required native dependencies. - Pour Android, il n’y a plus de dépendances à installer.
Remarque
Nous vous recommandons de suivre le guide officiel de TypeScript pour ajouter la prise en charge de TypeScript.
Initialisation de Stripe
Pour initialiser Stripe dans votre application React Native, wrappez votre écran de paiement avec le composant StripeProvider
ou utilisez la méthode d’initialisation initStripe
. Seule la clé publiable de l’API dans publishableKey
est nécessaire. L’exemple suivant montre comment initialiser Stripe à l’aide du composant StripeProvider
.
import { useState, useEffect } from 'react'; import { StripeProvider } from '@stripe/stripe-react-native'; function App() { const [publishableKey, setPublishableKey] = useState(''); const fetchPublishableKey = async () => { const key = await fetchKey(); // fetch key from your server here setPublishableKey(key); }; useEffect(() => { fetchPublishableKey(); }, []); return ( <StripeProvider publishableKey={publishableKey} merchantIdentifier="merchant.identifier" // required for Apple Pay urlScheme="your-url-scheme" // required for 3D Secure and bank redirects > {/* Your app code here */} </StripeProvider> ); }
Remarque
Utilisez vos clés de test d’API lors de vos activités de test et de développement, et vos clés du mode production pour la publication de votre application.
Créer un PaymentIntentCôté serveurCôté client
Un PaymentIntent représente votre intention d’encaisser un paiement auprès d’un client et suit le cycle de vie du processus de paiement.
Côté serveur
Créez un PaymentIntent
sur votre serveur et précisez le montant amount
à encaisser ainsi que la devise eur
(Sofort ne prend en charge aucune autre devise). Si vous avez déjà une intégration Payment Intents, ajoutez sofort
à la liste des types de moyens de paiement.
Modification de la langue préférée
Par défaut, Stripe affiche la page d’autorisation de Sofort dans la langue correspondant au code pays spécifié. Vous pouvez remplacer cette langue par la langue préférée de votre client en précisant ce choix dans la requête et en modifiant la valeur de la propriété preferred_
. Les valeurs prises en charge sont de
, en
, es
, it
, fr
, nl
et pl
.
Au lieu de transmettre à l’application la totalité de l’objet PaymentIntent, renvoyez sa clé secrète du client. Il s’agit d’une clé unique qui vous permet de confirmer le paiement et d’actualiser les informations de paiement côté client, le tout sans autoriser la manipulation d’informations sensibles comme le montant du paiement.
Côté client
Côté client, demandez un PaymentIntent auprès de votre serveur et sauvegardez la clé secrète du client.
const fetchPaymentIntentClientSecret = async () => { const response = await fetch(`${API_URL}/create-payment-intent`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ email, currency: 'eur', payment_method_types: ['sofort'], }), }); const { clientSecret, error } = await response.json(); return { clientSecret, error }; };
Collecter les informations du moyen de paiement
Dans votre application, recueillez l’adresse e-mail de votre client.
export default function SofortPaymentScreen() { const [email, setEmail] = useState(); const handlePayPress = async () => { // ... }; return ( <Screen> <TextInput placeholder="E-mail" onChange={(value) => setEmail(value.nativeEvent.text)} /> </Screen> ); }
Envoyer le paiement à Stripe
Récupérez la clé secrète du client auprès du PaymentIntent que vous avez créé, puis appelez le confirmPayment
. Une page Web s’affiche dans laquelle le client peut finaliser le paiement sur le site Web ou l’application de sa banque. L’intention de paiement est alors finalisée avec le résultat du paiement.
export default function SofortPaymentScreen() { const [email, setEmail] = useState(); const billingDetails: PaymentMethodCreateParams.BillingDetails = { name: 'John Doe', }; const { error, paymentIntent } = await confirmPayment(clientSecret, { paymentMethodType: 'Sofort', paymentMethodData: { billingDetails, country: 'DE', } }); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else if (paymentIntent) { Alert.alert( 'Success', `The payment was confirmed successfully! currency: ${paymentIntent.currency}` ); } return ( <Screen> <TextInput placeholder="E-mail" onChange={(value) => setEmail(value.nativeEvent.text)} /> </Screen> ); }
Gérer les événements post-paiement
Sofort étant un moyen de paiement à notification différée, l’état du PaymentIntent demeure à l’état payment_intent.processing jusqu’à 14 jours après sa création (la « date limite »). En environnement de test, l’état du PaymentIntent reste indiqué comme en cours de traitement pendant trois minutes afin de simuler ce processus.
- Stripe recommande d’exécuter les achats pendant l’état de traitement. En moyenne, vous pouvez vous attendre à ce que 0,2 % des tentatives de paiement Sofort échouent après avoir atteint l’état de traitement. Cette recommandation s’applique uniquement aux paiements Sofort en raison de son faible taux d’échec et ne s’applique pas aux autres moyens de paiement avec notification différée.
- Vous préférez peut-être n’exécuter les commandes qu’après avoir reçu l’événement payment_intent.succeeded. Stripe envoie cet événement après que la tentative de paiement a été confirmée et que les fonds sont garantis.
- Si un client n’effectue pas le paiement, Stripe envoie l’événement payment_intent.failed et le PaymentIntent repasse à l’état
requires_
.payment_ method
Utilisez le Dashboard, un webhook personnalisé ou une solution partenaire pour recevoir ces événements et exécuter des actions, comme envoyer une confirmation de commande par e-mail à votre client, enregistrer la vente dans une base de données ou lancer un workflow de livraison.
Manuellement
Utilisez le Dashboard Stripe pour consulter tous vos paiements Stripe, envoyer des reçus par e-mail, gérer les virements et réessayer d’effectuer les paiements ayant échoué.
Code personnalisé
Créez un gestionnaire de webhooks pour écouter des événements et créer des tunnels de paiement asynchrones personnalisés. Testez et déboguez votre intégration de webhooks en local, grâce à la CLI Stripe.
Applications préconfigurées
Intégrez une application partenaire pour gérer les événements métier courants, comme l’automatisation, le marketing ou les ventes.
Paiements contestés
Le risque de fraude ou de paiements non reconnus est faible, car le client doit authentifier son paiement auprès de sa banque. Par conséquent, vous n’aurez pas à gérer de litiges qui se transforment en contestations de paiement avec retrait des fonds de votre compte Stripe.
Tentatives ayant échoué
Si une tentative de paiement n’a pas été confirmée dans le temps imparti, l’état de l’objet PaymentIntent bascule automatiquement de processing
à requires_
. De plus si les fonds sont reçus après la date limite, le client reçoit automatiquement un remboursement.
En moyenne, environ 0,2 % des tentatives de paiement Sofort échouent. Ce chiffre varie en fonction de votre secteur ou de votre base de clients. En fonction du montant moyen de paiement que vous enregistrez, du type de produits ou de services que vous offrez et du risque associé à votre activité, il peut être plus judicieux de traiter les commandes uniquement après avoir reçu l’événement payment_
.
Remboursements
Sofort accepte uniquement les demandes de remboursement dans les 180 jours suivant la date du débit initial. Passé ce délai, le remboursement du paiement n’est plus possible.
Vous pouvez soumettre un remboursement pour les paiements en attente qui n’ont pas encore été confirmés. Si vous créez un remboursement partiel ou complet pour un PaymentIntent dont l’état est processing
, le remboursement est exécuté uniquement une fois que l’état a basculé sur succeeded
. Si l’état du PaymentIntent est requires_
après l’échec d’une tentative de paiement, les remboursements partiels et complets sont marqués comme annulés, puisque les fonds n’ont jamais quitté le compte bancaire du client.