L'integrazione dell'Acquisto rapido incorporato consente di incorporare l'acquisto rapido basato sul web nelle piattaforme Google. Utilizza questo percorso se il tuo prodotto richiede una logica complessa (ad es. personalizzazioni) che l'API nativa non può supportare. Implementerai un'interfaccia utente di pagamento che verrà incorporata nel flusso di pagamento tramite un iframe.
Che cos'è l'Acquisto rapido incorporato?
Il pagamento incorporato (EC) consente a un host (come la Ricerca Google o un agente AI) di visualizzare il tuo pagamento esistente basato sul web all'interno della sua applicazione (utilizzando un iframe o una webview). A differenza di un reindirizzamento web standard, questo consente la comunicazione bidirezionale. L'host può "delegare" attività specifiche come la selezione di un indirizzo salvato o il pagamento con una credenziale memorizzata per offrire un'esperienza più rapida e nativa, mentre tu rimani il commerciante registrato e gestisci la creazione effettiva dell'ordine.
Elenco di controllo per l'implementazione per i commercianti
Per supportare Embedded Checkout, devi implementare i seguenti requisiti nell'API UCP e nell'applicazione di pagamento frontend.
1. Abilitare il rilevamento (API UCP)
Devi dichiarare che il tuo checkout supporta l'estensione incorporata nelle risposte dell'API UCP.
- Azione: aggiungi l'oggetto funzionalità
dev.ucp.shopping.embedded_checkoutall'array delle funzionalità di risposta UCP. - Requisito: includi gli URL delle specifiche e dello schema.
- (Facoltativo): se per caricare il
pagamento è necessaria l'autenticazione (ad esempio, un token JWT), imposta
auth.requiredsu true.
"capabilities": [
{
"name": "dev.ucp.shopping.embedded_checkout",
"version": "2026-01-11",
"spec": "https://ucp.dev/specs/shopping/embedded_checkout",
"config": {
"auth": { "required": true }
}
}
]
2. Inizializzazione dell'URL dell'handle (frontend)
Quando l'host carica il tuo continue_url, aggiunge parametri di query specifici. Il frontend deve analizzarli immediatamente al caricamento.
- Azione: analizza i seguenti parametri di query dell'URL:
ec_version: la versione del protocollo (ad es.2026-01-11).ec_auth: (se applicabile) convalida il token di autenticazione fornito dall'host, se hai impostatoauth.required: true.ec_delegate: un elenco separato da virgole di azioni che l'host vuole gestire in modo nativo (ad es.payment.credential,fulfillment.address_change,payment.instruments_change).
3. Stabilire la comunicazione (frontend)
La comunicazione avviene tramite postMessage utilizzando il formato JSON-RPC 2.0.
- Azione: implementa un listener per gli eventi
message. - Requisito: devi convalidare l'origine di ogni messaggio per assicurarti che corrisponda all'host.
- Supporto nativo: per gli host di app native, controlla e utilizza le variabili globali inserite (ad es.
window.EmbeddedCheckoutProtocolConsumer) sepostMessagenon è disponibile.
4. Eseguire l'handshake (frontend)
Non appena viene visualizzato il pagamento, devi comunicare all'host che sei pronto e confermare le deleghe che accetti.
- Azione: invia la richiesta
ec.readyimmediatamente dopo il caricamento. - Payload: includi un array
delegateche elenca le funzionalità che accetti di lasciare gestire all'host. - Esempio: se l'URL ha richiesto
ec_delegate=payment.credentiale tu accetti, includi"payment.credential"nel payloadec.ready.
// Example: Sending the ec.ready message
const hostWindow = window.parent;
hostWindow.postMessage(JSON.stringify({
"jsonrpc": "2.0",
"id": "ready_1",
"method": "ec.ready",
"params": {
"delegate": ["payment.credential"] // List capabilities you accept to delegate
}
}), "*");
5. Implementare la logica di delega (frontend)
Se hai accettato una delega nell'handshake, devi modificare il comportamento della UI per evitare conflitti.
- Azione: nascondi gli elementi UI pertinenti per le attività delegate.
- Esempio: se
fulfillment.address_changeè delegato, nascondi il modulo dell'indirizzo e mostra invece un pulsante "Modifica indirizzo". - Azione: quando l'utente fa clic su questo pulsante, invia un messaggio
_request(ad es.ec.fulfillment.address_change_request) all'host. - Azione: attendi la risposta dell'organizzatore. La risposta conterrà i nuovi dati (ad es. l'indirizzo selezionato).
- Requisito: aggiorna lo stato del pagamento utilizzando una sostituzione in stile PUT (sostituisci l'intera sezione dell'oggetto) in base ai dati restituiti dall'host.
// Example: requesting payment credential
hostWindow.postMessage(JSON.stringify({
"jsonrpc": "2.0",
"id": "req_1",
"method": "ec.payment.credential_request",
"params": {
"checkout": currentCheckoutState // Pass the full current checkout object
}
}), "*");
6. Inviare aggiornamenti del ciclo di vita e dello stato (frontend)
Devi tenere informato l'host sullo stato del pagamento in modo che possa aggiornare la propria interfaccia utente o gestire gli errori.
- Azione: invia notifiche (messaggi senza ID) quando lo stato cambia:
ec.start: Quando il pagamento è completamente visibile.ec.line_items.change: Se i contenuti o i totali del carrello vengono aggiornati.ec.buyer.change: Se i dettagli dell'acquirente vengono aggiornati.ec.complete: quando l'ordine viene effettuato correttamente.ec.error: se si verifica un errore critico.
7. Applica la sicurezza (server/intestazioni)
Devi assicurarti che il tuo checkout non possa essere incorporato da malintenzionati.
- Azione: implementa le intestazioni Content Security Policy (CSP).
- Requisito: imposta
frame-ancestors <host_origin>;per consentire l'incorporamento solo da host attendibili. - Navigazione: blocca la logica che allontana l'utente dal flusso di pagamento (ad es. rimuovi i link "Continua lo shopping" che rimandano alla home page). Sono consentite eccezioni per la verifica 3DS o i reindirizzamenti di pagamento di terze parti.