בדף הזה מפורטים קודי השגיאה הקנוניים שצריך להחזיר בתגובות ה-API כשמשתמשים ב-Universal Commerce Protocol (UCP) כדי לבצע שילוב עם Google. קודים עקביים של שגיאות מבטיחים תקשורת ברורה ועוזרים ל-Google לטפל בתרחישים שונים בצורה הולמת.
כשמתרחשת שגיאה בעסק, ה-API צריך להחזיר הודעת תגובה שכוללת את code המתאים מהטבלה. לגבי חלק מקודי השגיאה, מומלץ להשתמש במבנה JSON ספציפי למערך messages בתגובה. הדוגמאות האלה מופיעות בקטע דוגמאות לקודי שגיאה שמתחת לטבלה. בדוגמאות האלה, צריך להשתמש בשדה path כדי לספק מידע ספציפי יותר על מיקום השגיאה באובייקט הבקשה או התגובה.
טיפול בשגיאות
אופן הדיווח על שגיאות תלוי בסוג השגיאה:
שגיאות בפרוטוקול או בשרת:
- משתמשים בקודי סטטוס רגילים של HTTP (למשל, 4xx לשגיאות לקוח, 5xx לשגיאות שרת) לבעיות כמו בקשות לא תקינות, כשלים באימות או חוסר זמינות של השרת.
- פרטים נוספים מפורטים במפרט של UCP.
שגיאות או אזהרות של לוגיקה עסקית:
- להחזיר סטטוס HTTP 200 OK. זה כולל דחיות של תשלומים ודחיות של תשלומים בגלל הונאה, גם אם שער התשלומים במורד הזרם מחזיר שגיאת 4xx או 5xx.
- מתארים את הבעיה במערך
messagesבגוף תגובת ה-JSON. - כל אובייקט במערך
messagesחייב לכלול:type:"error"או"warning"-
code: קוד סטנדרטי מהמדריך הזה. אל תשתמשו בקודים כלליים או לא מוכרים כמו"invalid". -
content: תיאור שקריא לאנשים. -
severity: חובה אם הערך שלtypeהוא"error". השדה הזה מציין באופן מפורש אם השגיאה היא סופית (unrecoverable) או מאפשר לכם להציג לקונה הנחיה לתיקון הבעיה (recoverable), במקום להסתמך על קוד השגיאה עצמו.
סוגי הודעות: שגיאה לעומת אזהרה
השדה type במערך ההודעות מציין את חומרת הבעיה. ב-UCP
מוגדרים שני סוגים עיקריים:
-
error: מציין שלא ניתן היה להשלים את הפעולה המבוקשת. המשתמש או הפלטפורמה כנראה יצטרכו לבצע פעולה ולנסות שוב. מפרט הודעת השגיאה- האם השגיאה היא סופית נקבע לפי השדה
severity(unrecoverableאוrecoverable), ולא לפי השגיאהcode.
- האם השגיאה היא סופית נקבע לפי השדה
-
warning: מציין שהפעולה לא נחסמה, אבל יש משהו חשוב שצריך להעביר למשתמש. התהליך לא נעצר, אבל ההסבר מספק הקשר חשוב. מפרט אזהרות לגבי הודעות
הפניה לקוד השגיאה
| קוד שגיאה | סוג מומלץ | תיאור |
|---|---|---|
out_of_stock |
שגיאה | הפריט לא זמין. בדרך כלל התוצאה היא ucp.status: “error”. משתמשים בשדה path כדי לציין את אינדקס הפריט בתהליכי תשלום עם כמה פריטים. דוגמה |
item_unavailable |
שגיאה | לא ניתן למצוא את הפריט. בדרך כלל, השגיאות שקשורות לפריטים מקבלות את הערך ucp.status: “error”. |
item_ineligible |
שגיאה | הפריט קיים אבל אי אפשר לרכוש אותו באמצעות UCP. |
quantity_invalid_limit_exceeded |
שגיאה | הכמות המבוקשת חורגת מהמגבלה המותרת. דוגמה |
quantity_invalid_minimum_not_met |
שגיאה | הכמות המבוקשת נמוכה מהכמות המינימלית הנדרשת. |
totals_changed |
אזהרה | המחיר או סכומים אחרים השתנו מאז השלב האחרון. משתמשים בשדה path כדי לציין איזה סכום כולל השתנה. דוגמה |
totals_invalid_minimum_not_met |
שגיאה | ערך ההזמנה לא מגיע למינימום הנדרש. |
missing_buyer_info |
שגיאה | חסרים פרטים נדרשים של הקונה. משתמשים בשדה path כדי לציין את השדה החסר. דוגמה |
address_undeliverable |
שגיאה | זהו קוד שגיאה רגיל של UCP. משתמשים בשדה path כדי לציין את היעד הספציפי או את הפריט המוגבל. דוגמה |
address_unverifiable |
שגיאה | לא הצלחנו לאמת את הכתובת שציינת. בשדה path מציינים אם זו כתובת למשלוח או לחיוב. דוגמה |
missing_fulfillment_info |
שגיאה | חסר מידע חובה על אספקת המוצר. משתמשים בשדה path כדי לציין את השדה החסר. |
eligibility_invalid |
שגיאה | המשתמש או ההזמנה לא כשירים לפעולה. זהו קוד שגיאה רגיל של UCP. משתמשים בשדה path כדי לציין פרטים ספציפיים. |
discount_code_invalid |
אזהרה | קוד ההנחה לא תקף. הקוד לא נמצא או שהפורמט שלו שגוי. |
discount_code_expired |
אזהרה | פג התוקף של קוד ההנחה. |
discount_code_already_applied |
אזהרה | קוד ההנחה כבר מומש. |
discount_code_combination_disallowed |
אזהרה | אי אפשר לשלב את קוד ההנחה עם מבצעים אחרים. |
discount_code_user_not_logged_in |
אזהרה | כדי להשתמש בקוד ההנחה, המשתמשים צריכים להתחבר לחשבון שלהם. |
discount_code_user_ineligible |
אזהרה | המשתמש לא כשיר לשימוש בקוד ההנחה. |
missing_billing_info |
שגיאה | חסרים פרטי חיוב שחובה לציין. משתמשים בשדה path כדי לציין את השדות החסרים של כתובת לחיוב. דוגמה |
identity_required |
שגיאה | נדרש זיהוי משתמש לפעולה המבוקשת, אבל הוא לא קיים, לא תקין, לא בתוקף או שלא ניתן לאמת אותו. ב-REST, משתמשים בקוד סטטוס 401. דוגמה |
insufficient_scope |
שגיאה | טוקן זהות המשתמש תקין, אבל חסרות בו ההיקפים שנדרשים לפעולה. ב-REST, משתמשים בקוד סטטוס 403. דוגמה |
payment_declined |
שגיאה | התשלום נדחה על ידי מנפיק הכרטיס או הבנק. הסיבות לכך יכולות להיות יתרה לא מספיקה, חשד להונאה או בעיות בכרטיס. דוגמה |
payment_failed |
שגיאה | התשלום נכשל בגלל בעיה טכנית במהלך העיבוד – כמו שגיאה בחיבור לרשת, פסק זמן בשער או בעיה בשילוב – שמנעה מהבנק להגיע להחלטה. |
payment_ineligible |
שגיאה | אמצעי התשלום שנבחר לא מתקבל. מתאים למקרים שבהם המשתמש צריך לנסות אמצעי תשלום אחר. |
rejected_for_fraud |
שגיאה | ההזמנה נדחתה בגלל חשד להונאה. דוגמה |
דוגמאות לקודי שגיאה
בקטע הזה מופיעות דוגמאות ל-JSON של מערך messages עבור קודי שגיאה ספציפיים.
out_of_stock
תהליך תשלום על פריט בודד:
{
"type": "error",
"severity": "unrecoverable",
"code": "out_of_stock",
"content": "Unfortunately, the item 'Example Product 1' is out of stock."
}
תהליך תשלום על כמה פריטים:
בשדה path מציינים את האינדקס של הפריט הספציפי שאין במלאי.
{
"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
הגבלה ברמת ההזמנה (למשל, מיקוד לא אפשרי):
{
"type": "error",
"severity": "recoverable",
"code": "address_undeliverable",
"content": "Delivery is not supported for the provided zipcode."
}
הגבלה ברמת הפריט:
משתמשים בשדה path כדי לציין פריט מסוים שלא ניתן לשלוח ליעד שנבחר (למשל, איסורים שחלים במדינה מסוימת).
{
"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
כתובת חיוב:
{
"type": "error",
"severity": "recoverable",
"code": "address_unverifiable",
"path": "$.payment.instruments[0].billing_address",
"content": "Invalid billing address. Update the address before trying again."
}
כתובת לאספקה:
{
"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
משתמשים בשדה path כדי לציין שדות חסרים בכתובת לחיוב.
{
"type": "error",
"severity": "recoverable",
"code": "missing_billing_info",
"path": "$.payment.instruments[0].billing_address.street_address",
"content": "Missing billing street address."
}
identity_required
ב-API בארכיטקטורת REST, השגיאה הזו צריכה להיות מוחזרת עם קוד סטטוס של HTTP 401.
{
"type": "error",
"severity": "requires_buyer_review",
"code": "identity_required",
"content": "User identity is required to access order history."
}
insufficient_scope
ב-API בארכיטקטורת REST, השגיאה הזו צריכה להיות מוחזרת עם קוד סטטוס של 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."
}
rejected_for_fraud
{
"type": "error",
"severity": "recoverable",
"code": "rejected_for_fraud",
"path": "$.payment.instruments[0]",
"content": "The order was rejected due to suspected fraud. Try a different payment method."
}