Passa al contenuto
Crea account
o
Accedi
Il logo della documentazione Stripe
/
Chiedi all'IA
Crea un account
Accedi
Inizia
Pagamenti
Ricavi
Per piattaforme e marketplace
Gestione del denaro
Risorse per sviluppatori
Panoramica
Informazioni sui pagamenti con Stripe
Eseguire l'upgrade dell'integrazione
Analisi dei dati sui pagamenti
Pagamenti online
PanoramicaTrovare il caso d'uso più adattoManaged Payments
Utilizzare Payment Links
Creare una pagina di pagamento
Creare un'integrazione iniziale
Creare un'integrazione in-app
    Panoramica
    Payment Sheet
      Accettare pagamenti in-app
      Aggiungere metodi di pagamento personalizzati
      Personalizzare l'aspetto
      Finalizzare i pagamenti sul server
      Salvare i dati di pagamento durante il pagamento
      Configura pagamenti futuri
      Filtrare i circuiti delle carte
    Payment Element incorporato
    Link per acquisti in-app
    Raccogli gli indirizzi
    Carte statunitensi e canadesi
Metodi di pagamento
Aggiungere modalità di pagamento
Gestire i metodi di pagamento
Pagare più velocemente con Link
Interfacce di pagamento
Payment Links
Checkout
Elements per il Web
Elements in-app
Scenari di pagamento
Gestire più valute
Flussi di pagamento personalizzati
Acquisizione flessibile
Orchestrazione
Pagamenti di persona
Terminal
Oltre i pagamenti
Costituire un'azienda
Criptovaluta
Financial Connections
Climate
Pagina inizialePagamentiBuild an in-app integrationPayment Sheet

Salvare i dati di pagamento durante un pagamento in-app

Salvare i dati di pagamento durante un pagamento nell'app mobile

Usa l’API Payment Intents per salvare i dati di pagamento da un acquisto. Esistono più casi d’uso:

  • Addebita un pagamento a un cliente per un ordine di e-commerce e memorizza i dati per gli acquisti futuri.
  • Avvia il primo di una serie di pagamenti ricorrenti.
  • Addebita un deposito e memorizza i dati per addebitare l’intero importo in seguito.

Transazioni con carta presente

Le transazioni con carta presente, come i pagamenti tramite Stripe Terminal, utilizzano una procedura diversa per salvare il metodo di pagamento. Per i dettagli, consulta la documentazione di Terminal.

Conformità

Quando salvi i dati di pagamento di un cliente, sei responsabile della conformità a tutte le leggi, le normative e le regole del circuito applicabili. Questi requisiti si applicano generalmente se desideri salvare il metodo di pagamento del cliente per un uso futuro, ad esempio visualizzando il metodo di pagamento del cliente nel flusso di pagamento per un acquisto futuro o addebitando il pagamento quando il cliente non sta utilizzando attivamente il sito web o l’app. Aggiungi al tuo sito web o alla tua app delle condizioni che indichino come intendi salvare i dettagli del metodo di pagamento e permetti ai clienti di scegliere.

Quando salvi un metodo di pagamento, puoi utilizzarlo solo per lo scopo specifico che hai incluso nelle tue condizioni. Per addebitare un metodo di pagamento quando un cliente è offline e salvarlo come opzione per acquisti futuri, accertati di raccogliere esplicitamente il consenso del cliente per questo uso specifico. Ad esempio, includi una casella di controllo “Salva il mio metodo di pagamento per uso futuro” per raccogliere il consenso.

Per eseguire un addebito quando il cliente è offline, assicurati che i tuoi termini includano quanto segue:

  • Il consenso del cliente a disporre un pagamento o una serie di pagamenti per suo conto per determinate transazioni.
  • La tempistica e la frequenza dei pagamenti previste (ad esempio, se gli addebiti sono per rate programmate, pagamenti di abbonamenti o ricariche non programmate).
  • Il modo in cui determini l’importo del pagamento.
  • I tuoi termini di cancellazione, se la modalità di pagamento è per un servizio in abbonamento.

Assicurati di conservare una copia scritta del consenso fornito dal cliente relativamente a questi termini.

Configurare Stripe
Lato server
Lato client

Innanzitutto, hai bisogno di un Stripe account. 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:

