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

Accetta pagamenti con carta senza webhook

Confermare un pagamento con carta sul proprio server e gestire le richieste di autenticazione carta

Attenzione

Stripe consiglia di utilizzare il nuovo componente Payment Element anziché Card Element. Ti consente di accettare più metodi di pagamento con un singolo componente Element. Scopri di più su quando usare Card Element e Payment Element.

Per un supporto più completo e garantito anche in futuro, utilizza l’integrazione standard per i pagamenti asincroni.

Questa integrazione attende che il client restituisca una risposta e finalizza un pagamento sul server senza utilizzare i webhook o elaborare eventi offline. Anche se sembra più semplice, è difficile da adattare alla crescita dell’azienda e presenta numerose limitazioni:

Vuoi effettuare una migrazione?

Se vuoi eseguire la migrazione a un’integrazione Stripe esistente dall’API Charges, segui la guida alla migrazione.

  • Supporto solo per le carte: devi scrivere un altro codice per supportare separatamente ACH e i metodi di pagamento locali più utilizzati.
  • Rischio di doppio addebito: creando un nuovo PaymentIntent in modo sincrono ogni volta che il cliente effettua un tentativo di pagamento, rischi involontariamente un doppio addebito. Assicurati di seguire le migliori pratiche.
  • Passaggio supplementare lato client: le carte con 3D Secure o soggette a normative quali l’autenticazione forte del cliente richiedono ulteriori passaggi lato client. ​

Tieni presente queste limitazioni se decidi di utilizzare questa integrazione. In caso contrario, utilizza l’integrazione standard.

Configurare Stripe

Innanzitutto, devi creare un account Stripe. Registrati ora.

Utilizza le nostre librerie per accedere all’API Stripe dalla tua applicazione:

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'

Ottenere i dati della carta
Lato client

Acquisisci i dati della carta sul client con Stripe.js e Stripe Elements. Elements è un insieme di componenti di interfaccia utente preintegrati per ottenere e convalidare il numero della carta, il codice postale e la data di scadenza .

Un componente di Stripe Elements contiene un iframe che invia in modo sicuro a Stripe le informazioni sul pagamento tramite una connessione HTTPS. Affinché l’integrazione funzioni, anche l’indirizzo della pagina di completamento del pagamento deve iniziare con https:// anziché http://.

Puoi eseguire il test dell’integrazione senza utilizzare HTTPS. Abilitalo quando è tutto pronto per accettare i pagamenti in modalità live.

Includi lo script Stripe.js nell’intestazione di ogni pagina del sito. Elements è automaticamente disponibile come funzionalità di Stripe.js.

<script src="https://js.stripe.com/basil/stripe.js"></script>

Così facendo puoi utilizzare le funzionalità antifrode avanzate di Stripe e avrai la possibilità di rilevare comportamenti di navigazione anomali.

Creare il modulo di pagamento

Per raccogliere in modo sicuro i dati delle carte dai tuoi clienti, Elements crea per te componenti di interfaccia utente in hosting su Stripe, che vengono poi inseriti nel tuo modulo di pagamento senza che tu debba crearli direttamente. Per definire il punto di inserimento di questi componenti, crea elementi DOM (contenitori) vuoti con ID univoci nel tuo modulo di pagamento.

index.html
HTML
<form id='payment-form'> <label> Card details <!-- placeholder for Elements --> <div id="card-element"></div> </label> <button type="submit">Submit Payment</button> </form>

Poi crea un’istanza dell’oggetto Stripe fornendo la tua chiave API pubblicabile come primo parametro. In seguito, crea un’istanza dell’oggetto Elements e usalo per montare un elemento Card nel segnaposto corrispondente sulla pagina.

script.js
Visualizza l'esempio completo
const stripe = Stripe(
'pk_test_TYooMQauvdEDq54NiTphI7jx'
); const elements = stripe.elements(); // Set up Stripe.js and Elements to use in checkout form const style = { base: { color: "#32325d", fontFamily: '"Helvetica Neue", Helvetica, sans-serif', fontSmoothing: "antialiased", fontSize: "16px", "::placeholder": { color: "#aab7c4" } }, invalid: { color: "#fa755a", iconColor: "#fa755a" }, }; const cardElement = elements.create('card', {style}); cardElement.mount('#card-element');

card Element semplifica il modulo e riduce al minimo il numero di campi obbligatori inserendo un unico campo di immissione flessibile che raccoglie in modo sicuro tutti i dati necessari relativi alla carta.

In alternativa, combina cardNumber Element, cardExpiry Element e cardCvc Element per creare un modulo flessibile con più campi di immissione per la carta.

Nota

Acquisisci sempre il codice postale per aumentare i tassi di accettazione delle carte e ridurre le frodi.

Card Element a inserimento unico acquisisce automaticamente il codice postale del cliente e lo invia a Stripe. Se crei un modulo di pagamento con il (numero di carta, la scadenza e il CVC) di Elements, aggiungi un campo di inserimento distinto per il codice postale del cliente.

Creare un PaymentMethod

Infine, usa stripe.createPaymentMethod sul client per raccogliere i dati della carta e creare un PaymentMethod quando l’utente fa clic sul pulsante di invio.

