Биллинг 2.0 – какие события генерирует?

InstantCMS 2.X

Как узнавать моменты завершения операций биллинга?

#1 23 января 2018 в 00:19
API компонента Биллинг прописано неплохо. Спасибо разработчикам!
Но возникают задачи, которые требуют информирования сторонних компонентов о состоянии операций биллинга. Вот примеры:

▷ За реальные деньги куплена валюта сайта и внесена на счёт пользователя.
▷ Пользователь потратил "баллы" на покупку услуги или цифрового товара.
Торгующий компонент должен передать информацию об этом событии, например, в кассовый сервис или сделать какие-то другие действия, которые требуются именно в этот момент и с этим заказом.

По логике CMS, компонент Биллинг должен известить о завершении этого события другие компоненты.
Однако, ни в документации, ни в менеджере событий таких событий не обнаружилось.
Как слушатель, Биллинг обладает огромными ушами — список в его манифесте один из самых развесистых.
Но генерирует ли Биллинг события?

R2 рекомендует узнавать это нехитрым поиском в папке компонента:

Чтобы узнать какие события генерирует интересующий вас компонент – просто сделайте поиск строки cmsEventsManager::hook или cmsEventsManager::hookAll по всем файлам внутри папки данного компонента.


Увы, даже слова «hook» вы таким образом не обнаружите в папках Биллинга — большая часть компонента закрыта наглухо, а в открытом коде этого нет. То, что этот компонент должен быть закрыт — сомнений нет.
Но как же узнавать о статусе операций?
#2 23 января 2018 в 00:59

Но как же узнавать о статусе операций?

Aquarius

Писать R2 и узнавать.
#3 23 января 2018 в 19:14
Вот я и написал, Андрей! 😊
Надеюсь, здесь, для большого числа разработчиков, R2 будет больше мотивации отвечать, чем по-отдельности, каждому в приватном общении.
#4 23 января 2018 в 19:17


лучше все таки на почту) там быстрее ответ будет
#5 23 января 2018 в 20:06
Когда-то отлавливал возможные события в методе hook класса cmsEventsManager, и насколько помню не обнаружил событий от биллинга. Было это давно, возможно что-то изменилось
#6 25 января 2018 в 17:13
Поразбиравшись пару дней, уточняю ситуацию и вопрос.
Судя по документации, мы перед действием, активируемым нашим контроллером, должны запросить баланс покупателя:

  1. $billing->checkBalanceForAction('jobs', 'add_vacancy');
Если средств не хватит, пользователь будет сразу перенаправлен на страницу оплаты. После оплаты он будет возвращен к форме, которую собирался заполнить.

Если это наш контроллер ведёт пользователя к покупке и пользователь (раньше или во время checkBalanceForAction) внёс сумму, то, получив обратно управление от Биллинга («… возвращён к форме...»), наш код может быть уверен, что "баллы" сайта куплены и средств достаточно.
Соответственно, если наша форма тоже будет заполнена и успешно отправлена, можно из этого делать выводы, например, оформлять чек на покупку, пересылать его в кассовый сервис или ОФД (оператору фискальных данных) и т.п. Получается, здесь и не нужно событие.

Но вот факт внесения (и зачисления) живых денег в банк (например, если пользователь его активировал на своей вкладке "Баланс"), увы, остаётся известным только Биллингу, который получает эти сведения от платёжной системы.
Процедура ожидания и получения ответа защищена, поэтому мы не можем ни прочитать, ни вставить в неё код подвешивания информации на соответствующий hook.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.