Accepter les paiements Klarna
Comment accepter les paiements Klarna, un moyen de paiement international qui permet aux clients d'acheter tout de suite et de payer plus tard
Postes de facture unifiés avec Klarna
Pour optimiser les taux d’approbation lors de l’intégration à Klarna, incluez des données line_
pour représenter le contenu du panier d’un acheteur. Pour bénéficier d’un accès anticipé, consultez la page Postes de paiement.
Lorsqu’un client sélectionne Klarna dans votre application, une vue web lui permettant d’authentifier son paiement s’affiche. Une fois votre client redirigé vers votre application, vous pouvez immédiatement confirmer si le paiement a abouti ou échoué.
Remarque
Avant de débuter votre intégration, vérifiez que votre compte est éligible à Klarna sur la page des paramètres des moyens de paiement.
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 :
- Pour iOS, accédez au répertoire ** ios** et exécutez
pod install
pour vous assurer d’installer également les dépendances natives requises. - 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
Pour représenter votre intention d’encaisser le paiement d’un client, Stripe utilise un objet PaymentIntent qui suit vos tentatives de débit et les changements d’état du paiement tout au long du processus de paiement.
Côté serveur
Créez tout d’abord un PaymentIntent
sur votre serveur, puis indiquez le montant à encaisser ainsi que la devise. Si votre intégration inclut déjà l’API Payment Intents, ajoutez klarna
à la liste des types de moyens de paiement valides pour votre PaymentIntent
.
Côté client
Un PaymentIntent contient une clé secrète du client. Au lieu de transmettre la totalité de l’objet PaymentIntent, vous pouvez utiliser la clé secrète du client dans votre application React Native pour finaliser le processus de paiement en toute sécurité. Dans votre application, demandez un PaymentIntent auprès de votre serveur et sauvegardez sa clé secrète du client.
function PaymentScreen() { // ... const fetchPaymentIntentClientSecret = async () => { const response = await fetch(`${API_URL}/create-payment-intent`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ currency: 'eur', }), }); const {clientSecret} = await response.json(); return clientSecret; }; return <View>...</View>; }
Soumettre le paiement à StripeCôté client
Pour soumettre le paiement à Stripe, vous devez utiliser la clé secrète client à partir du PaymentIntent que vous avez créé. Incluez-la dans votre appel à confirmPayment
:
import {Picker} from '@react-native-picker/picker'; import {confirmPayment} from '@stripe/stripe-react-native'; export default function MyPaymentScreen() { const handlePayPress = async () => { // Fetch the intent client secret from the backend. // See `fetchPaymentIntentClientSecret()`'s implementation above. const clientSecret = await fetchPaymentIntentClientSecret(); const {error, paymentIntent} = await confirmPayment(clientSecret, { paymentMethodType: 'Klarna' }, }); if (error) { console.log('Payment confirmation error', error.message); // Update UI to prompt user to retry payment (and possibly another payment method) } else if (paymentIntent) { Alert.alert('Success', `The payment was confirmed successfully!`); } };
Tester l'intégration Klarna
Nous avons réuni ci-dessous des données de test pour les pays pris en charge. Dans un environnement de test, Klarna s’appuie sur l’adresse e-mail fournie pour approuver ou refuser une transaction.
Authentification à deux facteurs
Tout numéro à six chiffres forme un code d’authentification à deux facteurs valide. Utilisez 999999
pour que l’authentification échoue.
Mode de remboursement
Dans le flux Klarna, vous pouvez utiliser les valeurs de test suivantes pour essayer divers types de remboursements :
Type | Valeur |
---|---|
Prélèvement automatique | DE11520513735120710131 |
Virement bancaire | Banque de démonstration |
Carte bancaire |
|
Carte de débit |
|
Échecs de paiement
Klarna prend en compte de nombreux facteurs pour accepter ou refuser une transaction (par exemple, la durée d’utilisation de Klarna, le montant résiduel que le client doit rembourser ou encore la valeur de la commande actuelle).
Lorsque le client sélectionne un moyen de paiement différé, Klarna effectue une évaluation des risques avant d’accepter la transaction. Klarna peut refuser la transaction en raison d’un résultat insatisfaisant de l’évaluation des risques, du montant de la transaction en question ou du niveau de dette du client. C’est pourquoi nous vous recommandons d’intégrer des options de paiement supplémentaires telles que card
dans votre tunnel de paiement. Dans ces cas, le PaymentMethod est dissocié et l’état de l’objet PaymentIntent passe automatiquement à requires_
.
Les clients sont tenus d’effectuer le paiement dans les 48 heures suivant leur redirection vers le site Klarna. Si aucune action n’est effectuée au bout de 48 heures, le PaymentMethod est dissocié et l’état de l’objet PaymentIntent passe automatiquement de requires_
à requires_
.
Dans ce cas, informez votre client pour réessayer avec une option de paiement différente présentée dans votre tunnel de paiement.
Limites de débit Klarna
Les requêtes API adressées à Klarna sont soumises à des limites de débit supplémentaires qui dépassent les limites de débit à l’échelle de l’API de Stripe. Ces limites peuvent varier en fonction de la forme des requêtes API que vous effectuez. En général, si vous effectuez plus de 360 requêtes par minute, vous constaterez peut-être une limitation de débit sous la forme de réponses avec le code d’état HTTP 400
ou 402
. Veuillez nous contacter pour obtenir plus d’informations si vous craignez que votre utilisation n’atteigne ces niveaux, car Klarna pourrait augmenter ces limites au cas par cas.
Messages d’erreur
Les paiements Klarna qui échouent renvoient normalement l’un des codes d’échec suivants. Ces codes apparaissent dans l’objet API last_payment_error.
Mise en garde
Dans les versions de l’API antérieures à 2023-08-16
, chaque erreur Klarna était signalée comme suit : payment_intent_authentication_failure. Assurez-vous que votre version de l’API est à jour pour consulter les erreurs répertoriées ci-dessous.
Code d’échec | Explication |
---|---|
payment_method_customer_decline | Le client a annulé le paiement sur la page de Klarna |
payment_method_provider_decline | Klarna a refusé le paiement du client |
payment_intent_payment_attempt_expired | Le client n’a jamais mené à bien le paiement sur la page de Klarna et la session de paiement a expiré |
payment_method_not_available | Une erreur inattendue est survenue lors de l’utilisation de Klarna |