Cette page récapitule les codes d'erreur canoniques que vous devez renvoyer dans vos réponses d'API lors de votre intégration à Google à l'aide du protocole Universal Commerce Protocol (UCP). L'utilisation de codes d'erreur cohérents garantit une communication claire et aide Google à traiter chaque scénario de manière appropriée.
Lorsqu'une erreur de logique métier se produit, votre API doit renvoyer un message de réponse incluant le code approprié figurant dans le tableau. Pour certains codes d'erreur, une structure JSON spécifique est recommandée pour le array messages de la réponse. Ces exemples sont fournis dans la section Exemples de codes d'erreur située sous le tableau. Dans ces exemples, vous devez utiliser le champ path pour fournir des informations plus spécifiques sur l'emplacement de l'erreur dans l'objet de requête ou de réponse.
Gestion des erreurs
La procédure à suivre pour signaler des erreurs dépend du type d'erreur :
Erreurs de protocole ou du serveur :
- Utilisez des status codes HTTP standards (par exemple, 4xx pour les erreurs client, 5xx pour les erreurs du serveur) pour les problèmes tels que les requêtes incorrectes, les échecs d'authentification ou l'indisponibilité du serveur.
- Pour en savoir plus, consultez la spécification UCP.
Erreurs/Avertissements de logique métier :
- Renvoyer un état HTTP 200 OK.
- Décrivez le problème dans le array
messagesdu corps de la réponse JSON. - Chaque objet du array
messagesdoit inclure :type:"error"ou"warning"code: code standardisé issu de ce guide. N'utilisez pas de codes génériques ou non reconnus tels que"invalid".content: description lisible par l'humain.severity: obligatoire lorsquetypeest défini sur"error". Ce champ indique explicitement si l'erreur est définitive (unrecoverable) ou si vous pouvez inviter l'acheteur à corriger le problème (recoverable), ce qui évite d'avoir à se fier uniquement au code d'erreur lui-même.
Types de messages : erreur ou avertissement
Le champ type du array messages indique le niveau de gravité du problème. UCP définit deux types principaux :
error: indique que l'opération demandée n'a pas pu être effectuée. La plate-forme ou l'utilisateur devront probablement effectuer une action et réessayer. Consultez la spécification relative aux erreurs (message-error).- Le caractère définitif d'une erreur est déterminé par le champ
severity(unrecoverableourecoverable), et non par l'erreurcode.
- Le caractère définitif d'une erreur est déterminé par le champ
warning: indique que l'opération n'a pas été bloquée, mais qu'un élément notable doit être communiqué à l'utilisateur. Cela n'arrête pas le processus, mais fournit un contexte important. Consultez la spécification relative aux avertissements (message-warning).
Informations de référence sur les codes d'erreur
| Code d'erreur | Type recommandé | Description |
|---|---|---|
out_of_stock |
Erreur | L'article n'est pas disponible. Cela se traduit généralement par ucp.status: “error”. Utilisez le champ path pour indiquer l'index de l'article dans le cas de paiements multi-articles. Consultez l'exemple ci-dessous. |
item_unavailable |
Erreur | Article introuvable. Cela se traduit généralement par un ucp.status: “error” pour ces erreurs liées aux articles. |
item_ineligible |
Erreur | L'article existe, mais ne peut pas être acheté à l'aide de UCP. |
quantity_invalid_limit_exceeded |
Erreur | La quantité demandée dépasse la limite autorisée. Consultez l'exemple ci-dessous. |
quantity_invalid_minimum_not_met |
Erreur | La quantité demandée est inférieure au minimum requis. |
totals_changed |
Avertissement | Le prix ou d'autres montants totaux ont changé depuis la dernière étape. Utilisez le champ path pour indiquer quel montant total a changé. Consultez l'exemple ci-dessous. |
totals_invalid_minimum_not_met |
Erreur | La valeur de la commande n'atteint pas le montant minimal requis. |
missing_buyer_info |
Erreur | Il manque des informations obligatoires sur l'acheteur. Utilisez le champ path pour indiquer le champ manquant. Consultez l'exemple ci-dessous. |
address_undeliverable |
Erreur | Il s'agit d'un code d'erreur UCP standard. Utilisez le champ path pour indiquer la destination spécifique ou l'article soumis à restriction. Consultez l'exemple ci-dessous. |
address_unverifiable |
Erreur | Impossible de valider l'adresse fournie. Utilisez le champ path pour indiquer s'il s'agit de l'adresse de traitement ou de livraison. Consultez l'exemple ci-dessous. |
missing_fulfillment_info |
Erreur | Il manque des informations obligatoires sur le traitement. Utilisez le champ path pour indiquer le champ manquant. |
eligibility_invalid |
Erreur | L'utilisateur ou la commande ne sont pas éligibles pour l'action. Il s'agit d'un code d'erreur UCP standard. Utilisez le champ path pour apporter des précisions. |
discount_code_invalid |
Avertissement | Le code de réduction n'est pas valide. Le code est introuvable ou son format est incorrect. |
discount_code_expired |
Avertissement | Le code de réduction a expiré. |
discount_code_already_applied |
Avertissement | Le code de réduction a déjà été appliqué. |
discount_code_combination_disallowed |
Avertissement | Le code de réduction n'est pas cumulable avec d'autres offres. |
discount_code_user_not_logged_in |
Avertissement | L'utilisateur doit être connecté pour utiliser le code de réduction. |
discount_code_user_ineligible |
Avertissement | L'utilisateur n'est pas éligible à ce code de réduction. |
missing_billing_info |
Erreur | Il manque des informations obligatoires sur la facturation. Utilisez le champ path pour indiquer les champs manquants dans l'adresse de facturation. Consultez l'exemple ci-dessous. |
identity_required |
Erreur | L'identité de l'utilisateur est requise pour l'opération demandée, mais elle est absente, non valide, expirée ou impossible à vérifier. Pour REST, utilisez le status code 401. Consultez l'exemple ci-dessous. |
insufficient_scope |
Erreur | Le jeton d'identité de l'utilisateur est valide, mais il ne dispose pas du ou des niveaux d'accès requis pour l'opération. Pour REST, utilisez le status code 403. Consultez l'exemple ci-dessous. |
payment_declined |
Erreur | Le paiement a été refusé par l'émetteur de la carte ou la banque. Cela peut être dû à des fonds insuffisants, une suspicion de fraude ou un problème avec la carte. Consultez l'exemple ci-dessous. |
payment_failed |
Erreur | Le paiement a échoué en raison d'un problème technique lors du traitement (tel qu'une erreur réseau, un délai d'expiration de la passerelle ou un problème d'intégration), ce qui a empêché la banque de prendre une décision. |
payment_ineligible |
Erreur | Le mode de paiement sélectionné n'est pas accepté. S'utilise lorsque l'utilisateur doit essayer un autre mode de paiement. |
rejected_for_fraud |
Erreur | La commande a été rejetée pour suspicion de fraude. |
Exemples de codes d'erreur
Cette section présente des exemples JSON pour le array messages associés à des codes d'erreur spécifiques.
out_of_stock
Paiement pour un seul article :
{
"type": "error",
"severity": "unrecoverable",
"code": "out_of_stock",
"content": "Unfortunately, the item 'Example Product 1' is out of stock."
}
Paiement pour plusieurs articles :
Utilisez le champ path pour indiquer l'index de l'article spécifique qui est non disponible.
{
"type": "error",
"severity": "recoverable",
"code": "out_of_stock",
"path": "$.checkout.line_items[1]",
"content": "The item 'Example Product 2' is out of stock. Remove it from your cart to continue."
}
quantity_invalid_limit_exceeded
{
"type": "error",
"severity": "recoverable",
"code": "quantity_invalid_limit_exceeded",
"path": "$.checkout.line_items[0].quantity",
"content": "The requested quantity for 'Example Product 2' exceeds the maximum allowed limit of 5."
}
totals_changed
{
"type": "warning",
"code": "totals_changed",
"path": "$.totals[2]",
"content": "Shipping cost has changed."
}
missing_buyer_info
{
"type": "error",
"severity": "recoverable",
"code": "missing_buyer_info",
"path": "$.buyer.first_name",
"content": "Missing buyer first name."
}
address_undeliverable
Restriction au niveau de la commande (par exemple, code postal non disponible) :
{
"type": "error",
"severity": "recoverable",
"code": "address_undeliverable",
"content": "Delivery is not supported for the provided zipcode."
}
Restriction au niveau de l'article :
Utilisez le champ path pour indiquer un article spécifique qui ne peut pas être livré à la destination choisie (par exemple, en raison d'une interdiction spécifique à un État).
{
"type": "error",
"severity": "recoverable",
"code": "address_undeliverable",
"path": "$.checkout.line_items[1]",
"content": "The item 'Example Product 2' cannot be delivered to the selected address."
}
address_unverifiable
Adresse de facturation :
{
"type": "error",
"severity": "recoverable",
"code": "address_unverifiable",
"path": "$.payment.instruments[0].billing_address",
"content": "Invalid billing address. Update the address before trying again."
}
Adresse de traitement :
{
"type": "error",
"severity": "recoverable",
"code": "address_unverifiable",
"path": "$.fulfillment.methods[0].destinations[0]",
"content": "The fulfillment address couldn't be verified. Update the address and try again."
}
missing_billing_info
Utilisez le champ path pour spécifier les champs manquants dans l'adresse de facturation.
{
"type": "error",
"severity": "recoverable",
"code": "missing_billing_info",
"path": "$.payment.instruments[0].billing_address.street_address",
"content": "Missing billing street address."
}
identity_required
Dans l'API REST, cette erreur doit être renvoyée avec le status code HTTP 401.
{
"type": "error",
"severity": "requires_buyer_review",
"code": "identity_required",
"content": "User identity is required to access order history."
}
insufficient_scope
Dans l'API REST, cette erreur doit être renvoyée avec le status code HTTP 403.
{
"type": "error",
"severity": "requires_buyer_review",
"code": "insufficient_scope",
"content": "This operation requires scopes: dev.ucp.shopping.order:read, dev.ucp.shopping.order:manage"
}
payment_declined
{
"type": "error",
"severity": "recoverable",
"code": "payment_declined",
"path": "$.payment.instruments[0]",
"content": "Payment was declined by the issuer. Try a different payment method or contact your bank."
}