Accettare un pagamento Klarna
Scopri come accettare un pagamento con Klarna, una modalità di pagamento a rate utilizzata in tutto il mondo.
Voci riga unificate con Klarna
Per ottimizzare i tassi di approvazione durante l’integrazione con Klarna, includi dati line_
per rappresentare il contenuto del carrello di un acquirente. Per l’accesso anticipato, consulta le voci riga di Payments.
Quando un cliente sceglie Klarna nella tua app, viene visualizzata una vista web per l’autenticazione del pagamento. Una volta che il cliente sarà stato reindirizzato alla tua app, potrai confermare immediatamente se il pagamento ha avuto esito positivo o negativo.
Nota
Prima di avviare l’integrazione, verifica che il tuo account sia idoneo per Klarna tramite la pagina delle impostazioni delle modalità di pagamento.
Configurare StripeLato serverLato client
Lato server
Per questa integrazione sono necessari endpoint sul server che parlano con l’API Stripe. Utilizza le nostre librerie ufficiali per accedere all’API Stripe dal tuo server:
Lato client
L’SDK React Native è open source e completamente documentato. Internamente, utilizza SDK iOS nativi e Android. Per installare l’SDK React Native di Stripe, esegui uno dei seguenti comandi nella directory del progetto (a seconda del gestore di pacchetti utilizzato):
Poi, installa alcune altre dipendenze necessarie:
- Per iOS, vai alla directory ios ed esegui
pod install
per garantire che vengano installate anche le dipendenze native necessarie. - Per Android, non ci sono più dipendenze da installare.
Nota
Per aggiungere l’assistenza di TypeScript, ti consigliamo di consultare e seguire le indicazioni incluse nella guida ufficiale di TypeScript.
Inizializzazione di Stripe
Per inizializzare Stripe nell’app React Native, esegui il wrapping della schermata di pagamento con il componente StripeProvider
oppure utilizza il metodo di inizializzazione initStripe
. È richiesta solo la chiave pubblicabile dell’API in publishableKey
. L’esempio seguente spiega come inizializzare Stripe utilizzando il componente 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> ); }
Nota
Usa le chiavi di test dell’API durante i test e le attività di sviluppo e le chiavi della modalità live quando pubblichi l’app.
Creare un PaymentIntentLato serverLato client
Stripe utilizza un oggetto PaymentIntent per rappresentare la tua intenzione di riscuotere un pagamento da un cliente, monitorando i tentativi di addebito e le modifiche dello stato del pagamento durante l’intera procedura.
Lato server
Innanzitutto crea un PaymentIntent
sul tuo server e specifica l’importo da riscuotere e la valuta. Se hai già un’integrazione che utilizza l’API Payment Intents, aggiungi klarna
all’elenco dei tipi di metodi di pagamento per il tuo PaymentIntent
.
Lato client
Un PaymentIntent include una chiave privata client. Tale chiave può essere utilizzata nell’app React Native per completare la procedura di pagamento in sicurezza invece di specificare l’intero oggetto PaymentIntent. Nella tua app, richiedi un PaymentIntent al server e memorizza la chiave privata 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>; }
Inviare il pagamento a StripeLato client
Per inviare il pagamento a Stripe occorre la chiave privata client del PaymentIntent che hai creato. Includila nella chiamata a 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!`); } };
Eseguire il test dell'integrazione Klarna
Di seguito abbiamo selezionato dati di test per i Paesi attualmente supportati. In una sandbox, Klarna approva o rifiuta una transazione in base all’indirizzo email fornito.
Autenticazione a due fattori
Qualsiasi numero a sei cifre è un codice valido per l’autenticazione a due fattori. Utilizza 999999
per la mancata autenticazione.
Modalità di rimborso
Nel flusso di Klarna in modalità di test, puoi utilizzare i seguenti valori di test per provare i diversi tipi di rimborso:
Tipo | Valore |
---|---|
Addebito diretto | DE11520513735120710131 |
Bonifico bancario | Banca demo |
Carta di credito |
|
Carta di debito |
|
Pagamenti non riusciti
Klarna decide se accettare o rifiutare una transazione in base a diversi fattori, ad esempio da quanto tempo l’acquirente utilizza Klarna, l’importo in sospeso che il cliente deve rimborsare o il valore dell’ordine corrente.
Quando il cliente seleziona un metodo di pagamento a rate, Klarna esegue una valutazione del rischio prima di accettare la transazione. A seconda del risultato della valutazione, dell’importo della transazione o del debito residuo del cliente, Klarna potrebbe rifiutare la transazione. Pertanto ti consigliamo di inserire altre opzioni di pagamento nel flusso di completamento della transazione, come ad esempio card
. In questi casi, il PaymentMethod viene scollegato e lo stato dell’oggetto PaymentIntent diventa automaticamente a requires_
.
I clienti devono completare il pagamento entro 48 ore dal reindirizzamento al sito Klarna. Se non viene intrapresa alcuna azione dopo 48 ore, l’oggetto PaymentMethod viene scollegato e lo stato dell’oggetto PaymentIntent passa automaticamente da requires_
a requires_
.
In questi casi, invita il cliente a riprovare con una diversa opzione di pagamento presente nel tuo flusso di completamento della transazione.
Limiti di frequenza di Klarna
Le richieste API indirizzate a Klarna sono soggette a limiti di frequenza oltre ai limiti di frequenza a livello dell’API di Stripe. Questi limiti possono variare a seconda della forma delle richieste API effettuate. In generale, se effettui più di 360 richieste al minuto, potresti riscontrare una certa limitazione della velocità sotto forma di risposte con codice di stato HTTP 400
o 402
. Contattaci per ulteriori informazioni se temi che il tuo utilizzo possa raggiungere questi livelli, poiché Klarna potrebbe essere in grado di aumentare questi limiti caso per caso.
Messaggi di errore
In genere i pagamenti Klarna non riusciti restituiscono uno dei seguenti codici di errore. Questi codici vengono visualizzati nell’oggetto API last_payment_error.
Attenzione
Prima della versione API 2023-08-16
, tutti gli errori di Klarna venivano segnalati come payment_intent_authentication_failure. Verifica che la tua versione dell’API sia aggiornata per visualizzare gli errori dettagliati elencati di seguito.
Codice di errore | Spiegazione |
---|---|
payment_method_customer_decline | Il cliente ha annullato il pagamento sulla pagina di Klarna |
payment_method_provider_decline | Klarna ha rifiutato il pagamento del cliente |
payment_intent_payment_attempt_expired | Il cliente non ha mai completato il pagamento sulla pagina di Klarna e la sessione di pagamento è scaduta |
payment_method_not_available | Si è verificato un errore imprevisto durante il tentativo di utilizzare Klarna |