Документация InstantCMS

для администраторов и разработчиков

Инструменты пользователя

Инструменты сайта


manual:components:billing:api:actions

Биллинг 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.

Вернуться к API | Вернуться к оглавлению

manual/components/billing/api/actions.txt · Последнее изменение: 23.12.2015 01:21 — fuze