Tapaya
Pagamenti onlineGuida all'integrazioneIntegrazione tramite API

Integrazione tramite API

Crei e recuperi le sessioni di Checkout dal Suo backend.

Il Suo backend crea una sessione di Checkout per ogni ordine e la recupera per verificare il pagamento.

Per Node.js, l'SDK @tapayadot/checkout fornisce per questi endpoint i metodi tipizzati create() e get(). Per impostazione predefinita legge TAPAYA_SECRET_KEY. Gli esempi HTTP in questa pagina passano TAPAYA_CHECKOUT_API_KEY in modo esplicito.

Autenticazione

Ogni chiamata a Checkout avviene da server a server e invia una chiave come bearer token:

Authorization: Bearer <key>

Scelga la modalità in base a chi gestisce il backend. In entrambi i casi conservi la chiave sul Suo server; si veda Sicurezza di Checkout.

Modalità esercente

Usi questa modalità quando il backend serve un solo negozio. Crei una chiave checkout dell'esercente nelle impostazioni di Checkout: apra l'esercente e selezioni Create merchant key. La chiave inizia con tapaya_test_ in sandbox o con tapaya_live_ in produzione e corrisponde esattamente a quell'esercente.

Authorization: Bearer <merchant-checkout-key>

In questa modalità X-Tapaya-Merchant-Token è facoltativo. Se lo invia, deve indicare lo stesso esercente.

La Platform mostra la chiave una sola volta e ne salva solo un hash. Per ruotare una chiave, crei quella sostitutiva prima di revocare la vecchia. La revoca di una chiave non influisce sulle altre chiavi dell'esercente, sulle chiavi dell'organizzazione né sui client secret già emessi ai browser.

Modalità piattaforma

Usi questa modalità quando un unico backend agisce per molti esercenti, ad esempio un marketplace o una piattaforma di consegna di cibo a domicilio. Invii in ogni richiesta la Secret key dell'organizzazione dalla pagina API Keys e il token dell'esercente:

Authorization: Bearer <secret-key>
X-Tapaya-Merchant-Token: <merchant-token>

Non esiste un esercente predefinito. Una richiesta senza l'intestazione restituisce HTTP 401. L'esercente deve appartenere all'organizzazione della chiave. Copi i token degli esercenti dalla tabella degli esercenti nelle impostazioni di Checkout. Il token identifica l'esercente; non è un segreto.

La Secret key dell'organizzazione è la stessa credenziale che la documentazione della Platform API chiama Server Secret Token. Checkout richiede il prefisso Bearer. Gli altri endpoint della Platform API accettano il token direttamente. L'onboarding degli esercenti e la gestione dell'organizzazione usano la Platform API.

I corpi delle richieste non accettano un merchantId.

Ambienti

AmbienteOrigine dell'APIOrigine di Hosted CheckoutCredenziali
Sandboxhttps://api.sandbox.tapaya.comhttps://checkout.sandbox.tapaya.comChiavi sandbox, con carte di prova
Produzionehttps://api.tapaya.comhttps://checkout.tapaya.comChiavi live, con metodi di pagamento reali

Imposti TAPAYA_CHECKOUT_API_URL sull'origine dell'API del Suo ambiente. In produzione sono disponibili sia i pagamenti ospitati sia quelli incorporati. Ogni esercente deve completare l'onboarding, ottenere l'approvazione del processore di pagamento per i pagamenti online e avere un gateway di pagamento configurato. Verifichi la preparazione dell'esercente nelle impostazioni di Checkout. Usi invariato l'URL della sessione ospitata restituito.

Sessioni di Checkout

Creare una sessione di Checkout

Crei una sessione quando il cliente fa clic su Checkout nel Suo negozio, poi lo reindirizzi all'url restituito. Prima calcoli il totale finale sul Suo server e salvi l'ordine con una idempotency key (chiave di idempotenza) univoca.

Endpoint: POST /merchant/checkout-sessions

curl -X 'POST' "$TAPAYA_CHECKOUT_API_URL/merchant/checkout-sessions" \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $TAPAYA_CHECKOUT_API_KEY" \
-H "X-Tapaya-Merchant-Token: $TAPAYA_MERCHANT_TOKEN" \
-H 'Idempotency-Key: order-1001-checkout-1' \
-d '{
        "merchantOrderId": "order-1001",
        "amount": 12100,
        "currency": "EUR",
        "tax": 2100,
        "shipping": 605,
        "taxRate": 21,
        "successUrl": "https://shop.example/checkout/return",
        "cancelUrl": "https://shop.example/checkout/cancel"
    }'

Intestazioni:

