Kode error

Halaman ini menguraikan kode error kanonis yang harus Anda kembalikan dalam respons API saat berintegrasi dengan Google menggunakan Universal Commerce Protocol (UCP). Kode error yang konsisten memastikan komunikasi yang jelas dan membantu Google menangani berbagai skenario dengan tepat.

Saat terjadi error bisnis, API Anda harus menampilkan pesan respons yang mencakup code yang sesuai dari tabel. Untuk beberapa kode error, struktur JSON tertentu direkomendasikan untuk array messages dalam respons. Contoh ini disediakan di bagian Contoh kode error di bawah tabel. Dalam contoh ini, Anda harus menggunakan kolom path untuk memberikan informasi yang lebih spesifik tentang lokasi error dalam objek permintaan atau respons.

Penanganan Error

Cara melaporkan error bergantung pada jenis error:

  • Error Protokol/Server:

    • Gunakan kode status HTTP standar (misalnya, 4xx untuk error klien, 5xx untuk error server) untuk masalah seperti permintaan yang salah format, kegagalan autentikasi, atau server tidak tersedia.
    • Lihat Spesifikasi UCP untuk mengetahui detailnya.
  • Error/Peringatan Logika Bisnis:

    • Menampilkan status HTTP 200 OK. Hal ini mencakup penolakan pembayaran dan penolakan penipuan, meskipun gateway pembayaran hilir Anda menampilkan error 4xx atau 5xx.
    • Jelaskan masalah dalam array messages di isi respons JSON.
    • Setiap objek dalam array messages harus menyertakan:
      • type: "error" atau "warning"
      • code: Kode standar dari panduan ini. Jangan gunakan kode umum atau tidak dikenal seperti "invalid".
      • content: Deskripsi yang dapat dibaca manusia.
      • severity: Diperlukan jika type adalah "error". Kolom ini secara eksplisit menunjukkan apakah error bersifat fatal (unrecoverable) atau memungkinkan Anda meminta pembeli untuk memperbaiki masalah (recoverable), bukan mengandalkan kode error itu sendiri.

Jenis pesan: Error versus peringatan

Kolom type dalam array pesan menunjukkan tingkat keparahan masalah. UCP menentukan dua jenis utama:

  • error: Menunjukkan bahwa operasi yang diminta tidak dapat diselesaikan. Platform atau pengguna mungkin perlu mengambil tindakan dan mencoba lagi. Lihat spesifikasi message-error.
    • Sifat terminal error ditentukan oleh kolom severity (unrecoverable atau recoverable), bukan error code.
  • warning: Menunjukkan bahwa operasi tidak diblokir, tetapi ada sesuatu yang penting yang harus dikomunikasikan kepada pengguna. Hal ini tidak menghentikan proses, tetapi memberikan konteks penting. Lihat spesifikasi message-warning.

Referensi kode error

