توضّح هذه الصفحة رموز الخطأ الأساسية التي يجب عرضها في ردود واجهة برمجة التطبيقات عند التكامل مع Google باستخدام بروتوكول Universal Commerce Protocol (UCP). تضمن رموز الخطأ المتسقة التواصل الواضح وتساعد Google في التعامل مع السيناريوهات المختلفة بشكل مناسب.
عند حدوث خطأ في النشاط التجاري، يجب أن تعرض واجهة برمجة التطبيقات رسالة استجابة تتضمّن رمز الحالة 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: يشير إلى أنّه تعذّر إكمال العملية المطلوبة. من المحتمل أنّ على المنصة أو المستخدم اتّخاذ إجراء وإعادة المحاولة. يُرجى الاطّلاع على مواصفات message-error.- يتم تحديد طبيعة الخطأ النهائية من خلال الحقل
severity(unrecoverableأوrecoverable)، وليس الخطأcode.
- يتم تحديد طبيعة الخطأ النهائية من خلال الحقل
warning: يشير إلى أنّه لم يتم حظر العملية، ولكن هناك شيء جدير بالملاحظة يجب إبلاغ المستخدم به. لن يؤدي ذلك إلى إيقاف العملية، بل سيوفر سياقًا مهمًا. راجِع مواصفات رسائل التحذير.
مرجع رمز الخطأ
| رمز الخطأ | النوع المقترَح | الوصف |
|---|---|---|
out_of_stock |
خطأ | العنصر غير متوفّر. يؤدي ذلك عادةً إلى ucp.status: “error”. استخدِم الحقل path للإشارة إلى فهرس السلعة في عمليات الدفع التي تتضمّن سلعًا متعددة. اطّلِع على المثال أدناه. |
item_unavailable |
خطأ | تعذَّر العثور على العنصر. يؤدي ذلك عادةً إلى ظهور ucp.status: “error” لهذه الأخطاء المرتبطة بالمنتجات. |
item_ineligible |
خطأ | يتوفّر المنتج ولكن لا يمكن شراؤه باستخدام نظام الدفع الموحّد. |
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
في واجهة REST API، يجب عرض هذا الخطأ مع رمز حالة HTTP 401.
{
"type": "error",
"severity": "requires_buyer_review",
"code": "identity_required",
"content": "User identity is required to access order history."
}
insufficient_scope
في واجهة REST API، يجب عرض هذا الخطأ مع رمز حالة 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."
}