L'API segue una serie di standard API HTTP e supporta idempotenza per facilitare una valutazione e integrazione.
URL ospitati da Google
La documentazione relativa a ciascun metodo ospitato da Google fornisce un URL di base, che include il nome del metodo e il numero di versione principale. Viene creato l'URL completo aggiungendo l'ID account dell'integratore pagamenti del chiamante alla fine. Ad esempio, la documentazione per il metodo eco in hosting su Google specifica l'URL:
https://vgw.googleapis.com/secure-serving/gsp/v1/echo
Se l'ID account dell'integratore pagamenti del chiamante è INTEGRATOR_1
, deve aggiungere
che si trova alla fine dell'URL per formare:
https://vgw.googleapis.com/secure-serving/gsp/v1/echo/INTEGRATOR_1
URL ospitati dai partner
La documentazione relativa a ciascun metodo API ospitato dai partner fornisce un URL di base,
include il nome del metodo e il numero di versione principale. Non devi includere i campi
ID account integratore pagamenti (PIAID
)
negli URL che ospiti.
Ambienti di sandbox e produzione
Google ospita le API di pagamento standard in entrambe le sandbox (per le applicazioni test) e produzione. Richieste nell'ambiente sandbox di Google non comportano alcuna responsabilità finanziaria reale. La sandbox e ambienti di produzione sono completamente separati e non condividono chiavi le informazioni sulla transazione.
Google si aspetta che la sandbox sia sempre disponibile poiché utilizzeremo la sandbox per testare le modifiche e le nuove funzionalità.
Percorso di base sandbox di Google
https://vgw.sandbox.google.com/secure-serving/gsp/
Percorso base di produzione di Google
https://vgw.googleapis.com/secure-serving/gsp/
Questa guida utilizzerà gli endpoint di produzione.
Tipo di contenuti e codifica
I payload dei messaggi che utilizzano la crittografia PGP devono usare il tipo di contenutoapplication/octet-stream; charset=utf-8
. Gli corpi delle richieste PGP devono
essere inviate utilizzando la codifica base64url, come definita in
rfc4648 §5.
I payload dei messaggi che utilizzano la crittografia JWE devono utilizzare il tipo di contenuto
application/jose; charset=utf-8
. L'opzione Serializzazione compatta
supportato da JWE/JWS e gestisce la codifica per il corpo della richiesta finale.
Codici di stato HTTP
Le API di pagamento standard sono progettate per restituire un codice di stato HTTP 200
per tutte le richieste che possono essere elaborate dal server. Sono inclusi
richieste accettate e rifiutate dal punto di vista aziendale o
della logica dell'applicazione. Le richieste che non possono essere elaborate non devono comportare
il codice di stato HTTP 200
, poiché rappresenta un errore tra Google e
partner. La risposta dell'API deve invece utilizzare lo stato HTTP appropriato
seguenti con un oggetto ErrorResponse
facoltativo.
Errori e motivi HTTP | |
---|---|
400 |
BAD REQUEST
Il client ha specificato un argomento non valido. Questo valore può essere restituito anche se l'operazione è stata rifiutata perché il sistema non è nello stato richiesto per l'esecuzione dell'operazione. Utilizza questa opzione se i nuovi tentativi della richiesta non possono andare a buon fine fino allo stato del sistema sia stato risolto esplicitamente. Ad esempio, se una richiesta di rimborso non va a buon fine perché fa riferimento a un'acquisizione che non esiste, il nuovo tentativo non avrà esito positivo finché l'acquisizione non esiste nel sistema degli integratori.
|
401 |
UNAUTHORIZED
La richiesta non dispone di credenziali di autenticazione valide per il operativa. Ad esempio, le firme non valide o sconosciute restituisce un codice 401. |
403 |
FORBIDDEN / PERMISSION DENIED
Il chiamante non dispone dell'autorizzazione per eseguire l'operazione specificata. |
404 |
NOT FOUND
Alcune entità richieste, come il pagamento o l'utente, non sono state trovate. |
409 |
CONFLICT / ABORTED
L'operazione è stata interrotta, in genere a causa di un problema di contemporaneità come errori nel controllo del sequencer, interruzioni delle transazioni e così via. |
412 |
PRECONDITION FAILED
Questo codice deve essere usato in situazioni in cui una chiave di idempotenza viene riutilizzati con parametri diversi. |
429 |
RESOURCE EXHAUSTED / TOO MANY REQUESTS
Alcune risorse di sistema sono esaurite. |
499 |
CANCELLED
L'operazione è stata annullata (in genere dal chiamante). |
500 |
INTERNAL ERROR
Errori interni. Ciò significa alcune caratteristiche invarianti previste dal sistema sottostante. è stato danneggiato. |
501 |
UNIMPLEMENTED
L'operazione non è implementata, supportata o abilitata in questo servizio. |
503 |
UNAVAILABLE
Il servizio non è al momento disponibile. Molto probabilmente si tratta di un caso e può essere corretta riprovando. |
504 |
GATEWAY TIMEOUT / DEADLINE EXCEEDED
La scadenza è scaduta prima del completamento dell'operazione. Per le operazioni modificare lo stato del sistema, questo errore potrebbe essere restituito anche se l'operazione è stata completata correttamente. Ad esempio, una risposta positiva da un server potrebbe essere stato ritardato abbastanza a lungo perché la scadenza scadono. |
Richiedi idempotenza
L'idempotenza della richiesta è una strategia centrale utilizzata nei pagamenti standard API utilizzate per garantire che le interazioni di sistema tra Google e i partner robuste e a tolleranza di errore. Le richieste idempotenti sono richieste che possono potrebbero essere inviate più volte, ma hanno lo stesso effetto di una singola richiesta. Questa strategia agevola la coerenza finale tra i sistemi rendendo nuovi tentativi in sicurezza, il che consente ai nostri sistemi di raggiungere un accordo lo stato desiderato della risorsa.
La nostra API sfrutta l'idempotenza per:
- a ridurre i problemi di riconciliazione rendendo tutte le azioni facilmente tracciabili verificabile.
- impediscono le racecondition, assicurando che più richieste identiche nello stesso client non risultano in uno stato finale diverso.
- minimizzare lo stato consentendo la comprensione delle richieste in modo isolato, per migliorare le prestazioni e la velocità effettiva rimuovendo il carico del server causato conservazione dei dati.
- evitare la necessità di campi aggiuntivi per indicare se una richiesta è un nuovo tentativo.
Esempi
Esempio 1: connettività persa prima della ricezione di una risposta
Scenario:
- Google invia una richiesta all'integratore.
- L'integratore server riceve questa richiesta e la elabora correttamente.
- Il server di Google si spegne prima di ricevere la risposta nel passaggio 2.
- Viene ripristinata la corrente del server di Google e viene inviata la stessa richiesta
con gli stessi parametri (stesso ID e dettagli della richiesta, ma aggiornati
requestTimestamp
) al server dell'integratore.
Risultato:
In questo caso il server di integrazione deve rispondere con la stessa risposta fornita su
passaggio 2 perché tutti i parametri, tranne responseTimestamp
, sono uguali.
L'effetto collaterale si verifica una sola volta, nel passaggio 2. Il passaggio 4 non ha alcun effetto collaterale.
Esempio 2: richiesta inviata a un server in fase di manutenzione
Scenario:
- Il database del server di integrazione non è attivo per manutenzione.
- Google invia una richiesta all'integratore.
- L'integratore restituisce correttamente il codice di stato
UNAVAILABLE
. - Il server di Google riceve la risposta e pianifica un nuovo tentativo.
- Il database del server di integrazione è di nuovo online.
- Google invia di nuovo la richiesta dal passaggio 2 (stesso ID richiesta e stessi dettagli della richiesta)
ma ha aggiornato
requestTimestamp
). Tieni presente che gli ID richiesta di entrambe le richieste dovrebbe essere lo stesso. - Il server integratore riceve la richiesta e restituisce un codice di stato OK con una risposta completa.
Risultato:
In questo caso il server di integrazione deve elaborare la richiesta nel passaggio 7 e non
restituisce HTTP 503
(UNAVAILABLE
). Al contrario, il server dell'integratore dovrebbe
elaborare la richiesta e restituire l'approvazione con messaggi appropriati. Tieni presente che mentre
il sistema è UNAVAILABLE
Google potrebbe effettuare richieste ripetute simili a
passaggio 2. Ogni richiesta dovrebbe generare un messaggio simile al passaggio 3.
Infine, verranno eseguiti i passaggi n. 6 e n. 7.
Esempio 3: il messaggio ripetuto non corrisponde al messaggio iniziale a causa di un errore di recupero
Scenario:
- Google invia una richiesta all'integratore.
- L'integratore server riceve questa richiesta e la elabora correttamente.
- Il server di Google si spegne prima di ricevere la risposta nel passaggio 2.
- Viene ripristinata la corrente del server di Google e tenta di inviare la stessa richiesta ma sfortunatamente alcuni parametri sono diversi.
Risultato:
In questo caso l'integratore server deve rispondere con un 412
HTTP
(PRECONDITION FAILED
) che indica a Google che è presente
in questo sistema.