Accettare un pagamento
Accettare pagamenti online in modo sicuro
Crea un modulo di pagamento o utilizza una pagina di pagamento preintegrata per iniziare ad accettare i pagamenti online.

Questa integrazione combina tutte le fasi necessarie per effettuare un pagamento, ovvero l’acquisizione dei dati di pagamento e la conferma del pagamento, in un’unica scheda visualizzata nella tua app.
Configurare StripeLato serverLato client
Innanzitutto, devi creare un account Stripe. Registrati ora.
Lato server
Per questa integrazione sono necessari endpoint sul server che comunicano 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 installper garantire di installare anche le dipendenze native richieste. - 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.
Abilitare modalità di pagamento
Visualizza le impostazioni delle modalità di pagamento e abilita le modalità di pagamento che vuoi accettare. Per creare un PaymentIntent è necessario che sia abilitata almeno una modalità di pagamento.
Per impostazione predefinita, Stripe abilita le carte e altri metodi di pagamento tra i più utilizzati per aiutarti a raggiungere più clienti. Detto ciò, ti consigliamo di attivare ulteriori metodi pertinenti per la tua attività e i tuoi clienti. Per ulteriori informazioni sul supporto di prodotti e metodi di pagamento, consulta la sezione Supporto per il metodo di pagamento. Per le commissioni consulta la nostra pagina delle tariffe.
Aggiungere un endpointLato server
Nota
Per visualizzare il PaymentSheet prima di creare un PaymentIntent, consulta Raccogliere i dati di pagamento prima di creare un intento.
Questa integrazione utilizza tre oggetti dell’API Stripe:
PaymentIntent: Stripe lo utilizza 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 la procedura.
(Optional) Customer: per configurare un metodo di pagamento per pagamenti futuri, devi associarlo a un oggetto Customer. Crea un oggetto Customer quando il cliente crea un account con la tua attività. Se il cliente effettua il pagamento come ospite, puoi creare un oggetto Customer prima del pagamento e associarlo successivamente alla tua rappresentazione interna dell’account del cliente.
(Facoltativo) CustomerSession: l’oggetto Customer contiene informazioni sensibili che non possono essere recuperate direttamente da un’app. Una CustomerSession concede all’SDK l’accesso temporaneo all’oggetto Customer e fornisce altre opzioni di configurazione. Visualizza un elenco completo delle opzioni di configurazione.
Nota
Se non salvi mai le carte in un oggetto Customer e non permetti ai clienti che ritornano di riutilizzare le carte salvate, puoi omettere gli oggetti Customer e CustomerSession nella tua integrazione.
Per motivi di sicurezza, la tua app non può creare questi oggetti. Aggiungi invece un endpoint sul tuo server per:
- Recuperare l’oggetto Customer o ne crea uno nuovo.
- Crea una CustomerSession per il cliente.
- Crea un PaymentIntent con i parametri importo, valuta e cliente.
- Restituisce la chiave privata client del Payment Intent, il
client_della CustomerSession, l’id del cliente e la tua chiave pubblicabile alla tua app.secret
I metodi di pagamento mostrati ai clienti durante il completamento della transazione sono inclusi anche nel PaymentIntent. Puoi consentire a Stripe di acquisire i metodi di pagamento dalle impostazioni della Dashboard oppure puoi elencarli manualmente. Indipendentemente dall’opzione che sceglierai, ricorda che la valuta specificata nel PaymentIntent filtra il metodo di pagamento mostrato al cliente. Ad esempio, se specifichi eur nel PaymentIntent e hai abilitato OXXO nella Dashboard, il cliente non vedrà OXXO perché questo metodo non supporta i pagamenti in eur.
A meno che la tua integrazione non richieda un’opzione con codice per offrire i metodi di pagamento, Stripe consiglia l’opzione automatica. Ciò è dovuto al fatto che Stripe valuta le limitazioni dei metodi di pagamento, la valuta e altri parametri per determinare l’elenco dei metodi di pagamento accettati. I metodi di pagamento che migliorano la conversione e che sono più pertinenti alla valuta e alla posizione del cliente hanno la priorità.
Acquisire i dati di pagamentoLato client
Prima di visualizzare Payment Element per dispositivi mobili, la tua pagina di pagamento dovrebbe:
- Mostrare i prodotti acquistati e l’importo totale
- Acquisire le eventuali informazioni richieste per la spedizione
- Includere un pulsante di pagamento per aprire l’interfaccia utente di Stripe
Nella procedura di pagamento della tua app, invia una richiesta di rete all’endpoint di back-end che hai creato nella fase precedente e chiama initPaymentSheet dall’hook useStripe.
export default function CheckoutScreen() { const { initPaymentSheet, presentPaymentSheet } = useStripe(); const [loading, setLoading] = useState(false); const fetchPaymentSheetParams = async () => { const response = await fetch(`${API_URL}/payment-sheet`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, }); const { paymentIntent, ephemeralKey, customer } = await response.json(); return { paymentIntent, ephemeralKey, customer, }; }; const initializePaymentSheet = async () => { const { paymentIntent, ephemeralKey, customer, } = await fetchPaymentSheetParams(); const { error } = await initPaymentSheet({ merchantDisplayName: "Example, Inc.", customerId: customer, customerEphemeralKeySecret: ephemeralKey, paymentIntentClientSecret: paymentIntent, // Set `allowsDelayedPaymentMethods` to true if your business can handle payment //methods that complete payment after a delay, like SEPA Debit and Sofort. allowsDelayedPaymentMethods: true, defaultBillingDetails: { name: 'Jane Doe', } }); if (!error) { setLoading(true); } }; const openPaymentSheet = async () => { // see below }; useEffect(() => { initializePaymentSheet(); }, []); return ( <Screen> <Button variant="primary" disabled={!loading} title="Checkout" onPress={openPaymentSheet} /> </Screen> ); }
Quando il cliente tocca il pulsante Checkout, chiama presentPaymentSheet() per aprire la scheda. Quando il cliente completa il pagamento, la scheda si chiude e la promessa si risolve con uno StripeError<PaymentSheetError> opzionale.
export default function CheckoutScreen() { // continued from above const openPaymentSheet = async () => { const { error } = await presentPaymentSheet(); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else { Alert.alert('Success', 'Your order is confirmed!'); } }; return ( <Screen> <Button variant="primary" disabled={!loading} title="Checkout" onPress={openPaymentSheet} /> </Screen> ); }
Se non si verificano errori, comunica all’utente che la procedura è terminata (ad esempio, visualizzando una schermata di conferma d’ordine).
Impostare allowsDelayedPaymentMethods su true consente di utilizzare i metodi di pagamento con notifica differita come i conti bancari degli Stati Uniti. Per questi metodi di pagamento, lo stato finale del pagamento non è noto al completamento di PaymentSheet, in quanto va a buon fine o meno in un secondo momento. Se supporti questi tipi di metodi di pagamento, informa il cliente che il suo ordine è confermato e procedi all’evasione (ad esempio alla spedizione del prodotto), spedisci il suo prodotto) solo quando avrai ricevuto il pagamento.
Configurare un URL di ritorno (solo iOS)Lato client
Quando un cliente esce dalla tua app (ad esempio, per autenticarsi in Safari o nell’app della sua banca), offri un modo per tornare automaticamente alla tua app. Molti metodi di pagamento require un URL di reindirizzamento. Se non ne fornisci uno, non possiamo mostrare agli utenti i metodi di pagamento che richiedono un URL di reindirizzamento, anche se li hai abilitati.
Per fornire un URL di ritorno:
- Registra un URL personalizzato. I link universali non sono supportati.
- Configura il tuo URL personalizzato.
- Configura il tuo componente principale per inoltrare l’URL all’SDK di Stripe come mostrato di seguito.
Nota
Se utilizzi Expo, imposta il tuo schema nel file app..
import { useEffect, useCallback } from 'react'; import { Linking } from 'react-native'; import { useStripe } from '@stripe/stripe-react-native'; export default function MyApp() { const { handleURLCallback } = useStripe(); const handleDeepLink = useCallback( async (url: string | null) => { if (url) { const stripeHandled = await handleURLCallback(url); if (stripeHandled) { // This was a Stripe URL - you can return or add extra handling here as you see fit } else { // This was NOT a Stripe URL – handle as you normally would } } }, [handleURLCallback] ); useEffect(() => { const getUrlAsync = async () => { const initialUrl = await Linking.getInitialURL(); handleDeepLink(initialUrl); }; getUrlAsync(); const deepLinkListener = Linking.addEventListener( 'url', (event: { url: string }) => { handleDeepLink(event.url); } ); return () => deepLinkListener.remove(); }, [handleDeepLink]); return ( <View> <AwesomeAppComponent /> </View> ); }
In più, imposta il returnURL quando chiami la modalità initPaymentSheet:
await initPaymentSheet({ ... returnURL: 'your-app://stripe-redirect', ... });
Per ulteriori informazioni sugli schemi di URL nativi, consulta la documentazione relativa ad Android e a iOS.
Gestire gli eventi successivi al pagamento
Stripe invia un evento payment_intent.succeeded quando il pagamento viene completato. Utilizza lo strumento webhook Dashboard o segui la guida ai webhook per ricevere questi eventi ed eseguire azioni come l’invio di una email per la conferma di un ordine al cliente, la registrazione della vendita in un database o l’avvio del flusso di lavoro per una spedizione.
Ascolta questi eventi invece di attendere una chiamata di ritorno dal client. Sul client, il cliente potrebbe chiudere la finestra del browser o uscire dall’app prima dell’esecuzione della chiamata di ritorno e i client malintenzionati potrebbero manipolare la risposta. La configurazione dell’integrazione per l’ascolto di eventi asincroni ti consente di accettare diversi tipi di modalità di pagamento con una sola integrazione.
Oltre alla gestione dell’evento payment_, è consigliabile gestire altri eventi durante la riscossione di pagamenti tramite Payment Element:
| Evento | Descrizione | Azione |
|---|---|---|
| payment_intent.succeeded | Inviato quando un cliente ha disposto un pagamento con esito positivo. | Invia al cliente la conferma di un ordine ed evade l’ordine. |
| payment_intent.processing | Inviato quando un cliente ha correttamente disposto un pagamento che non è stato ancora completato. Questo evento viene di solito inviato quando il cliente dispone un addebito bancario. Sarà poi seguito da un evento payment_ o da un evento payment_. | Invia al cliente la conferma di un ordine che indica il pagamento in sospeso. Per i beni digitali, potresti voler evadere l’ordine senza attendere il completamento del pagamento. |
| payment_intent.payment_failed | Inviato quando il cliente ha tentato un pagamento che non è andato a buon fine. | Se un pagamento passa da processing a payment_, offri al cliente un altro tentativo di pagamento. |
Testare l'integrazione
Per ulteriori informazioni su come testare la tua integrazione, consulta la sezione Test.
FacoltativoAbilita Link
Abilita Link nelle impostazioni delle modalità di pagamento per consentire ai tuoi clienti di salvare e riutilizzare i dati di pagamento in modo sicuro utilizzando il pulsante di pagamento rapido con un clic di Link.
Specificare l’indirizzo email del cliente in Mobile Payment Element
Link autentica un cliente utilizzando il suo indirizzo email. Stripe consiglia di precompilare il maggior numero di informazioni possibile per semplificare la procedura di pagamento.
Per precompilare il nome, l’indirizzo email e il numero di telefono del cliente, inserisci in initPaymentSheet una proprietà defaultBillingDetails con le informazioni del cliente.
await initPaymentSheet({ ... defaultBillingDetails: { name: 'Jenny Rosen', email: 'jenny.rosen@example.com', phone: '888-888-8888', }, });
FacoltativoAbilitare Apple Pay
Registra un nuovo ID esercente Apple
Ottieni un ID esercente Apple effettuando la registrazione di un nuovo identificativo sul sito web degli sviluppatori Apple.
Compila il modulo con una descrizione e un identificativo. La descrizione è un promemoria per te e potrai modificarla in futuro. Stripe consiglia di utilizzare il nome dell’app come identificativo (ad esempio, merchant.).
Crea un nuovo certificato di Apple Pay
Crea un certificato per la tua app per crittografare i dati di pagamento.
Vai su Impostazioni certificato iOS nella Dashboard, fai clic su Aggiungi nuova applicazione e segui la guida.
Scarica un file con richiesta di firma certificato (CSR) per ottenere da Apple un certificato sicuro che ti consentirà di utilizzare Apple Pay.
Un file CSR deve essere utilizzato per emettere un solo certificato. Se cambi il tuo ID esercente Apple, devi andare su Impostazioni certificato iOS nella Dashboard per ottenere un nuovo CSR e un nuovo certificato.
Effettua l’integrazione con Xcode
Aggiungi la funzionalità Apple Pay alla tua app. In Xcode, apri le impostazioni di progetto, fai clic nella scheda Signing & Capabilities (Firma e funzionalità), poi aggiungi la funzionalità Apple Pay. A questo punto il sistema potrebbe chiederti di effettuare l’accesso al tuo account di sviluppatore. Seleziona l’ID esercente che hai creato e la tua app sarà pronta ad accettare Apple Pay.

Abilita la funzionalità Apple Pay in Xcode
Aggiungi Apple Pay
Tracciabilità dell’ordine
Per aggiungere informazioni sulla tracciabilità degli ordini in iOS 16 o versioni successive, imposta la funzione di richiamata su setOrderTracking. Stripe richiama la tua implementazione dopo che il pagamento è stato completato, ma prima che iOS chiuda il foglio di Apple Pay.
Nell’implementazione della funzione di richiamata setOrderTracking, recupera i dettagli dell’ordine completato dal tuo server e specifica questi dettagli nella funzione di completion fornita.
Per ulteriori informazioni sulla tracciabilità degli ordini, consulta la documentazione sugli ordini Wallet di Apple.
await initPaymentSheet({ // ... applePay: { // ... setOrderTracking: async complete => { const apiEndpoint = Platform.OS === 'ios' ? 'http://localhost:4242' : 'http://10.0.2.2:4567'; const response = await fetch( `${apiEndpoint}/retrieve-order?orderId=${orderId}`, { method: 'GET', headers: { 'Content-Type': 'application/json', }, }, ); if (response.status === 200) { const orderDetails = await response.json(); // orderDetails should include orderIdentifier, orderTypeIdentifier, // authenticationToken and webServiceUrl complete(orderDetails); } }, }, });
FacoltativoAbilitare Google Pay
Configurare l’integrazione
Per usare Google Pay, prima di tutto abilita l’API di Google Pay aggiungendo quanto segue al tag <application> del tuo AndroidManifest.xml:
<application> ... <meta-data android:name="com.google.android.gms.wallet.api.enabled" android:value="true" /> </application>
Per ulteriori informazioni, consulta la pagina Set up Google Pay API (Configurazione dell’API di Google Pay) di Google Pay per Android.
Aggiungere Google Pay
Quando inizializzi PaymentSheet, imposta merchantCountryCode sul codice Paese della tua attività e infine googlePay su [true].
Puoi utilizzare l’ambiente di test anche specificando il parametro testEnv. Puoi testare Google Pay solo su dispositivi fisici Android. Segui le istruzioni indicate nella documentazione di React Native per testare la tua applicazione su un dispositivo fisico.
const { error, paymentOption } = await initPaymentSheet({ // ... googlePay: { merchantCountryCode: 'US', testEnv: true, // use test environment }, });
FacoltativoAbilitare la scansione delle carte (solo iOS)Lato client
Per abilitare il supporto per la scansione delle carte, imposta la NSCameraUsageDescription (Privacy - Descrizione dell’utilizzo della fotocamera) in Info.plist della tua applicazione, quindi indica un motivo per accedere alla fotocamera (ad esempio, “Per acquisire le carte”). I dispositivi con iOS 13 o versioni successive supportano la scansione delle carte.
FacoltativoPersonalizzare la schedaLato client
Tutte le personalizzazioni vengono configurate usando initPaymentSheet.
Aspetto
Personalizza i colori, i caratteri e molto altro ancora in base all’aspetto della tua app utilizzando l’API Appearance.
Nome visualizzato dell’esercente
Specifica un nome dell’azienda per il cliente impostando merchantDisplayName. Per impostazione predefinita, viene usato il nome della tua app.
await initPaymentSheet({ // ... merchantDisplayName: 'Example Inc.', });
Modalità scura
Per impostazione predefinita, il PaymentSheet si adatta automaticamente alle impostazioni di visualizzazione del sistema dell’utente (modalità chiara o scura). Puoi modificare questa impostazione configurando la proprietà style sulla modalità alwaysLight o alwaysDark su iOS:
await initPaymentSheet({ // ... style: 'alwaysDark', });
Su Android, imposta la modalità chiara o scura nella tua app:
// force dark AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // force light AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
Dettagli di addebito predefiniti
Per impostare i valori predefiniti per i dati di fatturazione raccolti nel PaymentSheet, configura la proprietà defaultBillingDetails. PaymentSheet precompila i campi della scheda con i valori che fornisci.
await initPaymentSheet({ // ... defaultBillingDetails: { email: 'foo@bar.com', address: { country: 'US', }, }, });
Acquisisci i dati per gli addebiti
Utilizza billingDetailsCollectionConfiguration per specificare la modalità di raccolta dei dati di fatturazione nel PaymentSheet.
Puoi acquisire il nome, l’indirizzo email, il numero di telefono e l’indirizzo del cliente.
Se non intendi acquisire i valori richiesti dalla modalità di pagamento, dovrai procedere nel seguente modo:
- Associa i valori non acquisiti da
PaymentSheetalla proprietàdefaultBillingDetails. - Imposta
billingDetailsCollectionConfiguration.suattachDefaultsToPaymentMethod true.
await initPaymentSheet({ // ... defaultBillingDetails: { email: 'foo@bar.com', } billingDetailsCollectionConfiguration: { name: PaymentSheet.CollectionMode.ALWAYS, email: PaymentSheet.CollectionMode.NEVER, address: PaymentSheet.AddressCollectionMode.FULL, attachDefaultsToPaymentMethod: true }, });
Nota
Rivolgiti al tuo consulente legale per sapere quali sono le leggi applicabili alla raccolta di informazioni. Richiedi i numeri di telefono solo se necessari per la transazione.
FacoltativoGestire la disconnessione dell'utente
PaymentSheet memorizza localmente alcune informazioni per ricordare se un utente ha utilizzato Link in un’app. Per cancellare lo stato interno di PaymentSheet, chiama il metodo resetPaymentSheetCustomer() quando l’utente si disconnette.
export default function CheckoutScreen() { // continued from above const { initPaymentSheet, presentPaymentSheet, resetPaymentSheetCustomer } = useStripe(); const logout = async () => { await resetPaymentSheetCustomer(); }; return ( <Screen> <Button title="Checkout" onPress={openPaymentSheet} /> <Button title="Checkout" onPress={logout} /> </Screen> ); }
FacoltativoCompletare il pagamento nell'interfaccia utente
Puoi visualizzare il Payment Sheet solo per raccogliere i dati relativi alla modalità di pagamento e chiamare una modalità confirm in un secondo momento per completare il pagamento nell’interfaccia utente dell’app. Questa opzione è utile se disponi di un pulsante personalizzato per l’acquisto o se occorrono passaggi aggiuntivi dopo l’acquisizione dei dati di pagamento.

Nota
Un’integrazione esemplificativa è disponibile sul nostro GitHub.
- Innanzitutto, chiama
initPaymentSheete specificacustomFlow: true.initPaymentSheetsi risolve con un’opzione di pagamento iniziale che contiene un’immagine e un’etichetta per rappresentare la modalità di pagamento del cliente. Aggiorna la tua interfaccia utente con questi dati.
const { initPaymentSheet, presentPaymentSheet, confirmPaymentSheetPayment, } = useStripe() const { error, paymentOption } = await initPaymentSheet({ customerId: customer, customerEphemeralKeySecret: ephemeralKey, paymentIntentClientSecret: paymentIntent, customFlow: true, merchantDisplayName: 'Example Inc.', }); // Update your UI with paymentOption
- Usa
presentPaymentSheetper raccogliere i dati di pagamento. Quando il cliente termina l’operazione, la scheda si chiude da sola e la promessa si risolve. Aggiorna la tua interfaccia utente con i dati relativi alla modalità di pagamento selezionata.
const { error, paymentOption } = await presentPaymentSheet();
- Usa
confirmPaymentSheetPaymentper confermare il pagamento. Si risolve con il risultato del pagamento.
const { error } = await confirmPaymentSheetPayment(); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else { Alert.alert( 'Success', 'Your order is confirmed!' ); }
Impostare allowsDelayedPaymentMethods su true consente di utilizzare i metodi di pagamento con notifica differita come i conti bancari degli Stati Uniti. Per questi metodi di pagamento, lo stato finale del pagamento non è noto al completamento di PaymentSheet, in quanto va a buon fine o meno in un secondo momento. Se supporti questi tipi di metodi di pagamento, informa il cliente che il suo ordine è confermato e procedi all’evasione (ad esempio alla spedizione del prodotto), spedisci il suo prodotto) solo quando avrai ricevuto il pagamento.