Kode error Jenis yang direkomendasikan Deskripsi
out_of_stock Error Item tidak tersedia. Hal ini biasanya menghasilkan ucp.status: “error”. Gunakan kolom path untuk menunjukkan indeks item dalam checkout multi-item. Lihat contoh di bawah.
item_unavailable Error Item tidak dapat ditemukan. Hal ini biasanya menghasilkan ucp.status: “error” untuk error terkait item ini.
item_ineligible Error Item ada, tetapi tidak dapat dibeli menggunakan UCP.
quantity_invalid_limit_exceeded Error Jumlah yang diminta melebihi batas yang diizinkan. Lihat contoh di bawah.
quantity_invalid_minimum_not_met Error Jumlah yang diminta lebih rendah dari jumlah minimum yang diperlukan.
totals_changed Peringatan Harga atau total lainnya telah berubah sejak langkah terakhir. Gunakan kolom path untuk menunjukkan total yang berubah. Lihat contoh di bawah.
totals_invalid_minimum_not_met Error Nilai pesanan tidak memenuhi persyaratan minimum.
missing_buyer_info Error Informasi pembeli yang diperlukan tidak ada. Gunakan kolom path untuk menentukan kolom yang tidak ada. Lihat contoh di bawah.
address_undeliverable Error Ini adalah kode error UCP standar. Gunakan kolom path untuk menunjukkan tujuan tertentu atau item yang dilarang. Lihat contoh di bawah.
address_unverifiable Error Alamat yang diberikan tidak dapat diverifikasi. Gunakan kolom path untuk menunjukkan apakah alamat tersebut adalah alamat penagihan atau pengiriman. Lihat contoh di bawah.
missing_fulfillment_info Error Informasi pemenuhan pesanan yang diperlukan tidak ada. Gunakan kolom path untuk menentukan kolom yang tidak ada.
eligibility_invalid Error Pengguna atau pesanan tidak memenuhi syarat untuk tindakan tersebut. Ini adalah kode error UCP standar. Gunakan kolom path untuk detailnya.
discount_code_invalid Peringatan Kode diskon tidak valid. Kode tidak ditemukan atau format salah.
discount_code_expired Peringatan Masa berlaku kode diskon telah berakhir.
discount_code_already_applied Peringatan Kode diskon sudah diterapkan.
discount_code_combination_disallowed Peringatan Kode diskon tidak dapat digabungkan dengan penawaran lainnya.
discount_code_user_not_logged_in Peringatan Pengguna harus sedang login untuk menggunakan kode diskon.
discount_code_user_ineligible Peringatan Pengguna tidak memenuhi syarat untuk menggunakan kode diskon.
missing_billing_info Error Informasi penagihan yang diperlukan tidak ada. Gunakan kolom path untuk menentukan kolom alamat penagihan yang tidak ada. Lihat contoh di bawah.
identity_required Error Identitas pengguna diperlukan untuk operasi yang diminta, tetapi tidak ada, tidak valid, telah berakhir, atau tidak dapat diverifikasi. Untuk REST, gunakan kode status 401. Lihat contoh di bawah.
insufficient_scope Error Token identitas pengguna valid, tetapi tidak memiliki cakupan yang diperlukan oleh operasi. Untuk REST, gunakan kode status 403. Lihat contoh di bawah.
payment_declined Error Pembayaran ditolak oleh penerbit kartu atau bank. Alasannya dapat mencakup dana tidak mencukupi, dugaan penipuan, atau masalah kartu. Lihat contoh di bawah.
payment_failed Error Pembayaran gagal karena masalah teknis selama pemrosesan—seperti error jaringan, waktu tunggu gateway habis, atau masalah integrasi—yang mencegah bank mencapai keputusan.
payment_ineligible Error Metode pembayaran yang dipilih tidak diterima. Cocok untuk kasus saat pengguna perlu mencoba metode pembayaran lain.
rejected_for_fraud Error Pesanan ditolak karena diduga penipuan. Lihat contoh di bawah.

Contoh kode error

Bagian ini memberikan contoh JSON untuk array messages untuk kode error tertentu.

out_of_stock

Checkout satu item:

{
  "type": "error",
  "severity": "unrecoverable",
  "code": "out_of_stock",
  "content": "Unfortunately, the item 'Example Product 1' is out of stock."
}

Pembayaran multi-item:

Gunakan kolom path untuk menunjukkan indeks item tertentu yang kehabisan stok.

{
  "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

Pembatasan tingkat pesanan (misalnya, kode pos tidak didukung):

{
  "type": "error",
  "severity": "recoverable",
  "code": "address_undeliverable",
  "content": "Delivery is not supported for the provided zipcode."
}

Pembatasan tingkat item:

Gunakan kolom path untuk menunjukkan item tertentu yang tidak dapat dikirim ke tujuan yang dipilih (misalnya, larangan khusus negara bagian).

{
  "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

Alamat penagihan:

{
  "type": "error",
  "severity": "recoverable",
  "code": "address_unverifiable",
  "path": "$.payment.instruments[0].billing_address",
  "content": "Invalid billing address. Update the address before trying again."
}

Alamat pemenuhan pesanan:

{
  "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

Gunakan kolom path untuk menentukan kolom yang tidak ada dalam alamat penagihan.

{
  "type": "error",
  "severity": "recoverable",
  "code": "missing_billing_info",
  "path": "$.payment.instruments[0].billing_address.street_address",
  "content": "Missing billing street address."
}

identity_required

Di REST API, error ini harus ditampilkan dengan kode status HTTP 401.

{
  "type": "error",
  "severity": "requires_buyer_review",
  "code": "identity_required",
  "content": "User identity is required to access order history."
}

insufficient_scope

Di REST API, error ini harus ditampilkan dengan kode status 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"
}

Error pembayaran

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."
}