La piattaforma Prenota con Google supporta una serie di configurazioni per l'accettazione dei pagamenti. La guida all'attivazione dei pagamenti illustra gli aspetti dell'integrazione comuni a tutte le integrazioni, tra cui:
- Configurazione dei feed per includere le informazioni relative a
tokenization_parameter
in corso... - Aggiornamento del server di prenotazione in modo che accetti gli oggetti
payment_method_token
- Una panoramica delle informazioni scambiate tra un utente, Prenota con Google, il partner / commerciante e l'elaboratore dei pagamenti.
In questa guida vedremo in maggiore dettaglio come configurare i feed per specificare quale dei diversi tipi di configurazioni di pagamento è applicabile ai tuoi commercianti e ai tuoi servizi.
- Nessun pagamento / pagamento all'arrivo
- Pagamento anticipato completo
- Commissione per mancato arrivo / cancellazione
- Deposito
Tutti i casi d'uso relativi ai pagamenti sono estensioni del caso d'uso "nessun pagamento" o "pay-on-arrival" (che non richiede alcuna configurazione di pagamento), quindi questo tutorial inizierà a descrivere questa configurazione e a trattare altre configurazioni come estensioni.
Ogni sezione coprirà anche i campi da monitorare nel server di prenotazione per accettare la configurazione di pagamento specifica.
Nessun pagamento / pagamento all'arrivo
Per i servizi che non richiedono alcun pagamento al momento della prenotazione, non è richiesta alcuna configurazione dei pagamenti a livello di commerciante o servizio. Tuttavia, i prezzi sono comunque obbligatori.
Questa è la configurazione di base per un servizio, contenente un nome, una descrizione e un prezzo. Questo sarebbe un singolo messaggio di servizio
in
ServiceFeed
:
JSON
{ "merchant_id": "merchant-1", "service_id": "service-1-a", "name": "Men's haircut", "description": "One of our stylists will cut your hair", "price": { "price_micros": 15000000, "currency_code": "USD" } }
Non è necessaria alcuna configurazione aggiuntiva oltre all'implementazione standard nel server di prenotazione per supportare il pagamento all'arrivo.
Pagamento anticipato
Questa configurazione viene utilizzata per specificare che l'importo del servizio deve essere pagato per intero al momento della prenotazione.
Il pagamento anticipato è specificato a livello di servizio tramite il campo
prepayment_type
in
Service
. Per richiedere i pagamenti per un servizio, questo deve essere impostato su REQUIRED
come nell'esempio seguente. Tieni presente che il prezzo viene specificato allo stesso modo dell'esempio di pagamento anticipato. Poiché imposteremo il tipo di pagamento anticipato su obbligatorio, verrà raccolta una carta di credito e questo prezzo può essere addebitato al momento del pagamento.
JSON
{ "merchant_id": "merchant-1", "service_id": "service-2-b", "name": "Spa Treatment", "description": "A full spa treatment", "price": { "price_micros": "200000000", "currency_code": "USD" } "prepayment_type": "REQUIRED" }
Server di prenotazione
Quando accetti i pagamenti anticipati, viene inviato un token di pagamento al tuo
server di prenotazione nella chiamata a
CreateBooking
tramite il campo
payment_processing_parameters.unparsed_payment_method_token
.
Devi addebitare esattamente l'importo specificato nel campo del prezzo nei feed e devi utilizzare la valuta specificata nei feed. Questi addebiti devono seguire il flusso descritto nella
Guida all'attivazione dei pagamenti.
Quando restituisci un
CreateBookingResponse
il campo booking.payment_information
deve essere impostato in modo da
riflettere correttamente che il pagamento anticipato è stato fornito ed elaborato.
La specifica PaymentInformation
contiene la documentazione completa per tutte le opzioni relative ai dati di pagamento. Di seguito è riportato un esempio minimo per l'elaborazione del pagamento anticipato. È importante che il prezzo restituito nel campo del prezzo corrisponda esattamente a quello specificato nella richiesta. Inoltre, se l'aliquota fiscale è specificata nel feed/richiesta, deve essere inclusa esattamente.
Tieni inoltre presente che devi fornire un ID transazione. Questo ID transazione deve, almeno, essere univoco tra le transazioni con questo commerciante. Un buon candidato per un ID transazione è l'ID transazione fornito dall'elaboratore dei pagamenti.
JSON
{ "prepayment_status": "PREPAYMENT_PROVIDED", "payment_processed_by": "PROCESSED_BY_PARTNER", "payment_transaction_id": "[this-transaction-id]", "price": { "price_micros": "200000000", "currency_code": "USD" } }
Commissione per mancato arrivo
Gli addebiti per mancato arrivo possono essere addebitati a un utente se non partecipano alla prenotazione o se vengono annullati dopo il periodo di annullamento. Se non viene specificata alcuna finestra di annullamento, per impostazione predefinita viene utilizzata l'ora di inizio dello slot.
Per specificare una commissione per il mancato arrivo, nel feed del servizio devi includere il campo no_show_fee
come mostrato nell'esempio seguente:
JSON
{ "merchant_id": "merchant-1", "service_id": "service-2-b", "name": "Spa Treatment", "description": "A full spa treatment", "price": { "price_micros": 200000000, "currency_code": "USD" } "scheduling_rules": { "min_advance_online_canceling": 14400, } "no_show_fee": { "fee": { "price_micros": 25000000, "currency_code": "USD" } "fee_type": "FIXED_RATE_DEFAULT" } }
Nell'esempio precedente, il partner o il commerciante è autorizzato
ad addebitare un costo fisso di 25 $, come specificato nel campo
no_show_fee.fee.price_micros
, se il titolare dell'appuntamento
non partecipa all'appuntamento. Questa tariffa può essere addebitata anche se l'utente annulla entro 4 ore (14400 secondi) prima dell'appuntamento, come specificato nel campo scheduling_rules.min_advance_online_canceling
.
Per informazioni su come non definire le tariffe per il programma a livello di disponibilità, consulta questa sezione.
Server di prenotazione
Durante l'elaborazione di una richiesta che include una commissione per il mancato arrivo, viene inviato un token di pagamento al tuo server di prenotazione nella chiamata a CreateBooking
tramite il campo payment_processing_parameters.unparsed_payment_method_token
.
Questo token viene inviato con le stesse modalità del caso di pagamento anticipato. Tuttavia, poiché il token è autorizzato solo per un breve periodo di tempo, devi chiamare l'API pertinente del tuo elaboratore dei pagamenti per eseguire l'upgrade di questo token in una versione che puoi continuare a utilizzare in un secondo momento. come descritto nella sezione relativa all'abilitazione dei pagamenti
sul
flusso del token per il mancato pagamento.
Quando restituisci un
CreateBookingResponse
il campo booking.payment_information
deve essere impostato per richiamare correttamente
lo stato della commissione di non visualizzazione, come nell'esempio che segue.
JSON
{ "prepayment_status": "PREPAYMENT_PROVIDED", "payment_processed_by": "PROCESSED_BY_PARTNER", "payment_transaction_id": "[this-transaction-id]", "price": { "price_micros": "200000000", "currency_code": "USD" } "no_show_fee": { "fee": { "price_micros": 25000000, "currency_code": "USD" } "fee_type": "FIXED_RATE_DEFAULT" } }
Tieni presente che l'no_show_fee
è impostato per riflettere il prezzo e
la struttura della commissione che potrebbe essere addebitata. Inoltre, come nel caso dell'esempio del pagamento anticipato, in questo messaggio è necessario transaction_id
.
Tieni inoltre presente che booking_id
è un campo obbligatorio per
CreateBookingResponse
, in quanto
è un campo obbligatorio per gli aggiornamenti in tempo reale che devono essere inviati quando addebiti una tariffa per mancato arrivo. Si prevede che questo ID venga memorizzato insieme alle informazioni
sulla prenotazione.
Aggiornamenti in tempo reale
Se un utente non arriva per la prenotazione programmata o annulla dopo la finestra di annullamento (ad es. contattandolo direttamente), puoi facoltativamente addebitare la commissione di mancato arrivo specificata utilizzando le informazioni di pagamento memorizzate al momento della prenotazione. Quando addebiti una tariffa per mancato arrivo, devi inviare un aggiornamento in tempo reale specificando che la tariffa per il mancato arrivo è stata addebitata.
Per le prenotazioni create da
CreateBooking
, è necessario inviare un aggiornamento a
notification.partners.bookings.patch
. Nel corpo di questa richiesta deve esserci la prenotazione aggiornata, con lo stato impostato su NO_SHOW_PENALIZED
. Questo stato informa Google che è stato effettuato un addebito.
Ad esempio, potresti inviare una richiesta a:
PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/12345678/bookings/123123123?updateMask=status
Con un corpo della richiesta:
JSON
{ "name": "partners/12345678/bookings/123123123" "merchantId": "merchant-1" "serviceId": "service-2-b" "status": "NO_SHOW_PENALIZED" }
Deposito
I versamenti vengono utilizzati per riscuotere un addebito iniziale come requisito per la prenotazione. I versamenti possono essere addebitati al momento della prenotazione o in un secondo momento. Potresti dover definire i termini in cui un acconto è rimborsabile e quando la prenotazione può essere annullata online.
Per specificare un bonifico, nel feed di servizio devi includere il campo deposit
come mostrato nell'esempio seguente:
JSON
{ "merchant_id": "merchant-1", "service_id": "service-2-b", "name": "Spa Treatment", "description": "A full spa treatment", "price": { "price_micros": 200000000, "currency_code": "USD" } "scheduling_rules": { "min_advance_online_canceling": 86400, } "deposit": { "deposit": { "price_micros": 25000000, "currency_code": USD, "min_advance_cancellation_sec": 14400, } "deposit_type": "FIXED_RATE_DEFAULT" } }
In questo esempio, min_advance_online_canceling
definisce la finestra di annullamento e deposit.min_advance_cancellation_sec
definisce quando il deposito è rimborsabile. Tieni presente che nell'esempio precedente un deposito può specificare un tempo di annullamento separatamente dai termini del rimborso. In questo caso, un utente potrà annullare il servizio online con un anticipo massimo di 24 ore (86400 secondi). In questo modo, il commerciante verrà informato direttamente di eventuali cancellazioni tardive. Tuttavia, l'utente potrebbe comunque avere diritto a un rimborso sul proprio deposito fino a 4 ore prima (14400 secondi) prima della prenotazione (contattando te o il commerciante per la cancellazione),
che verrà visualizzato nei termini di pagamento e nell'email di conferma.
Per informazioni su come definire i versamenti a livello di disponibilità, consulta questa sezione.
Server di prenotazione
Quando elabora una richiesta che include un deposito, viene inviato un token di pagamento al tuo server di prenotazione nella chiamata a CreateBooking
tramite il campo payment_processing_parameters.unparsed_payment_method_token
.
Questo token viene inviato come con il pagamento anticipato. Se addebiti il deposito o elimini la sospensione al momento della prenotazione, puoi farlo durante questa richiesta.
Se hai intenzione di addebitare il deposito in un secondo momento, poiché il token è autorizzato solo per un breve periodo di tempo, devi chiamare l'API pertinente dell'elaboratore dei pagamenti per eseguire l'upgrade del token in una versione che puoi continuare a utilizzare in un secondo momento. come descritto nella sezione della guida sull'attivazione dei pagamenti relativa al flusso del token del deposito.
Quando restituisci un
CreateBookingResponse
, il campo booking.payment_information
deve
ripetere correttamente l'eco dello stato del bonifico, come nell'esempio seguente.
JSON
{ "prepayment_status": "PREPAYMENT_PROVIDED", "payment_processed_by": "PROCESSED_BY_PARTNER", "payment_transaction_id": "[this-transaction-id]", "price": { "price_micros": "200000000", "currency_code": "USD" } "deposit": { "deposit": { "price_micros": 25000000, "currency_code": USD, "min_advance_cancellation_sec": 28800, } "deposit_type": "FIXED_RATE_DEFAULT" } }
Tieni presente che il bonifico è impostato in modo da riflettere il prezzo e la struttura del
deposito che verrà addebitato o trattenuto. Inoltre, come nel caso dell'esempio del pagamento anticipato, in questo messaggio è necessario transaction_id
.
Aggiornamenti in tempo reale
Se un utente annulla la prenotazione prima del periodo per la cancellazione del deposito, devi rimborsare l'eventuale deposito che hai addebitato sulla carta degli utenti. Quando rimborsi un deposito, devi inviare un aggiornamento in tempo reale che specifica che il deposito è stato rimborsato.
Per le prenotazioni create da
CreateBooking
, è necessario inviare un aggiornamento a
notification.partners.bookings.patch
. Nel corpo di questa richiesta deve esserci la prenotazione aggiornata, con lo stato impostato su CANCELED
e il campo paymentInformation.prepaymentStatus
impostato su PREPAYMENT_REFUNDED
. e informa Google che è stato rimborsato.
Ad esempio, potresti inviare una richiesta a:
PATCH https://mapsbooking.googleapis.com/v1alpha/notification/partners/12345678/bookings/123123123?updateMask=status
Con un corpo della richiesta:
JSON
{ "name": "partners/12345678/bookings/123123123" "merchantId": "merchant-1" "serviceId": "service-2-b" "status": "CANCELED" "paymentInformation": { "prepaymentStatus": "PREPAYMENT_REFUNDED" } }
Richiedi carta di credito
Un servizio può richiedere una carta di credito come verifica aggiuntiva dell'identità dell'utente. Tuttavia, non deve essere utilizzata per pagamenti anticipati, depositi o commissioni per mancato arrivo. Se questi casi d'uso sono obbligatori, devono essere configurati in modo esplicito seguendo i passaggi riportati sopra. Tieni inoltre presente che la richiesta di una carta di credito spesso comporta un calo significativo delle prenotazioni per questo servizio.
Per richiedere una carta di credito durante il pagamento, devi impostare il campo require_credit_card
su REQUIRE_CREDIT_CARD_ALWAYS
.
JSON
{ "merchant_id": "merchant-1", "service_id": "service-1-a", "name": "Men's haircut", "description": "One of our stylists will cut your hair", "price": { "price_micros": 15000000, "currency_code": "USD" }, "require_credit_card": "REQUIRE_CREDIT_CARD_ALWAYS" }
Server di prenotazione
Durante l'elaborazione di una richiesta che include un requisito della carta di credito, un token
di pagamento viene passato al tuo server di prenotazione nella chiamata a
CreateBooking
tramite il campo
payment_processing_parameters.unparsed_payment_method_token
.
Questo token viene inviato con le stesse modalità del caso di pagamento anticipato. Tuttavia, poiché il token è autorizzato solo per un breve periodo di tempo, devi chiamare l'API pertinente del tuo elaboratore dei pagamenti per eseguire l'upgrade di questo token in una versione che puoi continuare a utilizzare in un secondo momento.
Non sono richieste informazioni aggiuntive nella risposta del server di prenotazione oltre a quelle relative al caso d'uso pay-on-arrival.
Override dei prezzi a livello di disponibilità
In tutti gli esempi precedenti, la struttura prezzo / commissione viene specificata a livello di servizio. Nella maggior parte dei casi, questo prezzo deve essere utilizzato a livello di servizio. In alcuni casi, tuttavia, è opportuno modificare la struttura dei pagamenti per determinati slot di disponibilità. Ad esempio, le seguenti situazioni possono essere gestite sostituendo i prezzi / le tariffe a livello di disponibilità:
- I prezzi vengono ridotti il martedì e aumentano il sabato.
- La disponibilità del programma non è disponibile dalle 17:00 alle 19:00.
La tabella riportata di seguito elenca, per ogni metodo di pagamento / commissione, quale campo utilizzare nel feed di disponibilità per eseguire l'override della definizione del livello di servizio.
Tipo di pagamento | Definizione di tariffa / prezzo | Ignorabile? |
---|---|---|
Paga all'arrivo | Service.price
|
Prezzo sostituibile tramite
Availability.payment_option_id che fa riferimento a
Merchant.payment_option
|
Pagamento anticipato | Service.price
|
Il prezzo è sostituibile tramite il riferimento a Availability.payment_option_id Merchant.payment_option
|
Nessuna commissione per il programma | Service.no_show_fee
|
Availability.no_show_fee
|
Deposito | Service.deposit
|
Availability.deposit
|
Richiedi carta di credito | Service.require_credit_card
|
Availability.require_credit_card
|
Tieni presente che, per sostituire il prezzo a livello di disponibilità, devi innanzitutto definire un'opzione di pagamento a livello di commerciante. Inoltre, per indicazioni sull'aggiunta di finestre di cancellazione a livello di disponibilità, consulta la guida Come aggiungere finestre di cancellazione.