Оплата в модели онлайн-магазина Битрикс24 — это отдельная сущность внутри заказа. Один заказ может иметь несколько оплат разными платёжными системами, и у каждой свой статус. За управление ими отвечает группа методов sale.payment, а признак оплаты хранится в поле paid.
Место оплаты в модели заказа
Заказ Битрикс24 (sale.order) декомпозируется на составляющие: корзина (sale.basketitem), отгрузки (sale.shipment) и оплаты (sale.payment). Оплата описывает, чем и на какую сумму покупатель гасит заказ.
- Один заказ может содержать несколько оплат — например, часть бонусами, часть картой.
- Каждая оплата привязана к платёжной системе через
paySystemId. - Статус оплаты выражается булевым флагом
paid(Y/N), а не набором произвольных статусов.
sale.order.get в поле price.Методы группы sale.payment
Группа реализует привычный CRUD:
sale.payment.add— создать оплату для заказа;sale.payment.get— получить по id;sale.payment.list— выборка сfilter,select,order;sale.payment.update— изменить оплату, в том числе отметить как оплаченную;sale.payment.delete— удалить оплату;sale.payment.getfields— получить список полей с их атрибутами (обязательность, доступность на запись).
Список доступных платёжных систем портала получают через sale.paysystem.list, а типы плательщиков — через sale.persontype.list.
Ключевые поля оплаты
| Поле | Назначение |
|---|---|
| id | Идентификатор оплаты |
| orderId | Заказ, к которому относится оплата |
| paySystemId | Платёжная система (из sale.paysystem.list) |
| sum | Сумма оплаты |
| currency | Валюта |
| paid | Признак оплаты: Y — оплачено, N — нет |
| datePaid | Дата и время отметки об оплате |
| accountNumber | Номер счёта оплаты |
| payReturned | Признак возврата средств (Y/N) |
| responsibleId | Ответственный сотрудник |
| comments | Комментарий к оплате |
datePaid и запускает связанные механики (например, пересчёт статуса заказа). Не выставляйте флаг вручную, если оплату должна подтверждать платёжная система.Примеры запросов
Создание оплаты картой на 3500 рублей для заказа 145:
POST https://portal.bitrix24.ru/rest/1/xxxxx/sale.payment.add.json
{ "fields": { "orderId": 145, "paySystemId": 3, "sum": 3500, "currency": "RUB" } }Отметка оплаты как оплаченной:
sale.payment.update?id=210&fields[paid]=YВыборка неоплаченных оплат за период:
sale.payment.list?filter[=paid]=N&filter[>=dateBill]=2026-07-01&select[]=id&select[]=orderId&select[]=sumОформление возврата:
sale.payment.update?id=210&fields[payReturned]=Y
Логика статусов и оплаты
В отличие от статуса заказа (который может иметь много значений из справочника sale.status), состояние оплаты бинарно: оплачено или нет. Развёрнутую картину дают связанные поля:
paid=Yи заполненныйdatePaid— оплата подтверждена;payReturned=Y— деньги возвращены покупателю;paySystemId— какой канал использовался.
Статус заказа в целом хранится отдельно в sale.order (поле statusId). Часто интеграции автоматически меняют статус заказа при поступлении оплаты — эту связку можно реализовать по событию или в обработчике вебхука.
События и вебхуки об оплате
Чтобы реагировать на оплату из внешней системы, подписывайтесь на онлайн-события через sale.* или используйте события заказа. Полезные подходы:
- Исходящие вебхуки. При изменении оплаты Битрикс24 может отправить уведомление на ваш URL — вы забираете
idи запрашиваете детали черезsale.payment.get. - Периодический опрос. Резервный вариант — регулярный
sale.payment.listс фильтромpaid=Nи последующей сверкой. - Идемпотентность. Обрабатывайте одно и то же событие оплаты один раз: сохраняйте признак обработки по
idоплаты.
Частые ошибки и права
Что чаще всего ломает интеграцию оплат:
- Нет права sale. Методы группы требуют разрешения
saleдля вебхука или приложения. - Неверный paySystemId. Идентификатор должен существовать на портале — проверяйте через
sale.paysystem.list. - Рассинхрон сумм. Сумма оплат не сверяется с итогом заказа автоматически, контролируйте это на своей стороне.
- Ручной paid при активной ПС. Если оплату подтверждает платёжный шлюз, ручная отметка может конфликтовать с колбэком.
Итог
Оплата в Битрикс24 — самостоятельная сущность заказа с ключевыми полями orderId, paySystemId, sum и бинарным статусом paid. Управляется группой sale.payment, а связь с платёжными системами идёт через sale.paysystem.list. Отдельно живёт статус самого заказа — их синхронизацию строит интегратор.
Чтобы оплаты из внешнего сайта, эквайринга и 1С надёжно доходили до CRM без задвоений и рассинхрона сумм, нужна аккуратная обработка событий и идемпотентность. Мы разрабатываем такие интеграции с Битрикс24 и сопровождаем их под SLA.
Частые вопросы
Может ли у заказа быть несколько оплат?
Да, sale.payment позволяет создать несколько оплат для одного заказа — например, часть бонусами, часть картой. Каждая оплата имеет свою платёжную систему и сумму.
Где хранится статус оплаты?
В поле paid со значениями Y (оплачено) и N (не оплачено). Дата подтверждения фиксируется в datePaid, а факт возврата — в payReturned.
Как связать оплату с платёжной системой?
Через поле paySystemId, которое должно указывать на идентификатор из справочника sale.paysystem.list. Неверный id приведёт к ошибке при создании оплаты.
Как отметить заказ оплаченным через REST?
Вызовите sale.payment.update, установив fields[paid]=Y для нужной оплаты. Битрикс24 зафиксирует datePaid и запустит связанные механики.
Отличается ли статус оплаты от статуса заказа?
Да. Оплата имеет бинарный признак paid, а заказ хранит статус в поле statusId из справочника sale.status. Их синхронизацию настраивают отдельно.
Как обрабатывать возврат средств?
Установите payReturned=Y у соответствующей оплаты методом sale.payment.update. Это фиксирует факт возврата денег покупателю.
Какие права нужны для sale.payment?
Вебхуку или приложению требуется право sale (Онлайн-магазин). Без него все методы группы sale.payment вернут ошибку доступа.
Поможем с настройкой и поддержкой Для разработчиков
Поможем с настройкой, доработкой и поддержкой Для разработчиков.