L'API respecte un ensemble de normes d'API HTTP et accepte idempotence afin de favoriser un environnement l'intégration.
URL hébergées par Google
La documentation relative à chaque méthode hébergée par Google fournit une URL de base, qui inclut le nom de la méthode et le numéro de la version majeure. L'URL complète est créée. en ajoutant le numéro de compte de l'intégrateur de paiement de l'appelant à la fin. Par exemple, la documentation concernant la méthode d'écho hébergée par Google spécifie l'URL:
https://vgw.googleapis.com/secure-serving/gsp/v1/echo
Si le numéro de compte de l'intégrateur de paiement de l'appelant est INTEGRATOR_1
, il ajoute
à la fin de l'URL pour former:
https://vgw.googleapis.com/secure-serving/gsp/v1/echo/INTEGRATOR_1
URL hébergées par le partenaire
La documentation relative à chaque méthode d'API hébergée par un partenaire fournit une URL de base, qui
inclut le nom de la méthode et le numéro de la version majeure. Vous ne devez pas inclure le
ID de compte de l'intégrateur de paiement (PIAID
)
dans les URL que vous hébergez.
Environnements de bac à sable et de production
Google héberge les API Standard Payments dans le bac à sable (à des fins de développement à des fins de test) et de production. Requêtes dans l'environnement de bac à sable Google n'entraînent aucune responsabilité financière réelle. Le bac à sable et environnements de production sont complètement distincts et ne partagent pas les informations de transaction.
Google s'attend à ce que votre bac à sable soit disponible en permanence, car nous utiliserons dans le bac à sable pour tester les modifications et les nouvelles fonctionnalités.
Chemin de base du bac à sable de Google
https://vgw.sandbox.google.com/secure-serving/gsp/
Chemin de base pour l'environnement de production de Google
https://vgw.googleapis.com/secure-serving/gsp/
Ce guide utilisera les points de terminaison de production.
Type de contenu et encodage
Les charges utiles de message utilisant le chiffrement PGP doivent utiliser le type de contenuapplication/octet-stream; charset=utf-8
Les corps de requête PGP
être envoyées en utilisant l'encodage base64url, comme défini dans
rfc4648 §5.
Les charges utiles de message utilisant le chiffrement JWE doivent utiliser le type de contenu
application/jose; charset=utf-8
L'option "Sérialisation compacte"
pris en charge par JWE/JWS gère l'encodage du corps de la requête finale.
Codes d'état HTTP
Les API Payments standards sont conçues pour renvoyer un code d'état HTTP 200
.
pour toutes les requêtes
pouvant être traitées par le serveur. Cela inclut à la fois
des demandes ayant abouti ou refusé du point de vue de l'entreprise ou
logique d'application. Les requêtes qui ne peuvent pas être traitées ne doivent pas entraîner de problème
Code d'état HTTP 200
, car ils représentent une erreur entre Google et le
partenaire. La réponse de l'API doit utiliser l'état HTTP approprié
ci-dessous par un objet ErrorResponse
facultatif.
Erreurs HTTP et raisons | |
---|---|
400 |
BAD REQUEST
Le client a spécifié un argument incorrect. Il peut également être renvoyé si l'opération a été refusée parce que le système n'est pas dans un état requis pour l'exécution de l'opération. Utilisez cette option si les nouvelles tentatives de la requête ne peuvent pas aboutir tant que le système n'est pas à l'état a été explicitement corrigé. Par exemple, si une demande de remboursement échoue pour les raisons suivantes : s'il fait référence à une capture qui n'existe pas, toute nouvelle tentative échouera tant que la capture n'existe pas dans le système d'intégrateur.
|
401 |
UNAUTHORIZED
La requête ne dispose pas d'identifiants d'authentification valides pour opération. Par exemple, des signatures non valides ou inconnues doivent renvoient une erreur 401. |
403 |
FORBIDDEN / PERMISSION DENIED
L'appelant n'a pas l'autorisation d'exécuter l'opération spécifiée. |
404 |
NOT FOUND
Impossible de trouver une entité demandée (paiement ou utilisateur, par exemple). |
409 |
CONFLICT / ABORTED
L'opération a été annulée, généralement en raison d'un problème de simultanéité, tel que échecs de vérification du séquenceur, annulations de transactions, etc. |
412 |
PRECONDITION FAILED
Ce code doit être utilisé lorsqu'une clé d'idempotence est réutilisé avec des paramètres différents. |
429 |
RESOURCE EXHAUSTED / TOO MANY REQUESTS
Une ressource système est épuisée. |
499 |
CANCELLED
L'opération a été annulée (généralement par l'appelant). |
500 |
INTERNAL ERROR
Erreurs internes. Cela signifie que certaines invariantes attendues par le système sous-jacent est défectueux. |
501 |
UNIMPLEMENTED
L'opération n'est ni mise en œuvre, ni compatible, ni activée dans ce service. |
503 |
UNAVAILABLE
Le service est actuellement indisponible. Il s'agit très probablement d'un et peut être corrigée en réessayant. |
504 |
GATEWAY TIMEOUT / DEADLINE EXCEEDED
Le délai a expiré avant la fin de l'opération. Pour les opérations modifier l'état du système, cette erreur peut être renvoyée même si le s'est terminée avec succès. Par exemple, une réponse positive d'un serveur aurait pu être retardé suffisamment longtemps pour que le délai arrive à expiration. |
Impotence des requêtes
L’idempotence des requêtes est une stratégie centrale utilisée dans les paiements standards API utilisées pour garantir que les interactions système entre Google et les partenaires sont robustes et tolérantes aux pannes. Les requêtes idempotentes sont des requêtes qui peuvent pouvant être envoyés plusieurs fois, mais ont le même effet qu'une seule requête. Cette stratégie facilite la cohérence à terme entre les systèmes en rendant les nouvelles tentatives en toute sécurité, ce qui permet à nos systèmes de fusionner pour s'accorder sur les l'état de la ressource.
Notre API exploite l'idempotence pour:
- réduire les problèmes de rapprochement en facilitant la traçabilité de toutes les actions et vérifiables.
- empêcher les conditions de concurrence en veillant à ce que plusieurs requêtes identiques provenant d'un même client n'entraînent pas un état final différent.
- minimiser l'état en permettant aux requêtes d'être interprétées individuellement, pour améliorer les performances et le débit en supprimant la charge serveur causée par la conservation des données.
- éviter d'avoir à ajouter des champs supplémentaires pour indiquer s'il s'agit d'une nouvelle tentative ;
Exemples
Exemple 1: Connexion perdue avant réception de la réponse
Scénario :
- Google envoie une requête à l'intégrateur.
- Le serveur d'intégration reçoit cette requête et la traite correctement.
- Le serveur de Google n'est plus alimenté en électricité avant de recevoir la réponse de l'étape 2.
- L'alimentation du serveur de Google est rétablie et la même demande est envoyée
avec les mêmes paramètres (ID et détails de la requête, mais mis à jour)
requestTimestamp
) au serveur de l'intégrateur.
Résultat :
Dans ce cas, le serveur intégrateur doit répondre avec la même réponse que celle fournie à l'adresse
Étape 2, car tous les paramètres, à l'exception de responseTimestamp
, sont identiques.
L'effet secondaire ne se produit qu'une seule fois, à l'étape 2. L'étape 4 n'a aucun effet secondaire.
Exemple 2: Requête envoyée à un serveur en cours de maintenance
Scénario :
- La base de données du serveur de l'intégrateur est indisponible pour cause de maintenance.
- Google envoie une requête à l'intégrateur.
- L'intégrateur renvoie correctement le code d'état
UNAVAILABLE
. - Le serveur de Google reçoit la réponse et planifie une nouvelle tentative.
- La base de données du serveur de l'intégrateur est remise en ligne.
- Google renvoie la demande de l'étape 2 (mêmes ID et détails de la demande).
mais a mis à jour
requestTimestamp
). Notez que les identifiants des deux requêtes doit être identique. - Le serveur d'intégration reçoit la requête et renvoie un code d'état OK ainsi que avec une réponse complète.
Résultat :
Dans ce cas, le serveur d'intégration doit traiter la requête à l'étape 7 et ne doit pas
renvoient HTTP 503
(UNAVAILABLE
). À la place, le serveur d'intégration
traiter la demande et renvoyer
OK avec le message approprié. Notez que même si
le système est UNAVAILABLE
. Google peut effectuer des requêtes répétées similaires à
l'étape 2. Chaque demande doit entraîner l'affichage d'un message semblable à celui de l'étape 3.
Finalement, les étapes 6 et 7 auront lieu.
Exemple 3: Le message faisant l'objet d'une nouvelle tentative ne correspond pas au message initial en raison d'une erreur de récupération
Scénario :
- Google envoie une requête à l'intégrateur.
- Le serveur d'intégration reçoit cette requête et la traite correctement.
- Le serveur de Google n'est plus alimenté en électricité avant de recevoir la réponse de l'étape 2.
- L'alimentation du serveur de Google est rétablie et tente d'envoyer la même demande mais malheureusement, certains paramètres sont différents.
Résultat :
Dans ce cas, le serveur d'intégration doit répondre avec un code HTTP 412
(PRECONDITION FAILED
), ce code d'erreur indique à Google qu'un
dans ce système.