Детали оплаты по столу
Подробности режима Pay by Table. Здесь — детали алгоритмов и админ-функций.
Алгоритм выбора скидки
При выборе скидки для заказа Pay by Table:
| Алгоритм | Что значит |
|---|---|
bonuses | Бонусные скидки (из баланса клиента). |
bonuses_fixed | Фиксированная бонусная скидка. |
category | Групповая скидка по категории товара. |
Расчёт выполняется PayByTableDiscountMath::applyDiscount() — percent или fixed.
Коррекция скидки
Настройка table_correct_discount:
- При
yesсумма скидки уменьшается на 1 рубль. - Защита от округления iiko (чтобы заказ «прошёл»).
Блокировка бонусов
table_enable_spend_bonuses_blocking:
- После первой оплаты списание бонусов блокируется на 1 час.
- Хранится в user meta
blocking_bonuses_payment(TTL 1 час). - Предотвращает повторное списание при повторной оплате/частичной оплате.
Действия заказа (admin)
В карточке заказа WC (pay-by-table) — 5 кастомных действий:
| Действие | Назначение |
|---|---|
try_table_payment | Попытать платёж (повторить). |
try_table_customer | Отправить данные гостя в iiko. |
refresh_order_info | Обновить информацию заказа из iiko. |
force_send_payment | Принудительно отправить платёж в iiko. |
clear_this_from_queue | Убрать заказ из очереди платежей. |
Колонки заказа (admin)
В списке заказов WC добавляются колонки:
- table — номер стола.
- order_num — номер заказа в iiko.
- discounts — применённые скидки.
Фоновая отправка платежа
Платёж и гость отправляются в iiko асинхронно:
- Очередь
payments_queue. BackgroundSendPayment(background process).- Cron
WP_Cron_Runner('pay_by_table')(интервалiiko_pay_by_table_time).
Почему асинхронно
Экран успеха показывается гостю сразу после оплаты банком. Отправка в iiko идёт в фоне с ретраями — надёжно и быстро.
iiko API (для Pay by Table)
| Метод | Назначение |
|---|---|
init_by_table | Инициализация по столу. |
get_orders_by_table | Получение заказов по столу. |
add_payments_to_order_table | Добавление платежей. |
add_customer_to_order | Добавление гостя. |
get_status_command | Статус. |
get_deliveries_history | История доставок. |
Meta заказа (Pay by Table)
| Meta | Назначение |
|---|---|
table | UUID стола. |
order_num | Номер заказа iiko. |
order_sum | Сумма. |
discount, user_discount | Скидки. |
correlationId, correlationStatus | Корреляция платежа. |
CustomerCorrelationId, CustomerCorrelationStatus | Корреляция гостя. |
tryCounter | Счётчик попыток. |
posId | ID POS-терминала. |
Return URL
Фильтр woocommerce_get_return_url подменяет return URL после оплаты — гость возвращается на правильную страницу успеха Pay by Table.