gamification.shop.product.order
Scope:
gamificationКто может вызывать: Любой авторизованный пользователь; параметр
userId— только администратор портала. Подробнее: Права доступа
Оформить заказ на товар из магазина бонусов: списать BAL, создать запись заказа, отправить уведомления.
HTTP: POST
Побочные эффекты: списывает BAL у пользователя, уменьшает доступный остаток товара, создаёт запись заказа, запускает бизнес-процесс (если настроен), отправляет уведомления.
Параметры метода
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
id |
int |
да | ID товара (псевдоним: productId) |
offerId |
int |
условно | ID варианта товара (торгового предложения). Обязателен, если у товара есть варианты; для простого товара не передаётся |
siteId |
string |
нет | ID сайта (псевдоним: SITE_ID). По умолчанию — текущий сайт или s1 |
userId |
int |
нет | Только администратор портала. ID покупателя — активного пользователя. По умолчанию — текущий пользователь. Свой ID можно передать любому |
С userId заказ оформляется на покупателя с теми же проверками, что и в магазине интерфейса: доступ покупателя к магазину на сайте, баланс BAL покупателя, остаток товара. Элемент заказа создаётся от покупателя (CREATED_BY), бизнес-процесс согласования запускается для покупателя (целевой пользователь БП).
Для товара с вариантами покупается выбранный вариант: цена и остаток берутся у варианта, в заказ записываются товар (product_id) и вариант (offer_id), а название заказа — «Товар, Вариант».
Возвращаемые данные
result.result — сведения об оформленном заказе:
| Поле | Тип | Описание |
|---|---|---|
id |
int |
ID товара |
name |
string |
Название товара |
offerId |
int |
ID купленного варианта, 0 для простого товара |
offerName |
string |
Название купленного варианта, пустая строка для простого товара |
price |
float |
Списанная сумма BAL (цена варианта или товара) |
balance |
float |
Баланс BAL после списания |
balanceFormatted |
string |
Баланс BAL после списания, отформатированный для вывода |
siteId |
string |
ID сайта |
userId |
int |
ID покупателя |
Обработка ошибок
| Код | Описание |
|---|---|
UNAUTHORIZED |
Пользователь не авторизован |
VALIDATION_ERROR |
Не передан id, userId не целое положительное число |
ACCESS_DENIED |
Нет доступа к магазину на сайте; userId другого пользователя передал не администратор |
USER_NOT_FOUND |
Покупатель не найден или неактивен |
NOT_FOUND |
Товар не найден |
OFFER_REQUIRED |
У товара есть варианты, а offerId не передан |
OFFER_NOT_FOUND |
Вариант с offerId не принадлежит товару |
OFFER_NOT_AVAILABLE |
Вариант недоступен для заказа (неактивен, без цены, закончился) или у товара нет ни одного доступного варианта |
OUT_OF_STOCK |
Товар недоступен для заказа (нет запаса или продажи отключены) |
INSUFFICIENT_BALANCE |
Недостаточно BAL |
Пример запроса (POST)
curl -X POST "https://{портал}/rest/{user_id}/{webhook_code}/gamification.shop.product.order.json" \
-H "Content-Type: application/json" \
-d '{"id": 1110, "offerId": 1111}'
Пример ответа:
{
"result": {
"result": {
"id": 1110,
"name": "Футболка",
"offerId": 1111,
"offerName": "Футболка S красная",
"price": 100,
"balance": 400,
"balanceFormatted": "400",
"siteId": "s1"
},
"total": null,
"next": null,
"error": null
}
}
Пример ошибки, если у товара есть варианты, а offerId не передан:
{
"result": {
"result": null,
"error": {
"code": "OFFER_REQUIRED",
"message": "offerId is required for a product with offers",
"details": {"id": 1110}
}
}
}