Command Line
Ruby
# Available as a gem sudo gem install stripe
Gemfile
Ruby
# If you use bundler, you can add this line to your Gemfile gem 'stripe'

Lato client

L’SDK per iOS di Stripe è open source, completamente documentato e compatibile con le app che supportano iOS 13 o versioni successive.

Per installare l’SDK, segui questi passaggi:

  1. In Xcode, seleziona File > Aggiungi dipendenze pacchetto… e inserisci https://github.com/stripe/stripe-ios-spm come URL repository.
  2. Seleziona il numero dell’ultima versione dalla nostra pagina delle release.
  3. Aggiungi il prodotto StripePaymentSheet al target della tua app.

Nota

Per ulteriori informazioni sulla versione più recente e su quelle precedenti dell’SDK, consulta la pagina Versioni su GitHub. Per ricevere notifiche quando viene pubblicata una nuova versione, guarda le versioni del repository.

Abilitare metodi di pagamento

I pagamenti con carta sono abilitati per impostazione predefinita. Visualizza le impostazioni dei metodi di pagamento e abilita i metodi di pagamento che vuoi accettare.

Aggiungi un endpoint
Lato 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:

  1. 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.

  2. 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.

  3. Chiave temporanea per l’oggetto Customer (facoltativa): l’oggetto Customer contiene informazioni sensibili che non possono essere recuperate direttamente da un’app. Una chiave temporanea consente all’SDK di accedere temporaneamente all’oggetto Customer.

Per motivi di sicurezza, la tua app non può creare questi oggetti. Aggiungi invece un endpoint sul tuo server per:

  1. Recuperare l’oggetto Customer o ne crea uno nuovo.
  2. Creare una chiave temporanea per l’oggetto Customer.
  3. Crea un PaymentIntent con i parametri importo, valuta e cliente, setup_future_usage . Inoltre, se lo ritieni opportuno, puoi includere il parametro automatic_payment_methods. Stripe abilita la funzionalità per impostazione predefinita nell’ultima versione dell’API.
  4. Restituisce la chiave privata client del Payment Intent, la stringa secret della chiave temporanea, l’id del cliente e la tua chiave pubblicabile alla tua app.

Nota

Payment Element per dispositivi mobili supporta solo setup_future_usage con conti bancari degli Stati Uniti e carte di credito.

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à.

Nota

Prova un’implementazione funzionante di questo endpoint su Glitch.

Puoi gestire i metodi di pagamento dalla Dashboard. Stripe determina la restituzione dei metodi di pagamento idonee in base a fattori quali l’importo della transazione, la valuta e il flusso di pagamento. Il PaymentIntent viene creato utilizzando i metodi di pagamento configurati nella Dashboard. Se non desideri utilizzare la Dashboard o se preferisci specificare manualmente i metodi di pagamento, puoi elencarli utilizzando l’attributo payment_method_types.

Command Line
curl
# Create a Customer (use an existing Customer ID if this is a returning customer) curl https://api.stripe.com/v1/customers \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -X "POST" # Create an Ephemeral Key for the Customer curl https://api.stripe.com/v1/ephemeral_keys \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -H "Stripe-Version: 2025-05-28.basil" \ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ # Create a PaymentIntent curl https://api.stripe.com/v1/payment_intents \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -X "POST" \ -d "customer"="{{CUSTOMER_ID}}" \ -d "amount"=1099 \ -d "currency"="eur" \ -d "setup_future_usage"="off_session" \ # In the latest version of the API, specifying the `automatic_payment_methods` parameter # is optional because Stripe enables its functionality by default. -d "automatic_payment_methods[enabled]"=true \

Raccogliere i dati di pagamento
Lato client

Per visualizzare Payment Element per dispositivi mobili nella schermata di pagamento, assicurati di:

  • Mostrare i prodotti che il cliente sta acquistando insieme all’importo totale
  • Utilizza Address Element per raccogliere dal cliente tutti i dati di spedizione richiesti
  • Aggiungere un pulsante di pagamento per visualizzare l’interfaccia utente di Stripe

