Хочу поделиться полезнейшим событием из ядра d7 - "События после сохранения сущности" , которое здорово помогло при решении моей проблемы. Но обо всём по-подробнее.
Имеется сайт, который принимает онлайн оплату Сбербанка. При этом клиент может оплатить как часть заказа, так и полную стоимость. Факт оплаты мы должны отправлять на сторонний сервис. Казалось бы всё просто: воспользуйтесь событием OnSalePayOrder из старого ядра. Сказано - сделано!
И тут начались проблемы: почему-то часть оплат отправляются на сторонний сервис, а часть - нет. Стали копать, и выяснили: оказывается событие OnSalePayOrder срабатывает только при полной оплате стоимости заказа. Стали думать-размышлять, гуглить, и тут наткнулись на замечательное событие из ядра d7OnSalePaymentEntitySaved.
Данное событие срабатывает после сохранения сущности оплаты, и не важно: оплачена ли полная стоимость заказа или частичная. Отлавливаем факт оплаты "PAID" = "Y" и отправляем данные. Ниже приведу небольшие фрагменты кода:
1. Регистрируем события для нашего модуля интеграций
2. Пишем метод обработчик. В моём случае я дополнительно получаю данные по заказу, и далее, в зависимости от выбранной платежной системы (помимо Сбербанка используется и некоторые другие), создаём специальный объект класса под каждую платежную систему, который выполняет функции отправки данных в сервис.
Спасибо! Подскажите, как "отлавливать" ответ факта оплаты на стороннем сервисе платежной системы? Предполагаю что сторонний сервис "оповещает" сайт, передает ему параметры какие то? Но куда, на какую страницу он их передает, как их потом принимать, анализировать и выполнять дальнейшие действия (например смена статуса заказа и т.п)
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».