Содержание
Биллинг API: Оплата действий
Биллинг позволяет максимально автоматизировать прием платежи за платные действия, предусмотренные вашим компонентом. Вам нужно добавить всего 2 строки в код вашего контроллера и несколько строк в код установщика.
Регистрация действий
Идеология работы биллинга заключается в том, что каждый компонент имеет набор действий, некоторые из которых могут быть платными. Суть работы биллинга состоит в том, чтобы проверить баланс пользователя до выполнения действия и списать средства после выполнения.
Предположим, Вы написали компонент jobs (биржа труда) и в нем есть действие add_vacancy (добавление вакансии). Действие состоит из двух этапов: 1. показать пользователю форму, 2. сохранить введенные в форме данные. На первом этапе мы будем просить биллинг проверить баланс, а на втором - списать средства. Таким образом, действие add_vacancy у нас будет платным.
Цены на платные действия, в общем случае, настраиваются в админке самого биллинга (раздел Цены => Действия). Для этого биллинг должен знать о каждом действии, за которое может быть установлена плата. Чтобы сообщить биллингу о платных действиях в Вашем компоненте, каждое из них нужно зарегистрировать. Лучше всего делать это в инсталляторе компонента (внутри функции install_package()
в install.php).
Рассмотрим на примере компонента jobs и действия add_vacancy:
// // Файл install.php в пакете с компонентом // function install_package() { // Если биллинг установлен if (cmsCore::isControllerExists('billing')){ // Подключаем модель биллинга $billing_model = cmsCore::getModel('billing'); // Описываем наше действие (компонент, название и заголовок) $action = array( 'controller' => 'jobs', 'name' => 'add_vacancy', 'title' => 'Добавление вакансии' ); // Добавляем действие в биллинг $billing_model->addAction($action); } // ... делаем все остальное, что нужно при установке нашего компонента ... return true; }
Вы также можете добавить действие вручную, через базу данных. Для этого вставьте новую запись в таблицу billing_actions
, заполнив поля controller
, name
, title
аналогичным образом.
Плюс, необходимо предусмотреть ситуацию когда биллинг устанавливается после вашего компонента. В этом случае действие, очевидно, не будет создано при установке вашего компонента, т.к. биллинга на тот момент еще не было. Для решения проблемы имеет смысл дать пользователю возможность вручную создать действия в любой момент (например, кнопкой в админке).
Проверка баланса перед действием
Перед совершением действия, цена на которое может быть указана в настройках биллинга, необходимо проверить что на балансе пользователя достаточно средств. Например, если речь идет о платном добавлении контента, то баланс нужно проверить непосредственно перед выводом формы.
Рассмотрим на примере компонента jobs и действия add_vacancy:
$billing->checkBalanceForAction('jobs', 'add_vacancy');
Если средств не хватит, пользователь будет сразу перенаправлен на страницу оплаты. После оплаты он будет возвращен к форме, которую собирался заполнить.
Списание платы за действие
После совершения платного действия, в том месте кода где уже точно известно что действие совершено успешно, нужно добавить операцию списания.
Рассмотрим на примере компонента jobs и действия add_vacancy:
// ... добавляем вакансию в базу данных ... if ($success) { // Если запись успешно добавлена, производим списание $billing->processAction('jobs', 'add_vacancy', $user_id); }
Третий параметр ($user_id
) в методе processAction()
содержит ID пользователя, совершившего действие. Этот параметр не обязателен. Если он не указан, то используется ID текущего авторизованного пользователя.
Если цена за действие не была установлена в настройках биллинга, либо равна нулю, либо целевой пользователь является администратором, то списание не произойдет и метод processAction()
просто вернет false.