IntestazioneObbligatorioDescrizione
Authorization✓Bearer <key>: una chiave checkout dell'esercente o la Secret key dell'organizzazione.
X-Tapaya-Merchant-TokenModalità piattaformaToken di un esercente appartenente all'organizzazione della chiave. Facoltativo con una chiave checkout dell'esercente.
Idempotency-Key✓Non vuoto, al massimo 250 caratteri. Si veda Idempotenza ed errori.

Parametri:

CampoTipoObbligatorioDescrizione
merchantOrderIdstring✓Il Suo riferimento dell'ordine, da 1 a 200 caratteri. Si veda Un pagamento per ordine.
amountinteger✓Totale finale da addebitare nell'unità minore della valuta, imposte e spedizione comprese. Da 1 a 2.147.483.647.
currencystring✓Codice ISO 4217 di tre lettere supportato dal backend, in maiuscolo, ad esempio EUR.
localestringValore predefinito: en.
successUrlstringSostituisce l'URL di successo predefinito per questa sessione. Deve corrispondere a un sito web consentito della credenziale chiamante.
cancelUrlstringSostituisce l'URL di annullamento predefinito per questa sessione. Deve corrispondere a un sito web consentito della credenziale chiamante.
taxintegerIVA già inclusa in amount, compresa tra zero e amount. Valore predefinito: 0.
shippingintegerSpedizione già inclusa in amount, compresa tra zero e amount. Valore predefinito: 0.
taxRatenumberAliquota IVA percentuale per l'intero ordine, ad esempio 21 o 5.5. Non negativa.
taxBreakdownarrayIVA raggruppata per aliquota. Un array non vuoto non può essere inviato insieme a taxRate.
itemsarrayRighe dell'ordine solo a scopo di visualizzazione. Non determinano il totale addebitato.
customerobjectEmail, indirizzo di fatturazione e indirizzo di spedizione del cliente.

La sessione addebita nella valuta currency che imposta. Valute supportate elenca tutte le valute supportate da Tapaya, ma di solito un esercente è abilitato solo per alcune di esse. La creazione di una sessione in una valuta non supportata dall'esercente o dal backend viene rifiutata, quindi non viene creata alcuna pagina ospitata.

L'API addebita amount così come viene fornito. Non aggiunge spedizione o imposte, non calcola l'IVA da un'aliquota e non calcola un totale dalle righe dell'ordine.

Risposte:

CodiceDescrizione
200Sessione creata, oppure la stessa sessione restituita con il suo stato attuale per una ripetizione con la stessa chiave, lo stesso corpo e la stessa modalità di credenziale
409Conflitto: la chiave è stata riutilizzata con un corpo o una modalità di credenziale diversi (API-0025), oppure l'ordine è già pagato o ha un pagamento in corso

Corpo della risposta:

{
    "id": "cs_7Hq2x9LmR4",
    "merchantOrderId": "order-1001",
    "url": "https://checkout.sandbox.tapaya.com/c/cs_7Hq2x9LmR4",
    "status": "open",
    "paymentStatus": "unpaid",
    "amount": 12100,
    "currency": "EUR",
    "tax": 2100,
    "shipping": 605,
    "taxRate": 21,
    "taxBreakdown": [],
    "items": [],
    "expiresAt": "2026-07-15T12:30:00Z",
    "createdAt": "2026-07-15T12:00:00Z"
}

taxRate è incluso solo se fornito. Salvi l'id insieme all'ordine, poi invii il browser a url con HTTP 303. Una sessione accetta nuovi pagamenti per 30 minuti dalla creazione; un pagamento già inviato viene comunque completato anche dopo. Gli URL di ritorno vengono selezionati e convalidati alla creazione, usando i valori della richiesta oppure i valori predefiniti della credenziale chiamante: le destinazioni di ritorno dell'organizzazione per la Secret key dell'organizzazione con X-Tapaya-Merchant-Token, quelle dell'esercente per una chiave checkout dell'esercente. Le due configurazioni non vengono mai combinate.

Recuperare una sessione

Quando il cliente torna al Suo URL di successo o di annullamento, oppure da un job di riconciliazione, recuperi la sessione e la confronti con l'ordine salvato prima di evaderlo.

Endpoint: GET /merchant/checkout-sessions/{id}

curl "$TAPAYA_CHECKOUT_API_URL/merchant/checkout-sessions/cs_7Hq2x9LmR4" \
-H "Authorization: Bearer $TAPAYA_CHECKOUT_API_KEY" \
-H "X-Tapaya-Merchant-Token: $TAPAYA_MERCHANT_TOKEN"