script.js
const form = document.getElementById('payment-form'); form.addEventListener('submit', async (event) => { // We don't want to let default form submission happen here, // which would refresh the page. event.preventDefault(); const result = await stripe.createPaymentMethod({ type: 'card', card: cardElement, billing_details: { // Include any additional collected billing details. name: 'Jenny Rosen', }, }) stripePaymentMethodHandler(result); });

Inviare il PaymentMethod al tuo server
Lato client

Se il PaymentMethod è stato creato correttamente, invia il suo ID al tuo server.

script.js
const stripePaymentMethodHandler = async (result) => { if (result.error) { // Show error in payment form } else { // Otherwise send paymentMethod.id to your server (see Step 4) const res = await fetch('/pay', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ payment_method_id: result.paymentMethod.id, }), }) const paymentResponse = await res.json(); // Handle server response (see Step 4) handleServerResponse(paymentResponse); } }

Creare un PaymentIntent
Lato server

Configura un endpoint sul tuo server per ricevere la richiesta. Questo endpoint verrà utilizzato anche successivamente per gestire le carte che richiedono un’ulteriore fase di autenticazione.

Crea un nuovo PaymentIntent con l’ID del PaymentMethod creato sul client. Per confermare il PaymentIntent, imposta la proprietà confirm su true al momento della creazione del PaymentIntent o chiama confirm dopo la creazione. Per i pagamenti con carta è ammesso anche separare l’autorizzazione dall’acquisizione.

Se il pagamento richiede operazioni supplementari, come l’autenticazione 3D Secure, lo stato del PaymentIntent sarà impostato su requires_action. Se il pagamento non è riuscito, lo stato torna a requires_payment_method e devi inviare un messaggio di errore all’utente. Se il pagamento non richiede una fase di autenticazione supplementare, viene creato un addebito e lo stato del PaymentIntent è impostato su succeeded.

Nota

Le versioni dell’API antecedenti la data 11-02-2019 mostrano requires_source anziché requires_payment_method e requires_source_action anziché requires_action.

Command Line
curl
curl https://api.stripe.com/v1/payment_intents \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d "payment_method"="{{PAYMENT_METHOD_ID}}" \ -d "amount"=1099 \ -d "currency"="usd" \ -d "confirmation_method"="manual" \ -d "confirm"="true"

Se vuoi salvare la carta per riutilizzarla in seguito, crea un oggetto Customer per memorizzare il PaymentMethod e specifica i seguenti parametri supplementari quando crei il PaymentIntent:

  • customer. Impostato sull’ID del cliente.
  • setup_future_usage. Impostato su off_session per indicare a Stripe che prevedi di riutilizzare questo PaymentMethod per pagamenti all’esterno della sessione in assenza del cliente. L’impostazione di questa proprietà consente di salvare il PaymentMethod nell’oggetto Customer una volta che il PaymentIntent è stato confermato e che tutte le azioni richieste sono state eseguite dall’utente. Per ulteriori informazioni, consulta l’esempio di codice relativo al salvataggio delle carte dopo un pagamento.

Gestire le azioni successive
Lato client

Scrivi codice per gestire situazioni che richiedono l’intervento del cliente. In genere un pagamento va a buon fine dopo essere stato confermato sul server al passaggio 4. Tuttavia, se il PaymentIntent richiede un’azione aggiuntiva da parte del cliente, come l’autenticazione 3D Secure, interviene questo codice.

Utilizza stripe.handleCardAction per attivare l’interfaccia utente che gestisce l’azione del cliente. Se l’autenticazione riesce, lo stato della PaymentIntent è requires_confirmation. Riconferma il PaymentIntent sul server per completare il pagamento.

Durante i test, utilizza un numero di carta di test che richiede l’autenticazione (ad esempio ) per forzare questo flusso. Se utilizzi una carta che non richiede l’autenticazione (ad esempio ), questa parte del flusso sarà ignorata e il flusso si concluderà al passaggio 4.

script.js
const handleServerResponse = async (response) => { if (response.error) { // Show error from server on payment form } else if (response.requires_action) { // Use Stripe.js to handle the required card action const { error: errorAction, paymentIntent } = await stripe.handleCardAction(response.payment_intent_client_secret); if (errorAction) { // Show error from Stripe.js in payment form } else { // The card action has been handled // The PaymentIntent can be confirmed again on the server const serverResponse = await fetch('/pay', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ payment_intent_id: paymentIntent.id }) }); handleServerResponse(await serverResponse.json()); } } else { // Show success message } }

Nota

L’esecuzione di stripe.handleCardAction può richiedere diversi secondi. Nel frattempo, disabilita il nuovo invio del modulo e mostra un indicatore di attesa, ad esempio una rotellina che gira. Se viene restituito un errore, mostralo al cliente, riabilita il modulo e nascondi l’indicatore di attesa. Se il cliente deve eseguire operazioni aggiuntive per completare il pagamento, ad esempio l’autenticazione, Stripe.js lo guida nella procedura.

Riconfermare il PaymentIntent
Lato server

Questo codice viene eseguito solo quando un pagamento richiede un’ulteriore autenticazione, come al passaggio precedente. Il codice non è facoltativo, perché qualsiasi pagamento potrebbe richiedere questo ulteriore passaggio.

Utilizzando lo stesso endpoint configurato in precedenza, riconferma il PaymentIntent per finalizzare il pagamento ed evadere l’ordine. Accertati che tale conferma avvenga entro un’ora dal tentativo di pagamento. In caso contrario, il pagamento non riuscirà e tornerà allo stato requires_payment_method.

Command Line
curl
curl https://api.stripe.com/v1/payment_intents/{{PAYMENT_INTENT_ID}}/confirm \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -X "POST"

Testa l'integrazione

​​Sono disponibili diverse carte di test che puoi utilizzare in una sandbox per verificare che l’integrazione sia pronta per l’uso. Usale con un CVC qualsiasi e una data di scadenza futura.

NumeroDescrizione
La transazione ha esito positivo e il pagamento viene elaborato immediatamente.
Viene richiesta l’autenticazione. Stripe apre una finestra modale che richiede al cliente di autenticarsi.
La transazione ha sempre esito negativo con un codice di rifiuto insufficient_funds.

Per un elenco completo delle carte di test, consulta la nostra guida al testing.

FacoltativoRecuperare di nuovo il CVC

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