Nella schermata di pagamento della tua app, recupera la chiave privata client del PaymentIntent, la chiave privata temporanea, l’ID cliente e la chiave pubblicabile dall’endpoint creato nel passaggio precedente. Imposta la tua chiave pubblicabile utilizzando StripeAPI.shared e inizializza PaymentSheet.

import UIKit import StripePaymentSheet class CheckoutViewController: UIViewController { @IBOutlet weak var checkoutButton: UIButton! var paymentSheet: PaymentSheet? let backendCheckoutUrl = URL(string: "Your backend endpoint/payment-sheet")! // Your backend endpoint override func viewDidLoad() { super.viewDidLoad() checkoutButton.addTarget(self, action: #selector(didTapCheckoutButton), for: .touchUpInside) checkoutButton.isEnabled = false // MARK: Fetch the PaymentIntent client secret, Ephemeral Key secret, Customer ID, and publishable key var request = URLRequest(url: backendCheckoutUrl) request.httpMethod = "POST" let task = URLSession.shared.dataTask(with: request, completionHandler: { [weak self] (data, response, error) in guard let data = data, let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String : Any], let customerId = json["customer"] as? String, let customerEphemeralKeySecret = json["ephemeralKey"] as? String, let paymentIntentClientSecret = json["paymentIntent"] as? String, let publishableKey = json["publishableKey"] as? String, let self = self else { // Handle error return } STPAPIClient.shared.publishableKey = publishableKey // MARK: Create a PaymentSheet instance var configuration = PaymentSheet.Configuration() configuration.merchantDisplayName = "Example, Inc." configuration.customer = .init(id: customerId, ephemeralKeySecret: customerEphemeralKeySecret) // Set `allowsDelayedPaymentMethods` to true if your business handles // delayed notification payment methods like US bank accounts. configuration.allowsDelayedPaymentMethods = true self.paymentSheet = PaymentSheet(paymentIntentClientSecret: paymentIntentClientSecret, configuration: configuration) DispatchQueue.main.async { self.checkoutButton.isEnabled = true } }) task.resume() } }

Quando il cliente tocca il pulsante Checkout, chiama present per aprire il PaymentSheet. Dopo che il cliente ha completato il pagamento, Stripe chiude il PaymentSheet e chiama il blocco di completamento con PaymentSheetResult.

@objc func didTapCheckoutButton() { // MARK: Start the checkout process paymentSheet?.present(from: self) { paymentResult in // MARK: Handle the payment result switch paymentResult { case .completed: print("Your order is confirmed") case .canceled: print("Canceled!") case .failed(let error): print("Payment failed: \(error)") } } }

Se PaymentSheetResult risulta .completed, informa l’utente (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
Lato client

Il cliente potrebbe uscire dalla tua app per autenticarsi (ad es. in Safari o nell’app della banca). Per consentirgli di tornare automaticamente alla tua app dopo l’autenticazione, devi configurare uno schema URL personalizzato e impostare la classe AppDelegate per l’inoltro di URL all’SDK Stripe. Stripe non supporta i link universali.

SceneDelegate.swift
Swift
// This method handles opening custom URL schemes (for example, "your-app://stripe-redirect") func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { guard let url = URLContexts.first?.url else { return } let stripeHandled = StripeAPI.handleURLCallback(with: url) if (!stripeHandled) { // This was not a Stripe url – handle the URL normally as you would } }

Devi inoltre impostare il returnURL nel tuo oggetto PaymentSheet.Configuration sull’URL della tua app.

var configuration = PaymentSheet.Configuration() configuration.returnURL = "your-app://stripe-redirect"

Gestire gli eventi successivi al pagamento
Lato server

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_intent.succeeded, è consigliabile gestire altri eventi durante la riscossione di pagamenti tramite Payment Element:

EventoDescrizioneAzione
payment_intent.succeededInviato quando un cliente ha disposto un pagamento con esito positivo.Invia al cliente la conferma di un ordine ed evade l’ordine.
payment_intent.processingInviato 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_intent.succeeded o da un evento payment_intent.payment_failed.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_failedInviato quando il cliente ha tentato un pagamento che non è andato a buon fine.Se un pagamento passa da processing a payment_failed, offri al cliente un altro tentativo di pagamento.

Addebitare in un secondo momento un importo sul PaymentMethod salvato
Lato server

Conformità

Quando salvi i dati di pagamento di un cliente, sei responsabile della conformità a tutte le leggi, le normative e le regole del circuito applicabili. Quando presenti al cliente finale i metodi di pagamento utilizzati in passato per acquisti futuri, accertati di elencare i metodi di pagamento per i quali hai raccolto il consenso a salvare i dati del metodo di pagamento per gli usi futuri specifici. Per differenziare i metodi di pagamento legati ai clienti che possono o non possono essere presentati al cliente finale come metodo di pagamento salvato per acquisti futuri, utilizza il parametro allow_redisplay.

Quando hai la certezza di voler addebitare l’importo al cliente al di fuori della sessione, utilizza gli ID Customer e PaymentMethod per creare un PaymentIntent. Per trovare un metodo di pagamento per l’addebito, elenca i metodi di pagamento associati al tuo cliente. In questo esempio sono elencate le carte, ma puoi aggiungere qualsiasi altro tipo supportato.

Command Line
cURL
curl -G https://api.stripe.com/v1/payment_methods \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d customer=
{{CUSTOMER_ID}}
\ -d type=card

Quando hai gli ID Customer e PaymentMethod, crea un PaymentIntent con l’importo e la valuta del pagamento. Per effettuare il pagamento al di fuori della sessione, imposta alcuni altri parametri:

  • Imposta off_session su true per indicare che il cliente non si trova nel tuo flusso di pagamento durante il tentativo di pagamento e non può soddisfare una richiesta di autenticazione fatta da un partner, come un emittente di carte, una banca o un altro istituto di pagamento. Se, durante il flusso di pagamento, un partner richiede l’autenticazione, Stripe richiede le esenzioni utilizzando le informazioni del cliente presenti in una precedente transazione all’interno della sessione. Se le condizioni per l’esenzione non sono soddisfatte, PaymentIntent potrebbe generare un errore.
  • Imposta su true il valore della proprietà confirm del PaymentIntent. Di conseguenza, viene generata una conferma immediata al momento della creazione del PaymentIntent.
  • Imposta payment_method sull’ID del PaymentMethod e customer sull’ID del cliente.
Command Line
curl
curl https://api.stripe.com/v1/payment_intents \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d amount=1099 \ -d currency=usd \ # In the latest version of the API, specifying the `automatic_payment_methods` parameter is optional because Stripe enables its functionality by default. -d "automatic_payment_methods[enabled]"=true \ -d customer="{{CUSTOMER_ID}}" \ -d payment_method="{{PAYMENT_METHOD_ID}}" \ -d return_url="https://example.com/order/123/complete" \ -d off_session=true \ -d confirm=true

Testare l'integrazione

Modalità di pagamentoScenarioCome eseguire il test
Carta di creditoLa configurazione della carta ha esito positivo e non richiede l’autenticazione.Compila il modulo per la carta di credito usando il numero di carta di credito 4242 4242 4242 4242 con qualsiasi scadenza, CVC e codice postale.
Carta di creditoLa carta richiede l’autenticazione per la configurazione iniziale, poi ha esito positivo per i pagamenti successivi.Compila il modulo per la carta di credito usando il numero di carta di credito 4000 0025 0000 3155 con qualsiasi scadenza, CVC e codice postale.
Carta di creditoLa carta richiede l’autenticazione per la configurazione iniziale e per i pagamenti successivi.Compila il modulo per la carta di credito usando il numero di carta di credito 4000 0027 6000 3184 con qualsiasi scadenza, CVC e codice postale.
Carta di creditoLa carta viene rifiutata durante la configurazione.Compila il modulo per la carta di credito usando il numero di carta di credito 4000 0000 0000 9995 con qualsiasi scadenza, CVC e codice postale.

FacoltativoAbilitare Apple Pay

FacoltativoAbilitare la scansione delle carte

FacoltativoPersonalizzare la scheda

FacoltativoCompletare il pagamento nell'interfaccia utente

Questa pagina è stata utile?
SìNo
Hai bisogno di aiuto? Contatta l'assistenza clienti.
Partecipa al nostro programma di accesso anticipato.
Dai un'occhiata al nostro registro delle modifiche.
Domande? Contattaci.
LLM? Leggi llms.txt.
Realizzato da Markdoc