Non esiste un suffisso /status. La risposta contiene l'identità della sessione, l'URL, i totali, i campi delle imposte, gli stati e i timestamp, oltre a paymentReference e completedAt, che possono essere null. paymentReference identifica l'ultimo tentativo di conferma ed è null finché non esiste un tentativo. Un riferimento non null non prova il successo. I timestamp sono stringhe ISO 8601.

Stato della sessione:

statusSignificato
openLa sessione è disponibile per il pagamento, oppure l'esito di un pagamento inviato è ancora in fase di conferma.
completedLa sessione è stata completata. Controlli paymentStatus per l'esito del pagamento.
expiredLa sessione non è più disponibile per un nuovo pagamento: è scaduta, oppure è stata sostituita da una sessione più recente per lo stesso ordine.

Stato del pagamento:

paymentStatusSignificato per l'ordine
unpaidNessun pagamento riuscito confermato. L'esito potrebbe essere ancora in fase di conferma.
successfulIl pagamento è riuscito. Riconcili riferimento dell'ordine, importo e valuta prima dell'evasione.
failedIl pagamento è stato rifiutato. Il cliente può provare un'altra carta o un altro wallet finché la sessione è aperta.
cancelledIl pagamento è stato annullato.
action_neededÈ necessaria un'ulteriore azione. Non evada l'ordine come pagato.

Una carta rifiutata lascia status su open e paymentStatus su failed. Mentre Tapaya conferma in background un esito incerto, la sessione resta open e unpaid; la recuperi di nuovo più tardi. Seguire il link di annullamento della pagina ospitata è una navigazione verso cancelUrl; di per sé non prova uno stato di pagamento cancelled.

Verificare sul server

Evada l'ordine solo quando la sessione recuperata corrisponde a riferimento, importo e valuta dell'ordine salvato e paymentStatus è successful. Un reindirizzamento del browser da solo non prova mai il pagamento.

Responsabilità di ordine e pagamento

Gestito dal Suo serverGestito da Tapaya
Il riferimento dell'ordine, i prezzi, la valuta e lo stato di evasioneLa sessione di checkout e l'esito del pagamento del gateway

L'ID di una sessione di checkout identifica un Hosted Checkout. Il suo merchantOrderId la collega al Suo ordine, mentre paymentReference identifica l'ultimo tentativo di conferma. Salvi l'ID della sessione insieme all'ordine, così da poter recuperare l'esito anche se il cliente chiude il browser.

La pagina ospitata usa endpoint pubblici separati per caricare e confermare la sessione. Il suo ID di sessione è una credenziale di accesso per quegli endpoint. Un'integrazione dell'esercente verifica il pagamento tramite l'endpoint autenticato per gli esercenti.

Un pagamento per ordine

Hosted ed Embedded Checkout condividono un unico motore di pagamento. Un esercente può avere al massimo un pagamento riuscito per merchantOrderId. Gli ID degli ordini valgono a livello di esercente, quindi esercenti diversi, anche all'interno della stessa organizzazione, possono usare gli stessi ID.

  • La creazione di una sessione per un ordine non pagato sostituisce la sessione non pagata precedente. Il vecchio URL riporta expired e non può più accettare pagamenti.
  • La creazione di una sessione per un ordine già pagato, o con un pagamento in corso, restituisce HTTP 409.
  • Dopo un rifiuto, il cliente può provare un'altra carta o un altro wallet nella stessa sessione. Inviare di nuovo lo stesso token della carta non comporta mai un doppio addebito.
  • Tapaya definisce la policy 3-D Secure e tenta sempre l'autenticazione.

Idempotenza ed errori

La creazione richiede un Idempotency-Key non vuoto di al massimo 250 caratteri. Per lo stesso esercente:

Se inviaTapaya restituisce
La stessa chiave, lo stesso corpo e la stessa modalità di credenzialeLa stessa sessione, con i suoi status e paymentStatus attuali
La stessa chiave con un corpo modificatoHTTP 409 con codice API-0025
La stessa chiave e lo stesso corpo con l'altra modalità di credenzialeHTTP 409 con codice API-0025, perché ogni modalità usa le proprie impostazioni di reindirizzamento
Totali non validi, una valuta non supportata, destinazioni di reindirizzamento non valide, configurazione del gateway mancante o un esercente non aggiunto a CheckoutUn rifiuto della creazione

Il rifiuto di una carta è un esito del pagamento, non la prova che una richiesta HTTP non sia riuscita.

Esito sconosciuto

Un errore di rete o un timeout lascia sconosciuto l'esito del pagamento. I webhook di Checkout non sono ancora disponibili: esegua la riconciliazione recuperando la sessione dal Suo server e ripeta la creazione solo con la stessa chiave e lo stesso corpo.

Manca qualcosa in questa pagina?Richieda una funzionalità. Alleghiamo questa pagina, così il team vede il contesto.