หน้านี้ระบุรหัสข้อผิดพลาดมาตรฐานที่คุณต้องส่งคืนในการตอบกลับ API เมื่อผสานรวมกับ Google โดยใช้ Universal Commerce Protocol (UCP) รหัสข้อผิดพลาดที่สอดคล้องกันช่วยให้การสื่อสารชัดเจนและช่วยให้ 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
กำหนดประเภทหลักๆ ไว้ 2 ประเภท ดังนี้
error: แสดงว่าดำเนินการที่ขอไม่สำเร็จ แพลตฟอร์มหรือผู้ใช้จะต้องดำเนินการและลองอีกครั้ง ดูข้อกำหนดของข้อผิดพลาดของข้อความ- ลักษณะของข้อผิดพลาดที่สิ้นสุดจะกำหนดโดยฟิลด์
severity(unrecoverableหรือrecoverable) ไม่ใช่ข้อผิดพลาดcode
- ลักษณะของข้อผิดพลาดที่สิ้นสุดจะกำหนดโดยฟิลด์
warning: บ่งชี้ว่าระบบไม่ได้บล็อกการดำเนินการ แต่มี สิ่งสำคัญที่ควรแจ้งให้ผู้ใช้ทราบ ซึ่งไม่ได้ หยุดกระบวนการ แต่ให้บริบทที่สำคัญ ดูmessage-warning specification
ข้อมูลอ้างอิงรหัสข้อผิดพลาด
| รหัสข้อผิดพลาด | ประเภทที่แนะนำ | คำอธิบาย |
|---|---|---|
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
ใน 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."
}