# Pagamenti con carta nell'API Charges Addebitare, salvare e autenticare le carte con le API Stripe precedenti > #### API precedente > > Il contenuto di questa sezione fa riferimento a una funzione *precedente* (Technology that's no longer recommended). Utilizza invece l’[API Payment Intents](https://docs.stripe.com/payments/accept-a-payment.md). > > L’API Charges non supporta le seguenti funzionalità, molte delle quali sono necessarie per la conformità delle carte di credito: > > - Attività in India - [Richiesta di autenticazione della carta da parte della banca](https://docs.stripe.com/payments/cards/overview.md) - [Autenticazione forte del cliente (SCA)](https://docs.stripe.com/strong-customer-authentication.md) Le API [Charges](https://docs.stripe.com/api/charges.md) e [Tokens](https://docs.stripe.com/api/tokens.md) sono API precedenti, utilizzate nelle vecchie integrazioni Stripe per accettare i pagamenti con carte di credito e di debito. Per le nuove integrazioni, utilizza [PaymentIntents](https://docs.stripe.com/payments/accept-a-payment.md). L’API Charges limita la possibilità da parte tua di usufruire delle funzionalità di Stripe. Per sfruttare le funzionalità più recenti utilizza [Stripe Checkout](https://docs.stripe.com/payments/checkout.md) o [esegui la migrazione all’API Payment Intents](https://docs.stripe.com/payments/payment-intents/migration.md). ## Flusso di pagamento Nella maggior parte dei casi, l’API PaymentIntents offre maggiore flessibilità e più opzioni per l’integrazione. | API Charges | API Payment Intents | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1. Acquisisci i dati di pagamento del cliente nel browser con Elements. 1. Tokenizza i dati di pagamento con Stripe.js. 1. Esegui una richiesta per inviare il token al tuo server. 1. Usa il token per creare un addebito sul tuo server con l’importo e la valuta desiderati. 1. Evadi l’ordine del cliente se il pagamento è riuscito. | 1. Crea un PaymentIntent sul tuo server con l’importo e la valuta desiderati. 1. Invia la chiave privata client di PaymentIntent al lato client. 1. Acquisisci i dati di pagamento del cliente nel browser con Elements. 1. Utilizza Stripe.js o gli SDK per dispositivi mobili per gestire l’autenticazione [3D Secure](https://docs.stripe.com/payments/3d-secure/authentication-flow.md#three-ds-radar) e completa il pagamento sul lato client. 1. Utilizza i webhook per evadere l’ordine del cliente se il pagamento è riuscito. | ## Rimborsi Per rimborsare un pagamento tramite l’API, crea un [rimborso](https://docs.stripe.com/api.md#create_refund) e indica l’ID del pagamento da rimborsare. ```curl curl https://api.stripe.com/v1/refunds \ -u "<>:" \ -d charge={{CHARGE_ID}} ``` Per effettuare un rimborso parziale di un pagamento, specifica un parametro `amount`, che deve essere un numero intero espresso in centesimi (o nell’unità più piccola della valuta di addebito). ```curl curl https://api.stripe.com/v1/refunds \ -u "<>:" \ -d charge={{CHARGE_ID}} \ -d amount=1000 ``` ## Apple Pay Quando il cliente approva il pagamento, la tua app implementa i metodi [PKPaymentAuthorizationViewControllerDelegate](https://developer.apple.com/documentation/passkit/pkpaymentauthorizationviewcontrollerdelegate) per ricevere un’istanza di [PKPayment](https://developer.apple.com/documentation/passkit/pkpayment) contenente i dati crittografati della sua carta. 1. Usa il metodo SDK [createTokenWithPayment](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPAPIClient.html#/c:@CM@StripePayments@StripeCore@objc\(cs\)STPAPIClient\(im\)createTokenWithPayment:completion:) per trasformare il `PKPayment` in un `Token` Stripe. 1. Usa questo `Token` per creare un addebito. #### Swift ```swift extension CheckoutViewController: PKPaymentAuthorizationViewControllerDelegate { func paymentAuthorizationViewController(_ controller: PKPaymentAuthorizationViewController, didAuthorizePayment payment: PKPayment, handler: @escaping (PKPaymentAuthorizationResult) -> Void) { // Convert the PKPayment into a Token STPAPIClient.shared.createToken(withPayment: payment) { token, error in guard let token = token else { // Handle the error return } let tokenID = token.tokenId // Send the token identifier to your server to create a Charge... // If the server responds successfully, set self.paymentSucceeded to YES } } func paymentAuthorizationViewControllerDidFinish(_ controller: PKPaymentAuthorizationViewController) { // Dismiss payment authorization view controller dismiss(animated: true, completion: { if (self.paymentSucceeded) { // Show a receipt page... } else { // Present error to customer... } }) } } ``` ## Voce di estratto conto dinamica Per impostazione predefinita, la [voce per gli estratti conto](https://docs.stripe.com/get-started/account/activate.md#public-business-information) del tuo account Stripe appare sugli estratti conto del cliente ogni volta che addebiti un importo sulla sua carta. Inoltre, puoi impostare la voce per gli estratti conto in modo dinamico per ogni richiesta di addebito con l’argomento `statement_descriptor` nell’oggetto Charge. #### curl ```bash curl https://api.stripe.com/v1/charges \ -u <>: \ -d "amount"=999 \ -d "currency"="usd" \ -d "description"="Example charge" \ -d "source"="tok_visa" \ -d "statement_descriptor"="Custom descriptor" ``` Le voci di estratto conto non possono contenere più di 22 caratteri, utilizzare i caratteri speciali `<`, `>`, `'`, `"` o `*`ed essere costituite solo da numeri. Quando imposti la voce di estratto conto in modo dinamico su pagamenti tramite carta di credito o di debito, la parte dinamica viene aggiunta alla fine della voce di estratto conto dell’esercente nominale del pagamento (separata da un asterisco `*` e da uno spazio). Ad esempio, una voce di estratto conto di un’azienda denominata FreeCookies che include il tipo di biscotto acquistato potrebbe essere `FREECOOKIES* SUGAR`. L’asterisco (`*`) e lo spazio sono inclusi nel limite di 22 caratteri. Inoltre, Stripe destina automaticamente 10 caratteri alla voce di estratto conto dinamica. Ciò significa che, se la voce dell’esercente nominale del pagamento e la voce di estratto conto dinamica superano i 10 caratteri, la voce dell’esercente del saldo potrebbe essere troncata. Se anche la voce di estratto conto dinamica supera questo limite, entrambe le voci vengono troncate a 10 caratteri. Se hai problemi con i limiti di caratteri, puoi impostare una [voce di estratto conto abbreviata](https://dashboard.stripe.com/settings/public) nella Dashboard Stripe per abbreviare la voce dell’esercente nominale del pagamento. Avrai così più spazio per la voce di estratto conto dinamica. La voce abbreviata: - Sostituisce la voce di estratto conto dell’esercente nominale del pagamento quando si utilizzano voci dinamiche. - Può contenere da 2 a 10 caratteri. > Se la voce di estratto conto del tuo account è più lunga di 10 caratteri, imposta una [voce abbreviata](https://dashboard.stripe.com/settings/public) nella Dashboard o utilizza un `statement_descriptor_prefix`. Questo impedisce che la voce di estratto conto venga troncata in modo imprevedibile. Se non sai che aspetto hanno le voci di estratto conto quando sono combinate, puoi controllarle nella [Dashboard Stripe](https://dashboard.stripe.com/settings/public). ## Archiviare informazioni nei metadati Se utilizzi l’[API Payment Intents](https://docs.stripe.com/payments/accept-a-payment.md), recupera e aggiorna solo i campi `metadata` e `description` nell’oggetto Payment Intent. Se utilizzi entrambi gli oggetti Payment Intent e Charge, i valori di questi campi possono non essere coerenti. Stripe supporta l’aggiunta dei [metadati](https://docs.stripe.com/api.md#metadata) alle richieste più comuni effettuate, ad esempio l’elaborazione degli addebiti. I metadati non vengono mostrati ai clienti né considerati per determinare se un addebito deve essere o meno rifiutato o bloccato dal nostro sistema di prevenzione delle frodi. Attraverso i metadati, puoi associare altre informazioni per te significative all’attività Stripe. Tutti i metadati che includi sono visibili nella Dashboard (ad esempio, nella pagina di un singolo addebito) e sono inoltre disponibili nei report e nelle esportazioni comuni. Ad esempio, l’ID ordine del tuo negozio può essere associato all’addebito utilizzato per pagare tale ordine. Questo consente a te, al tuo commercialista e al tuo team finanziario di riconciliare facilmente i pagamenti in Stripe con gli ordini nel tuo sistema. Se utilizzi *Radar* (Stripe Radar helps detect and block fraud for any type of business using machine learning that trains on data across millions of global companies. It’s built into Stripe and requires no additional setup to get started), puoi specificare come metadati qualsiasi informazione aggiuntiva sui clienti e sugli ordini. In tal modo, puoi scrivere [regole Radar utilizzando gli attributi dei metadati](https://docs.stripe.com/radar/rules/reference.md#metadata-attributes) e disporre nella Dashboard di maggiori informazioni sui pagamenti, accelerando così la procedura di revisione. #### curl ```bash curl https://api.stripe.com/v1/charges \ -u <>: \ -d "amount"=999 \ -d "currency"="usd" \ -d "description"="Example charge" \ -d "source"="tok_visa" \ -d "metadata[order_id]"=6735 ``` > Non archiviare dati sensibili (informazioni sull’identità, dettagli di carte, ecc.) come metadati o nel parametro `description` dell’addebito. ## Pagamenti rifiutati Se desideri che la tua integrazione risponda ai pagamenti non andati a buon fine in modo automatico, puoi accedere alla proprietà `outcome` di un addebito in due modi. - [Gestisci l’errore API](https://docs.stripe.com/api.md#error_handling) restituito con l’esito negativo di un pagamento. Per i pagamenti bloccati o rifiutati dall’emittente della carta, l’errore include l’ID di addebito, che puoi usare per [recuperare](https://docs.stripe.com/api.md#retrieve_charge) l’addebito. - Utilizza i [webhook](https://docs.stripe.com/webhooks.md) per monitorare gli aggiornamenti di stato. Ad esempio, quando un pagamento non va a buon fine si attiva l’evento `charge.failed`.