Биллинг: различия между версиями
Abushyk (обсуждение | вклад) |
Abushyk (обсуждение | вклад) |
||
(не показано 20 промежуточных версий 2 участников) | |||
Строка 58: | Строка 58: | ||
'''Ограничение на количество''' - данное поле служит для определения максимального количества доступных объявлений для одного пользователя.<br /> | '''Ограничение на количество''' - данное поле служит для определения максимального количества доступных объявлений для одного пользователя.<br /> | ||
'''Период''' - это значение для данной услуги не используется<br /> | '''Период''' - это значение для данной услуги не используется<br /> | ||
− | === | + | ===upper_limit=== |
− | Услуга ''' | + | Услуга '''upper_limit''' - указывает на ограничение по общему количеству предоставляемых предоплаченых поднятий в тарифе для одного пользователя на протяжении некоторого времени. Используйте ее, если Вам необходимо предоставить некоторое число поднятий на определенный временной промежуток в рамках тарифа.<br /> |
− | Услуга ''' | + | Услуга '''upper_limit''' поддерживает следующие параметры:<br /> |
− | '''Ограничение на количество''' - данное поле служит для определения максимального количества доступных | + | '''Ограничение на количество''' - данное поле служит для определения максимального количества доступных предоплаченых поднятий в промежуток времени в рамках тарифа.<br /> |
− | '''Период''' - | + | '''Период''' - если здесь указать 7, то время использования предоплаченых поднятий будет определяться недельными промежутками. Отсчет начинается с понедельника и заканчивается в воскресенье. На следующий понедельник счетчик уже будет считать начиная с этого нового понедельника количество объявлений. Указание 30 - определит временной промежуток в 1 месяц<br /> |
+ | ===advabonent=== | ||
+ | Услуга позволяет создать для тарифа условия, при которых за размещение каждого объекта в активном состоянии на протяжении некоторого периода, указанного в днях в поле услуги "Период", будет сниматься абонентская плата указанная в поле "Стоимость" этой услуги. При произведении списания по для объекта устанавливается временная метка окончания публикации. Следующая проверка системой состояния объектов будет проверять не прошло ли время указанное в этой метке и выключать объект, если не будет возможности произвести новое списание для продолжения публикации. | ||
+ | Услуга '''advabonent''' поддерживает следующие параметры: | ||
+ | Ограничение на количество - данное поле служит для определения максимального количества доступных предоплаченых поднятий в промежуток времени в рамках тарифа. | ||
+ | |||
+ | '''Период''' - количество дней за размещение на протяжении которых будет взиматься плата | ||
+ | |||
+ | '''Цена''' - сумма, которая будет взиматься за период времени указанный в услуге | ||
+ | |||
+ | '''NB'''. Списание по этой услуге производится даже в том случае, если тариф, куда она включена, обладает абонентской платой. | ||
+ | |||
+ | Для корректной работы этой услуги в модели объекта должно присутствовать поле '''abonent_payment''' типа '''dtdatetime''' и с правами доступа "только администраторы". | ||
+ | |||
+ | ===Статусы объектов=== | ||
+ | '''VIP''' – объявления отмеченные этим статусом отображаются в специальном блоке на сайте. Если объявлений больше чем вмещается в блок, тогда объявления со статусом VIP там будут отображаться в случайном порядке при каждой загрузке страницы. <br /> | ||
+ | '''PREMIUM''' – с этим статусом объявления будут выводиться в списках в самом верху. Они выводятся наверху списка на главной всегда. Или же наверху списка в том разделе, в котором они размещены. Например, если PREMIUM отмечено объявление о продаже 1-комнтаной квартиры, тогда оно будет всегда сверху списка 1-комнтаных квартир по продаже. Если PREMIUM объявлений будет больше чем, указано в настройках, тогда они также будут в случайном порядке показываться при каждой загрузке страницы.<br /> | ||
+ | '''BOLD''' – объявления с этим статусом отмечаются особым цветом или выделенным шрифтом в списке. Других отличий они не имеют.<br /> | ||
+ | |||
+ | ==Таблица параметров услуг== | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Название услуги !! Ограничение на количество !! Период !! Длительность в днях | ! Название услуги !! Ограничение на количество !! Период !! Длительность в днях | ||
|- | |- | ||
− | | | + | | abonent || - || - || - |
|- | |- | ||
− | | | + | | advlimit_data || Максимальное количество существующих объявлений (емкость Личного кабинета) || - || - |
|- | |- | ||
− | | | + | | limit_data || Максимальное количество объявлений добавленных на протяжении некоторого периода || Период в котором производится учет добавленных объявлений || - |
+ | |- | ||
+ | | upper_limit || Количество подъемов в учетный период || Период в котором производится учет поднятий || - | ||
|- | |- | ||
| bpack_prem || Количество включенных премиальных статусов в учетный период || Период в котором производится учет использования премиальных статусов || - | | bpack_prem || Количество включенных премиальных статусов в учетный период || Период в котором производится учет использования премиальных статусов || - | ||
Строка 79: | Строка 100: | ||
|- | |- | ||
| bpack_bold || Количество включенных выделенных статусов в учетный период || Период в котором производится учет использования выделенных статусов || - | | bpack_bold || Количество включенных выделенных статусов в учетный период || Период в котором производится учет использования выделенных статусов || - | ||
+ | |- | ||
+ | | advabonent || - || Период за который вычисляется плата (дней) || - | ||
|} | |} | ||
Строка 112: | Строка 135: | ||
<pre>1 1 * * * /usr/bin/wget -O /dev/null -q http://ваш_сайт/billing.php</pre> | <pre>1 1 * * * /usr/bin/wget -O /dev/null -q http://ваш_сайт/billing.php</pre> | ||
+ | |||
+ | Для запуска задачи по списанию абонентской платы за размещение каждого объекта используйте задачу для CRON (Эту задачу необходимо встраивать в Планировщик только если вы используете услугу advabonent. Частота запуска задачи подбирается эмпирически, но не реже чем раз в час.) | ||
+ | |||
+ | <pre>1 1 * * * /usr/bin/wget -O /dev/null -q http://ваш_сайт/billing.php?advabonent=1</pre> | ||
==Настройка пользователей== | ==Настройка пользователей== |
Текущая версия на 02:44, 7 ноября 2018
Содержание
Общая информация
Прежде чем описать конфигурационные параметры биллинга хочу для начала рассказать об основной концепции данного приложения.
Для начала представьте себе временную шкалу. И объявления которые расположены на этой шкале. Задача биллинга состоит в том чтобы четко ограничивать время жизни той или иной функции на временной шкале по отношению к объявлению. Это относится как к длительности существования этой функции так и к количеству возможных объявлений на одном промежутке времени. И для того чтобы разделить длительность, количество и прочие параметры в биллинге введены такие сущности как услуги. Несколько услуг объединены в пакет. И этот пакет называется Тарифом.
Создавая наборы типовых услуг но с разными временными и количественными характеристиками мы можем объединять эти услуги в разные тарифы. Таким образом, мы добиваемся разных условий для пользователей, которые находятся на тарифе «Начальный» и тарифе «Профессионал». В тарифе «Профессионал» могут быть более выгодные условия размещения.
Биллинг имеет модуль, который необходимо запускать раз в сутки. Данный модуль выполняет несколько операций.
- Загружает список всех пользователей
- Затем проходит в цикле по каждому пользователю и определяет тариф этого пользователя.
- Для тарифа выполняется загрузка списка услуг. И в соответствии с названием услуги и ее параметрами применяются операции для объявлений пользователя.
Установка
- Распакуйте архив дистрибутива billing.zip
- Загрузите каталоги tariff, billing, service, upper в /apps/ по фтп на сайт
- billing.php надо загрузить в корень сайта
- Теперь нужно зайти в обновления и обновить все доступные приложения. В архиве не всегда успеваем создавать свежие версии, поэтому лучше перепроверить их обновления.
- Зайти приложения - Тарифы и нажать установить
- Зайти приложения - Биллинг
- В настройках - включить тарифы, биллинг
- Создать тарифы (смотрите ниже)
- Добавить в редакторе форм в таблицу data поля vip_status_end, premium_status_end, bold_status_end. Эти поля все должны быть тип: date, хранить в базе и доступ только для группы администраторов
Описание параметров Услуги
- Системное название – здесь необходимо указать латинскими буквами название услуги, которое будет распознаваться системой. Сейчас доступны следующие названия (limit_data, hotswitcher, upper_limit).
Системное название услуги состоит из формальной неизменяемой части и идентифицирующей части. Формальная часть должна идти в начале системного имени услуги и иметь одно из предопределенных значений limit_data, upper_limit, advlimit_data. Идентифицирующая часть следует за формально, отделенная знаком подчеркивания и может иметь произвольную форму, позволяющую по ней понять о какой именно услуге из набора подобных идет речь. На роботу биллинга эта часть не оказывает никакого влияния. Обычно, в качестве идентифицирующей части используется краткое имя тарифа, к которому эта услуга прикрепляется. Прмеры названия услуги:
limit_data_beginner advlimit_data_200 upper_limit_5perday
- Заголовок – понятное для человека название.
- Длительность в днях – данный параметр указывает на то, сколько будет действовать данный параметр. Причем длительность считается от момента размещения объявления.
- Период в днях – параметр указывает на то, за какой период времени система будет считать функцию. Например, количество объявлений за 7 дней (календарная неделя с понедельника по воскресенье) или за месяц (также календарный месяц с первого числа по последнее число месяца).
- Ограничение на количество – тут устанавливается сам ограничитель количества допустимых объявлений. За период в днях описанный выше.
- Метод программный в классе биллинга – в данном поле можно вписать название метода, который будет выполняться для данной услуги. Сейчас доступны следующие методы:
switch_off – выключение объявления из активных. Не будет доступно на сайте, но будет у пользователя в личном кабинете отображаться красным цветом.
switch_off_hot – отключение параметра «спецпредложения». Также при истечении срока действия спецпредложения оно выключается, но объявление при этом остается доступным на сайте.
Для выполнения процедур биллинга в корне сайта должен находится файл /billing.php
Необходимо вызывать этот скрипт из cron регулярно раз в день.
Услуги биллинга
limit_data
Услуга limit_data - указывает на ограничение по количеству возможных добавленных объявлений для одного пользователя в одном временном промежутке. Используйте ее, если Вам необходимо ограничить количество добавляемых пользователем объявлений на одном временном отрезке.
В данной услуге есть следующие параметры:
Период - если здесь указать 7, то лимит будет определяться недельными промежутками. Отсчет начинается с понедельника и заканчивается в воскресенье. На следующий понедельник счетчик уже будет считать начиная с этого нового понедельника количество объявлений.
Если в период указать 0, то за промежуток времени будет браться календарный месяц. С первого числа месяца и до последнего числа месяца.
Ограничение на количество - данное поле служит для определения самого количества доступных объявлений для одного пользователя в выбранный период времени.
advlimit_data
Услуга advlimit_data - указывает на ограничение по общему количеству объявлений для одного пользователя (При расчете учитываются все объявления, в том числе и неактивные). Используйте ее, если Вам необходимо ограничить общее количество объявлений пользователя.
Услуга advlimit_data поддерживает следующие параметры:
Ограничение на количество - данное поле служит для определения максимального количества доступных объявлений для одного пользователя.
Период - это значение для данной услуги не используется
upper_limit
Услуга upper_limit - указывает на ограничение по общему количеству предоставляемых предоплаченых поднятий в тарифе для одного пользователя на протяжении некоторого времени. Используйте ее, если Вам необходимо предоставить некоторое число поднятий на определенный временной промежуток в рамках тарифа.
Услуга upper_limit поддерживает следующие параметры:
Ограничение на количество - данное поле служит для определения максимального количества доступных предоплаченых поднятий в промежуток времени в рамках тарифа.
Период - если здесь указать 7, то время использования предоплаченых поднятий будет определяться недельными промежутками. Отсчет начинается с понедельника и заканчивается в воскресенье. На следующий понедельник счетчик уже будет считать начиная с этого нового понедельника количество объявлений. Указание 30 - определит временной промежуток в 1 месяц
advabonent
Услуга позволяет создать для тарифа условия, при которых за размещение каждого объекта в активном состоянии на протяжении некоторого периода, указанного в днях в поле услуги "Период", будет сниматься абонентская плата указанная в поле "Стоимость" этой услуги. При произведении списания по для объекта устанавливается временная метка окончания публикации. Следующая проверка системой состояния объектов будет проверять не прошло ли время указанное в этой метке и выключать объект, если не будет возможности произвести новое списание для продолжения публикации.
Услуга advabonent поддерживает следующие параметры: Ограничение на количество - данное поле служит для определения максимального количества доступных предоплаченых поднятий в промежуток времени в рамках тарифа.
Период - количество дней за размещение на протяжении которых будет взиматься плата
Цена - сумма, которая будет взиматься за период времени указанный в услуге
NB. Списание по этой услуге производится даже в том случае, если тариф, куда она включена, обладает абонентской платой.
Для корректной работы этой услуги в модели объекта должно присутствовать поле abonent_payment типа dtdatetime и с правами доступа "только администраторы".
Статусы объектов
VIP – объявления отмеченные этим статусом отображаются в специальном блоке на сайте. Если объявлений больше чем вмещается в блок, тогда объявления со статусом VIP там будут отображаться в случайном порядке при каждой загрузке страницы.
PREMIUM – с этим статусом объявления будут выводиться в списках в самом верху. Они выводятся наверху списка на главной всегда. Или же наверху списка в том разделе, в котором они размещены. Например, если PREMIUM отмечено объявление о продаже 1-комнтаной квартиры, тогда оно будет всегда сверху списка 1-комнтаных квартир по продаже. Если PREMIUM объявлений будет больше чем, указано в настройках, тогда они также будут в случайном порядке показываться при каждой загрузке страницы.
BOLD – объявления с этим статусом отмечаются особым цветом или выделенным шрифтом в списке. Других отличий они не имеют.
Таблица параметров услуг
Название услуги | Ограничение на количество | Период | Длительность в днях |
---|---|---|---|
abonent | - | - | - |
advlimit_data | Максимальное количество существующих объявлений (емкость Личного кабинета) | - | - |
limit_data | Максимальное количество объявлений добавленных на протяжении некоторого периода | Период в котором производится учет добавленных объявлений | - |
upper_limit | Количество подъемов в учетный период | Период в котором производится учет поднятий | - |
bpack_prem | Количество включенных премиальных статусов в учетный период | Период в котором производится учет использования премиальных статусов | - |
bpack_vip | Количество включенных VIP-статусов в учетный период | Период в котором производится учет использования VIP-статусов | - |
bpack_bold | Количество включенных выделенных статусов в учетный период | Период в котором производится учет использования выделенных статусов | - |
advabonent | - | Период за который вычисляется плата (дней) | - |
Настройка абонентской платы для тарифа
Для любого тарифа можно назначить абонентскую плату. Абонентская плата взымается с пользователя 1 раз в месяц (в начале месяца).
Для того чтобы начала списываться абонетсткая плата, нужно завести услугу с ключевым словом abonent - в названии, например abonent_pro.
Примерные значения параметров этой услуги приведены ниже:
Системное название = abonent_pro
Заголовок = Абонентская плата для тарифа ПРО
Длительность в днях = 30 (этот параметр не важен)
Период в днях = 30 (этот период также не важен для услуги)
Ограничение на количество шт. = 0 (параметр не важен для услуги)
Метод программный в классе биллинга = abonent (Единственное допустимое значение.)
Стоимость = 200 (именно эта сумма будет списываться со счета пользователя в начале месяца)
Затем нужно добавить эту услугу в соответствующий тариф.
Если при начислении абонентской платы у пользователя будет недостаточно средств, тогда система переключит его тариф на тот, что указан в настройках во вкладке Биллинг в поле Идентификатор тарифа на который переключать пользователей, если у них на счету нет денег для продления текущего тарифа (apps.billing.default_tariff_id). Или если там значение 0, то просто выключит тариф на значение "Не выбран".
Также пользователю, которого система переключает на другой тариф отправляется уведомление на email.
Настройка CRON-задачи
Пример строки для CRON. Это задание будет выполняться каждый день в 1:01 :
1 1 * * * /usr/bin/wget -O /dev/null -q http://ваш_сайт/billing.php
Для запуска задачи по списанию абонентской платы за размещение каждого объекта используйте задачу для CRON (Эту задачу необходимо встраивать в Планировщик только если вы используете услугу advabonent. Частота запуска задачи подбирается эмпирически, но не реже чем раз в час.)
1 1 * * * /usr/bin/wget -O /dev/null -q http://ваш_сайт/billing.php?advabonent=1
Настройка пользователей
После того, как вы создали тарифы и услуги нужно добавить поле для выбора тарифа у пользователя.
Для этого в таблицу user через Редактор форм добавляем колонку tariff_id - описание полей можно увидеть на этой картинке http://sitebill.ru/storage/scr/user_tariff.png
Сами пользователи смогут покупать себе тарифы из личного кабинета, для этого нужно добавить пункт меню Мои тарифы и ссылка на /billing/tarifflist - тут находится список тарифов и кнопки для их покупки
Меню пользователя находится тут /template/frontend/ваш_шаблон/user_menu.tpl
Пункт меню может выглядеть так
<li><a href="{$estate_folder}/billing/tarifflist" class="logout">Мои тарифы</a></li>