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
Strumenti di sviluppo
PanoramicaExplore all products
Start building
Avviare lo sviluppo
    Configurare il tuo ambiente di sviluppo
    Inviare la prima richiesta API
    Accettare un pagamento
    Creare e testare nuove funzionalità
    Lista di controllo per il passaggio alla modalità live
Progetti di esempio
Informazioni sulle API
Sviluppare con gli LLM
Utilizza Stripe senza dover scrivere codice
Configura Stripe
Crea un account
Dashboard per il web
Dashboard per dispositivi mobili
Passare a Stripe
Gestire il rischio di frode
Informazioni sulle frodi
Protezione contro le frodi di Radar
Gestisci le contestazioni
Verificare l'identità
Pagina inizialeIniziaStart developing

Accettare un pagamento

Accettare pagamenti online in modo sicuro

Copia pagina

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

Integra l’interfaccia utente per i pagamenti preintegrata di Stripe nella procedura di pagamento della tua app Android con la classe PaymentSheet.

Configurare Stripe
Lato server
Lato 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:

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 Android di Stripe è open source e completamente documentato.

Per installare l’SDK, aggiungi stripe-android al blocco dependencies del tuo file app/build.gradle:

build.gradle.kts
Kotlin
plugins { id("com.android.application") } android { ... } dependencies { // ... // Stripe Android SDK implementation("com.stripe:stripe-android:21.17.0") // Include the financial connections SDK to support US bank account as a payment method implementation("com.stripe:financial-connections:21.17.0") }

Nota

Per ulteriori informazioni sulla versione più recente e su quelle precedenti dell’SDK, consulta la pagina Releases su GitHub. Per ricevere una notifica quando viene pubblicata una nuova versione, imposta il controllo delle versioni per il repository.

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

  3. (Facoltativo) 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.

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 Customer Ephemeral Key nella tua integrazione.

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

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" \ # 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 \

Acquisire i dati di pagamento
Lato client

Prima di visualizzare Payment Element per dispositivi mobili, la tua pagina di pagamento dovrebbe:

  • Mostrare i prodotti acquistati e l’importo totale
  • Raccogliere tutti i dati di spedizione richiesti utilizzando Address Element
  • Includere un pulsante di pagamento per visualizzare l’interfaccia utente di Stripe

Initialize a PaymentSheet instance inside onCreate of your checkout Activity, passing a method to handle the result.

import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import com.stripe.android.paymentsheet.PaymentSheet import com.stripe.android.paymentsheet.PaymentSheetResult @Composable fun App() { val paymentSheet = remember { PaymentSheet.Builder(::onPaymentSheetResult) }.build() } private fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) { // implemented in the next steps }

Quindi, 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 chiave pubblicabile utilizzando PaymentConfiguration e memorizza le altre per usarle quando visualizzi l’istanza di PaymentSheet.

import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext // Add the following lines to build.gradle to use this example's networking library: // implementation 'com.github.kittinunf.fuel:fuel:2.3.1' // implementation 'com.github.kittinunf.fuel:fuel-json:2.3.1' import com.github.kittinunf.fuel.httpPost import com.github.kittinunf.fuel.json.responseJson import com.stripe.android.PaymentConfiguration import com.stripe.android.paymentsheet.PaymentSheet import com.stripe.android.paymentsheet.PaymentSheetResult import com.github.kittinunf.result.Result @Composable fun App() { val paymentSheet = remember { PaymentSheet.Builder(::onPaymentSheetResult) }.build() val context = LocalContext.current var customerConfig by remember { mutableStateOf<PaymentSheet.CustomerConfiguration?>(null) } var paymentIntentClientSecret by remember { mutableStateOf<String?>(null) } LaunchedEffect(context) { "Your backend endpoint/payment-sheet".httpPost().responseJson { _, _, result -> if (result is Result.Success) { val responseJson = result.get().obj() paymentIntentClientSecret = responseJson.getString("paymentIntent") customerConfig = PaymentSheet.CustomerConfiguration( id = responseJson.getString("customer"), ephemeralKeySecret = responseJson.getString("ephemeralKey") ) val publishableKey = responseJson.getString("publishableKey") PaymentConfiguration.init(context, publishableKey) } } } } private fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) { // implemented in the next steps }

Quando il cliente tocca il pulsante di pagamento, chiama presentWithPaymentIntent per aprire la scheda di pagamento. Non appena il cliente completa il pagamento, la scheda si chiude e PaymentSheetResultCallback viene chiamata con un PaymentSheetResult.

import androidx.compose.material.Button import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext // Add the following lines to build.gradle to use this example's networking library: // implementation 'com.github.kittinunf.fuel:fuel:2.3.1' // implementation 'com.github.kittinunf.fuel:fuel-json:2.3.1' import com.github.kittinunf.fuel.httpPost import com.github.kittinunf.fuel.json.responseJson import com.stripe.android.PaymentConfiguration import com.stripe.android.paymentsheet.PaymentSheet import com.stripe.android.paymentsheet.PaymentSheetResult import com.github.kittinunf.result.Result @OptIn(ExperimentalCustomerSessionApi::class) @Composable fun App() { val paymentSheet = remember { PaymentSheet.Builder(::onPaymentSheetResult) }.build() val context = LocalContext.current var customerConfig by remember { mutableStateOf<PaymentSheet.CustomerConfiguration?>(null) } var paymentIntentClientSecret by remember { mutableStateOf<String?>(null) } LaunchedEffect(context) { "Your backend endpoint/payment-sheet".httpPost().responseJson { _, _, result -> if (result is Result.Success) { val responseJson = result.get().obj() paymentIntentClientSecret = responseJson.getString("paymentIntent") customerConfig = PaymentSheet.CustomerConfiguration( id = responseJson.getString("customer"), ephemeralKeySecret = responseJson.getString("ephemeralKey") ) val publishableKey = responseJson.getString("publishableKey") PaymentConfiguration.init(context, publishableKey) } } } Button( onClick = { val currentConfig = customerConfig val currentClientSecret = paymentIntentClientSecret if (currentConfig != null && currentClientSecret != null) { presentPaymentSheet(paymentSheet, currentConfig, currentClientSecret) } } ) { Text("Checkout") } } private fun presentPaymentSheet( paymentSheet: PaymentSheet, customerConfig: PaymentSheet.CustomerConfiguration, paymentIntentClientSecret: String ) { paymentSheet.presentWithPaymentIntent( paymentIntentClientSecret, PaymentSheet.Configuration.Builder(merchantDisplayName = "My merchant name") .customer(customerConfig) // Set `allowsDelayedPaymentMethods` to true if your business handles // delayed notification payment methods like US bank accounts. .allowsDelayedPaymentMethods(true) .build() ) } private fun onPaymentSheetResult(paymentSheetResult: PaymentSheetResult) { when(paymentSheetResult) { is PaymentSheetResult.Canceled -> { print("Canceled") } is PaymentSheetResult.Failed -> { print("Error: ${paymentSheetResult.error}") } is PaymentSheetResult.Completed -> { // Display for example, an order confirmation screen print("Completed") } } }

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.

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.

Testare l'integrazione

Numero di cartaScenarioCome eseguire il test
Il pagamento con carta ha esito positivo e non richiede l’autenticazione.Compila il modulo della carta di credito utilizzando il numero di carta di credito con scadenza, CVC e codice postale.
Il pagamento con carta richiede l’autenticazione.Compila il modulo della carta di credito utilizzando il numero di carta di credito con scadenza, CVC e codice postale.
La carta viene rifiutata con un codice di rifiuto del tipo insufficient_funds.Compila il modulo della carta di credito utilizzando il numero di carta di credito con scadenza, CVC e codice postale.
La carta UnionPay ha una lunghezza variabile di 13-19 cifre.Compila il modulo della carta di credito utilizzando il numero di carta di credito con scadenza, CVC e codice postale.

Per ulteriori informazioni su come testare la tua integrazione, consulta la sezione Test.

FacoltativoAbilita Link

FacoltativoAbilitare Google Pay

FacoltativoAbilitare la scansione delle carte

FacoltativoAbilita i pagamenti ACH

FacoltativoPersonalizzare la scheda

FacoltativoGestire la disconnessione dell'utente

FacoltativoCompletare il pagamento nell'interfaccia utente

FacoltativoAbilita la nuova raccolta del CVC al momento della conferma

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
Code quickstart
Guide correlate
API Elements Appearance
Altri scenari di pagamento
Come funzionano le carte
Prodotti utilizzati
Payments
Elements
Checkout