L’integrazione prevede cinque passaggi logici:
| Passaggio | Parte | Obbligatorio? | Cosa significa per il merchant |
|---|---|---|---|
1 |
Creare una sessione ( |
Sì |
Creare una sessione per ogni tentativo di checkout e salvare gli identificativi restituiti. |
2 |
Mostrare il widget wallet (iframe con |
Sì |
Mostrare l’interfaccia wallet al cliente. |
3 |
Callback di spedizione ( |
Condizionale |
Obbligatorio solo quando sono presenti articoli da spedire e le opzioni di spedizione devono essere calcolate dinamicamente. |
4 |
Ritorno allo shop e creazione dell’ordine ( |
Sì |
Dopo l’approvazione del cliente, il flusso ritorna al tuo shop. Crea l’ordine in questo passaggio. Facoltativamente, recupera i dettagli della sessione ( |
5 |
Elaborare la sessione ( |
Sì |
Chiama questo endpoint dopo il ritorno a |
Termini di reindirizzamento:
merchantRedirectUrl è l’URL verso cui il flusso riporta il cliente nel tuo shop.
redirectUrl è restituito da /express-checkout/session/process ed è l’URL successivo verso cui il tuo shop deve reindirizzare il cliente.
Metodo: POST
URL: /api/v2.0/express-checkout/session/create
Autenticazione: token HMAC
Per l’elenco completo dei campi e delle relative descrizioni, consulta API Client.
Modello della richiesta: IExpressCheckoutSession.ICreate.
Modello della risposta: ExpressCheckoutSessionCreateResponse.
{
"currency": "CHF",
"authorizationEnvironment": "TEST",
"merchantRedirectUrl": "https://your-shop.com/checkout/complete?sessionUuid=550e8400-e29b-41d4-a716-446655440000",
"merchantShippingCallbackUrl": "https://your-shop.com/api/shipping-options?sessionUuid=550e8400-e29b-41d4-a716-446655440000",
"lineItems": [
{
"uniqueId": "item-1",
"sku": "SKU-001",
"name": "Product Name",
"type": "PRODUCT",
"quantity": 1,
"amountIncludingTax": 42.00,
"shippingRequired": true,
"currency": "CHF",
"taxes": []
}
]
}
In questo esempio, sessionUuid=550e8400-e29b-41d4-a716-446655440000 è un valore di correlazione generato dal merchant.
Lo shop deve associare sessionUuid al sessionId restituito.
La risposta contiene:
sessionId — l’ID della sessione creata
sessionToken — token di sicurezza necessario per l’elaborazione
Note di implementazione:
Richiesto nella pratica: includere i dati che definiscono l’ordine (currency, lineItems, merchantRedirectUrl).
Richiesto: fornire authorizationEnvironment (TEST o PRODUCTION). Questo ambiente viene usato per determinare la disponibilità dei wallet e il comportamento di elaborazione della sessione.
Richiesto condizionatamente: fornire merchantShippingCallbackUrl quando il wallet deve richiedere opzioni di spedizione.
Richiesto per una correlazione affidabile: generare il proprio sessionUuid, aggiungerlo a merchantRedirectUrl e merchantShippingCallbackUrl, e salvare una mappatura sessionUuid <→ sessionId.
Conservare correttamente gli identificativi: persistere sessionId per l’elaborazione successiva. Tenere disponibile sessionToken fino al completamento del rendering del widget (la persistenza è facoltativa).
Incorpora l’iframe del wallet nella tua pagina usando l’URL del widget costruito con il sessionToken.
Il widget gestisce la selezione dell’indirizzo, la visualizzazione delle opzioni di spedizione e l’approvazione del pagamento.
Esempio minimo di integrazione:
<script src="https://<scope-base-path>/assets/payment/express-checkout-handler.js"></script>
<div id="express-checkout-container"></div>
<script>
window.ExpressCheckoutHandler.load('express-checkout-container', sessionToken, {
maxColumns: 3,
maxRows: 2,
onError: function (error) {
// Hook di errore personalizzato facoltativo.
// error = { source, code, message }
console.error('Errore wallet Express Checkout', error);
alert(error.message);
}
});
</script>
Note di implementazione:
Richiesto: mostrare il widget con il containerId e il sessionToken ottenuti dalla creazione della sessione.
Facoltativo (maxColumns): controlla quanti pulsanti wallet vengono mostrati per riga. L’intervallo consentito va da 1 a 6. Se omesso, il widget usa il valore predefinito 2.
Facoltativo (maxRows): controlla il numero massimo di righe mostrate inizialmente. L’intervallo consentito va da 1 a 10. Se omesso, non viene applicato alcun limite di righe (vengono mostrate tutte le righe renderizzate).
Facoltativo (onError): callback invocato quando un’iframe wallet pubblica un errore di integrazione o runtime. Riceve un oggetto con source, code e message. Quando presente, questo callback diventa l’hook attivo per l’interfaccia di errore. Quando assente, rimane attiva la gestione degli errori predefinita del widget.
Logging operativo: gli errori delle iframe wallet vengono segnalati al backend e registrati per la diagnostica.
Dopo l’approvazione del wallet e il ritorno al tuo merchantRedirectUrl, chiama l’endpoint di elaborazione per creare la transazione e autorizzare il pagamento.
Metodo: POST
URL: /api/v2.0/express-checkout/session/process
Autenticazione: token HMAC (come per tutte le chiamate REST API)
Per l’elenco completo dei campi e delle relative descrizioni, consulta API Client.
Modello della richiesta: IExpressCheckoutSessionProcessRequest.
Modello della risposta: ExpressCheckoutSessionProcessResponse.
{
"sessionId": 123456,
"merchantReference": "EC-MR-789",
"successUrl": "https://your-shop.com/checkout/success",
"failureUrl": "https://your-shop.com/checkout/failure"
}
Note di implementazione:
Richiesto: chiamare questo endpoint dopo l’approvazione e dopo che il cliente è stato reindirizzato dal portale al tuo shop.
Richiesto: fornire sessionId, una merchantReference idempotente e non vuota, oltre a successUrl e failureUrl.
Richiesto: reindirizzare il browser all’URL restituito nella risposta.
Importante: Express Checkout non usa il fallback dell’URL di risultato predefinito della payment page. La chiamata di elaborazione deve fornire URL di risultato merchant espliciti.
Facoltativo (consigliato): recuperare i dettagli della sessione prima dell’elaborazione per validare importo finale, indirizzo e opzione di spedizione selezionata.
Consigliato: considerare i webhook come fonte di verità per lo stato asincrono finale (AUTHORIZED / FAILED), mentre i redirect del browser guidano la navigazione del cliente.
La risposta contiene un URL di destinazione per il redirect. Reindirizza il cliente a quell’URL per continuare il 3DS (se necessario) e completare il flusso.
Puoi recuperare la sessione Express Checkout approvata prima dell’elaborazione. Questo è utile per creare o validare l’ordine dello shop in base alle selezioni finali del cliente.
Metodo: GET
URL: /api/v2.0/express-checkout/session
Autenticazione: token HMAC
Per l’elenco completo dei campi e delle relative descrizioni, consulta API Client.
Uso tipico:
Risolvi il tuo riferimento checkout interno nel sessionId salvato
Recupera i dettagli della sessione
Crea o valida l’ordine usando l’indirizzo restituito, l’opzione di spedizione selezionata e i totali
Chiama /express-checkout/session/process
Se i tuoi prodotti richiedono spedizione, devi implementare un endpoint di callback che wallee chiama per recuperare le opzioni di spedizione quando il cliente cambia indirizzo. L’URL di questo endpoint viene fornito per sessione tramite il campo merchantShippingCallbackUrl nella richiesta di creazione.
Il contratto di callback usa i seguenti tre modelli:
IExpressCheckoutShippingOptionRequest
Richiesti: countryCode, currency, language, expressCheckoutId, spaceId, requestId
Facoltativi: state, street, city, postalCode
IExpressCheckoutShippingOptionsResponse
shippingOptions: elenco di voci IExpressCheckoutShippingOption (restituire almeno una voce in caso di successo, un elenco vuoto in caso di errore).
Per l’elenco completo dei campi e delle relative descrizioni, consulta IExpressCheckoutShippingOption.
error: null in caso di successo, oppure un oggetto IExpressCheckoutShippingOptionsClientError in caso di errore business
IExpressCheckoutShippingOptionsClientError
Campi: error (tipo breve), message (spiegazione leggibile dall’utente), timestamp (stringa temporale facoltativa)
Metodo: POST
URL: il tuo URL di callback configurato
Content-Type: application/json
Wallee invia i seguenti campi in IExpressCheckoutShippingOptionRequest:
| Campo | Tipo | Obbligatorio? | Note |
|---|---|---|---|
|
Long |
Sì |
Identificativo della sessione Express Checkout. |
|
String |
Sì |
Identificativo dello space merchant. |
|
String |
Sì |
ID di correlazione per il tracciamento. |
|
String |
Sì |
Codice paese (ISO-3166 alpha-2). |
|
String |
Sì |
Codice valuta (ISO-4217). |
|
String |
Sì |
Codice lingua (ISO-639). |
|
String |
No |
Codice stato o provincia. |
|
String |
No |
Indirizzo stradale. |
|
String |
No |
Nome della città. |
|
String |
No |
Codice postale o ZIP. |
{
"expressCheckoutId": 123456,
"spaceId": "84",
"requestId": "21a2f7fe-51b7-4ed5-9f88-1fb128292986",
"countryCode": "CH",
"currency": "CHF",
"language": "it",
"state": "ZH",
"street": "Via Esempio 5",
"city": "Winterthur",
"postalCode": "8400"
}
Restituisci un oggetto JSON con opzioni di spedizione oppure un errore.
L’endpoint del tuo shop deve restituire IExpressCheckoutShippingOptionsResponse a wallee come corpo della risposta HTTP.
Contratto della risposta:
Percorso di successo: restituire una o più shippingOptions e impostare error a null.
Percorso di errore: restituire un array shippingOptions vuoto e fornire un oggetto error popolato.
Non usare codici HTTP non-200 per errori business: mantenere HTTP 200 e comunicare gli errori nel corpo.
Usare codici HTTP non-200 solo per guasti tecnici: ad esempio formato payload non valido, errore di autenticazione o indisponibilità lato server.
| Campo | Tipo | Obbligatorio? | Note |
|---|---|---|---|
|
String |
Sì |
Identificativo univoco dell’opzione di spedizione. |
|
String |
Sì |
Nome visualizzato al cliente. |
|
String |
No |
Testo descrittivo facoltativo. |
|
Decimal |
Sì |
Importo totale della spedizione incluse le imposte. |
|
Array |
No |
Righe imposta con |
|
String |
Sì |
Codice valuta ISO-4217. Deve corrispondere alla valuta della sessione. |
| Campo | Tipo | Obbligatorio? | Note |
|---|---|---|---|
|
String |
Sì |
Identificativo breve del tipo di errore (ad esempio |
|
String |
Sì |
Descrizione dell’errore leggibile dall’utente. |
|
String |
No |
Timestamp del momento in cui si è verificato l’errore. |
{
"shippingOptions": [
{
"id": "standard",
"label": "Spedizione standard",
"description": "Consegna in 3-5 giorni lavorativi",
"amountIncludingTax": 9.99,
"taxes": [
{ "title": "IVA", "rate": 7.70 }
],
"currency": "CHF"
},
{
"id": "express",
"label": "Spedizione express",
"description": "Consegna in 1-2 giorni lavorativi",
"amountIncludingTax": 19.99,
"taxes": [
{ "title": "IVA", "rate": 7.70 }
],
"currency": "CHF"
}
],
"error": null
}
| Wallet | Stato | Note |
|---|---|---|
Disponibile |
Solo per test e sviluppo. |
|
Disponibile |
Pronto per la produzione in Express Checkout. |
|
Pianificato |
— |
|
Pianificato |
— |
Per i test, usa Bogus Pay.
Fornisce indirizzi fittizi, carte di test e flussi di approvazione (inclusa la simulazione 3DS).