Публичная ссылка на оплату решает частую задачу: клиент должен оплатить заказ, не заводя логин и не вспоминая пароль. В 1С-Битрикс это штатный механизм — публичная страница оплаты открывается по номеру заказа и хэшу, а компонент проверяет доступ без авторизации пользователя.
Зачем нужны публичные ссылки на оплату
В B2B и в заказах «по звонку» покупатель редко проходит полный сценарий регистрации. Менеджер оформляет заказ из административной части, а клиенту нужно просто перейти по ссылке и оплатить — без входа в личный кабинет. Публичная ссылка закрывает именно этот разрыв.
Типичные ситуации, где она незаменима:
- заказ создан менеджером в админке, у клиента нет и не будет пароля;
- оплату согласовали в мессенджере или по телефону — нужна короткая рабочая ссылка;
- счёт выставлен позже, чем оформлен заказ (постоплата, оплата после проверки менеджером);
- ссылку удобно вставить прямо в письмо-уведомление о заказе.
Как устроена ссылка: номер заказа и хэш
Публичная ссылка формируется из двух обязательных частей — идентификатора заказа и секретного хэша. Схема выглядит так:
/personal/order/payment/?ORDER_ID=1024&HASH=e2f9c1a8b7...
Вместо внутреннего ORDER_ID часто используют публичный номер заказа — ACCOUNT_NUMBER, который виден клиенту в письмах и на странице «спасибо». Хэш вычисляется методом объекта заказа и уникален для каждого заказа:
ACCOUNT_NUMBER— «человеческий» номер заказа (может отличаться отID, если включена нумерация через модульmain.numerator);HASH— результат\Bitrix\Sale\Order::getHash(), длинная псевдослучайная строка;- компонент оплаты сверяет полученный хэш с хэшем заказа и только при совпадении открывает страницу.
Именно связка «номер + хэш» делает ссылку безопасной: угадать корректный хэш к конкретному заказу практически невозможно, а без него голый номер бесполезен.
Компонент оплаты без авторизации
За публичную страницу отвечает компонент bitrix:sale.order.payment, размещённый на странице /personal/order/payment/ стандартного шаблона eshop. В отличие от детальной страницы заказа (bitrix:sale.order.detail), он умеет работать с анонимным посетителем.
Ключевые моменты настройки:
- компонент принимает
ORDER_ID/ACCOUNT_NUMBERиHASHизGET-параметров; - при валидном хэше пользователь не обязан быть авторизован — проверка идёт по хэшу, а не по сессии;
- на странице выводятся платёжные системы, привязанные к заказу, и кнопка перехода к оплате;
- после успешной оплаты срабатывает штатное событие
OnSaleOrderPaidи заказ помечается как оплаченный.
/personal/order/payment/ отсутствует, её создают из готового шаблона магазина или добавляют компонент вручную. Путь до страницы задаётся параметром PATH_TO_PAYMENT в связанных компонентах оформления и детали заказа.Как передать ссылку клиенту
Ссылку можно отдать покупателю несколькими способами — вручную и автоматически. Самый надёжный вариант для потока заказов — вшить её в почтовые шаблоны.
| Способ | Где формируется | Когда удобно |
|---|---|---|
| Вручную из админки | Карточка заказа в разделе «Магазин → Заказы» | Разовая отправка в чат или мессенджер |
| В письме-уведомлении | Шаблон почтового события (например, при смене статуса) | Массовый поток, постоплата |
| Через API/скрипт | Order::getHash() + сборка URL в коде | Интеграции, свои сценарии рассылок |
В почтовом шаблоне ссылку собирают из полей заказа: подставляют #ORDER_ACCOUNT_NUMBER# (или ID) и заранее подготовленный хэш. Правильнее генерировать хэш в обработчике почтового события и передавать его как дополнительное поле — так ссылка гарантированно совпадёт с текущим состоянием заказа.
Безопасность публичных ссылок
Публичная ссылка — это, по сути, разовый пропуск к оплате конкретного заказа. Чтобы он оставался безопасным, важно соблюдать несколько правил.
- Только HTTPS. Ссылка с хэшем не должна ходить по открытому
http— иначе хэш можно перехватить. - Не логируйте полный URL. Хэш в логах веб-сервера или в аналитике фактически раскрывает доступ к заказу.
- Ограничивайте область. Компонент
sale.order.paymentоткрывает только оплату, но не редактирование состава и не персональные данные из других заказов. - Инвалидируйте после оплаты. Оплаченный заказ страница уже не даст оплатить повторно — это нормальное поведение, на него и стоит опираться.
При повышенных требованиях к безопасности хэш дополняют сроком жизни: обработчик проверяет дату создания заказа или отдельное поле и отклоняет устаревшие ссылки, предлагая запросить новую.
Типичные проблемы и диагностика
Большинство сбоев с публичными ссылками сводится к нескольким причинам. Проверяйте их по порядку.
- «Заказ не найден» или редирект на авторизацию. Обычно страница оплаты не создана или в неё вставлен
sale.order.detailвместоsale.order.payment. - Хэш не совпадает. Ссылку собрали из устаревшего или неверного значения — сверьте с
Order::getHash()для этого заказа. - Нет платёжных систем на странице. К заказу не привязана оплата или платёжная система ограничена по способу оплаты/группе пользователя.
- Ссылка «протухла». Сработал ваш собственный контроль срока жизни — нужно перевыпустить ссылку.
Полезно проверить и права: анонимному посетителю (группа «Все пользователи») должен быть открыт доступ к странице оплаты. Если действует ограничение прав к заказам по статусам, убедитесь, что публичная оплата не блокируется этими правилами.
Итог
Публичная ссылка на оплату в 1С-Битрикс — это связка номера заказа и хэша, которую обрабатывает компонент bitrix:sale.order.payment на странице /personal/order/payment/. Она позволяет клиенту оплатить заказ без авторизации, аккуратно ограничивая доступ строго одним заказом и только действием оплаты. Ключ к надёжности — генерировать хэш из актуального состояния заказа, отдавать ссылку по HTTPS и не публиковать её в открытых каналах.
Мы в B2Bsite настраиваем публичную оплату «под ключ»: встраиваем корректные ссылки в почтовые шаблоны и сценарии постоплаты, генерируем хэши на стороне сервера, добавляем срок жизни ссылок и проверяем всё это на реальном платёжном контуре. Если нужно связать оплату по ссылке с обменом заказами в 1С или с внешней CRM — соберём и эту интеграцию.
Частые вопросы
Нужен ли клиенту пароль, чтобы оплатить по ссылке?
Нет. Компонент sale.order.payment проверяет доступ по хэшу заказа, а не по авторизации, поэтому клиент оплачивает без логина и пароля.
Чем публичная ссылка отличается от детальной страницы заказа?
Детальная страница (sale.order.detail) требует входа в личный кабинет и показывает данные заказа. Публичная ссылка ведёт на страницу оплаты и открывает только действие «оплатить».
Где взять хэш заказа?
Хэш возвращает метод объекта заказа \Bitrix\Sale\Order::getHash(). Его берут в обработчике или скрипте и подставляют в параметр HASH ссылки.
Можно ли вставить ссылку в письмо о заказе?
Да. В почтовом шаблоне собирают URL из номера заказа и хэша. Надёжнее генерировать хэш в обработчике почтового события и передавать его отдельным полем.
Что произойдёт, если открыть ссылку уже оплаченного заказа?
Повторная оплата не пройдёт: заказ помечен как оплаченный, и страница оплаты не предложит платить снова. Это штатное и безопасное поведение.
Безопасно ли передавать такую ссылку?
Да, если отправлять её по HTTPS и в личных каналах. Публикация URL с хэшем в открытом чате или на форуме открывает доступ к оплате всем, кто перейдёт по ссылке.
Можно ли ограничить срок жизни ссылки?
Штатно ссылка живёт до оплаты, но в обработчике легко добавить проверку срока по дате заказа или отдельному полю и отклонять устаревшие ссылки.
Почему на странице оплаты нет платёжных систем?
Обычно к заказу не привязана оплата или платёжная система ограничена по способу оплаты либо группе пользователей. Проверьте настройки платёжной системы для этого заказа.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.