На этой странице описаны канонические коды ошибок, которые необходимо возвращать в ответах API при интеграции с Google с использованием протокола Universal Commerce Protocol (UCP). Единые коды ошибок обеспечивают четкую коммуникацию и помогают Google корректно обрабатывать различные сценарии.
При возникновении бизнес-ошибки ваш API должен возвращать ответное сообщение, содержащее соответствующий code из таблицы. Для некоторых кодов ошибок рекомендуется использовать определенную структуру JSON для массива messages в ответе. Примеры приведены в разделе « Примеры кодов ошибок» под таблицей. В этих примерах следует использовать поле path для предоставления более подробной информации о местоположении ошибки в объекте запроса или ответа.
Обработка ошибок
Способ сообщения об ошибках зависит от типа ошибки:
Ошибки протокола/сервера:
- Для таких проблем, как некорректные запросы, сбои аутентификации или недоступность сервера, используйте стандартные коды состояния HTTP (например, 4xx для ошибок клиента, 5xx для ошибок сервера).
- Для получения более подробной информации обратитесь к спецификации UCP .
Ошибки/предупреждения бизнес-логики:
- Возвращает HTTP-код 200 OK .
- Опишите проблему в массиве
messagesв теле JSON-ответа. - Каждый объект в массиве
messagesдолжен включать в себя:-
type:"error"или"warning" -
code: Стандартизированный код из данного руководства. Не используйте общие или нераспознанные коды, такие как"invalid". -
content: описание, понятное человеку. -
severity: Обязательно для заполнения, еслиtype—"error". Это поле явно указывает, является ли ошибка критической (unrecoverable) или позволяет предложить покупателю исправить проблему (recoverable), вместо того чтобы полагаться на сам код ошибки.
-
Типы сообщений: ошибка и предупреждение.
Поле type в массиве сообщений указывает на серьезность проблемы. UCP определяет два основных типа:
-
error: указывает на то, что запрошенная операция не может быть выполнена. Платформе или пользователю, вероятно, потребуется предпринять действия и повторить попытку. См. спецификацию message-error .- Критический характер ошибки определяется полем
severity(unrecoverableилиrecoverable), а неcodeошибки.
- Критический характер ошибки определяется полем
-
warning: Указывает на то, что операция не была заблокирована, но есть важная информация, которую следует сообщить пользователю. Это не останавливает процесс, но предоставляет важный контекст. См. спецификацию message-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
В 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."
}