Модуль "Бонусный счет": відмінності між версіями
Sv (обговорення | внесок) |
Sv (обговорення | внесок) Немає опису редагування |
||
Рядок 7: | Рядок 7: | ||
==Бонусная услуга== | ==Бонусная услуга== | ||
Может быть применена в акциях «Пополни счет на 100$ и через 3 месяца на счет будет зачислено 110 $». Абонент пополняет счет на 100$ | Может быть применена в акциях «Пополни счет на 100$ и через 3 месяца на счет будет зачислено 110$» или «Пополни счет на 100$ и через 3 месяца на счет будет зачислено 100$, а на бонусный счет 10$». | ||
Пример: | |||
* Абонент пополняет счет на 100$ | |||
* Баланс увеличивается на 100$ | |||
* Подключает услугу «Пополни счет на 100$ и через 3 месяца на счет будет зачислено 110$» | |||
* Со счета списывается 100$ | |||
* Через 3 месяца завершается услуга и основной счет пополняется на 100$, а бонусный на 10$ | |||
Естественно, все параметры (деньги, время, комментарий) настраиваемы. | |||
[[Файл:Bonus_balance.png|700px]] | |||
При настройке услуги поставьте галку «Запретить клиентам продлевать эту услугу». | |||
Обратите внимание, после подключения услуги, деньги как бы резервируются и абонент не сможет ими распоряжаться. | Обратите внимание, после подключения услуги, деньги как бы резервируются и абонент не сможет ими распоряжаться. |
Версія за 22:00, 6 липня 2019
Возможности
Модуль добавляет в биллинг 2 фичи (могут быть задействованы как обе, так и только одна):
- Услуга, которая при завершении пополняет основной и/или бонусный счет
- Отдельный бонусный счет. При пополнении основного счета, с бонусного, если на нем достаточно финансов, на основной счет будет переведена сумма, эквивалентная пополнению.
Бонусная услуга
Может быть применена в акциях «Пополни счет на 100$ и через 3 месяца на счет будет зачислено 110$» или «Пополни счет на 100$ и через 3 месяца на счет будет зачислено 100$, а на бонусный счет 10$».
Пример:
- Абонент пополняет счет на 100$
- Баланс увеличивается на 100$
- Подключает услугу «Пополни счет на 100$ и через 3 месяца на счет будет зачислено 110$»
- Со счета списывается 100$
- Через 3 месяца завершается услуга и основной счет пополняется на 100$, а бонусный на 10$
Естественно, все параметры (деньги, время, комментарий) настраиваемы.
При настройке услуги поставьте галку «Запретить клиентам продлевать эту услугу».
Обратите внимание, после подключения услуги, деньги как бы резервируются и абонент не сможет ими распоряжаться.
Бонусный счет
Создайте дополнительное поле:
Имя поля : Бонусный баланс Имя поля в бд : _bonus_balance Тип поля : деньги
Создайте услугу типа «Бонус при завершении»:
Имя услуги: С бонусного на основной Стоимость: неважно (использоваться не будет) Описание, которое будут видеть клиенты: Перевод с бонусного счета на основной (это будет в комментарии бонусного платежа) Автопродление: не ставим галку Запрет продления: ставим галку Группы: не ставим ни одной галки! Сумма: неважно (использоваться не будет) Режим: неважно (использоваться не будет) Срок действия: неважно (использоваться не будет)
В mysql:
DROP TRIGGER IF EXISTS `tr_bb_pays_insert`; DELIMITER $$ CREATE TRIGGER tr_bb_pays_insert AFTER INSERT ON pays FOR EACH ROW IF NEW.mid > 0 AND NEW.cash > 0 AND NEW.category <> 2 THEN BEGIN DECLARE money FLOAT; SELECT IF(_bonus_balance >= NEW.cash, NEW.cash, _bonus_balance) INTO money FROM data0 WHERE uid = NEW.mid LIMIT 1; IF money > 0 THEN BEGIN UPDATE data0 SET _bonus_balance = _bonus_balance - money WHERE uid = NEW.mid LIMIT 1; INSERT INTO users_services SET uid=NEW.mid, service_id=98, next_service_id=0, pay_id=0, tm_start=UNIX_TIMESTAMP(), tm_end=UNIX_TIMESTAMP()+2, tags=CONCAT(',main_money=', money, ','); END; END IF; END; END IF; $$ DELIMITER ;
Тестирование
- В настройках абонента устанавливаем поле «Бонусный баланс», например, в 10$
- Пополняем счет любым небонусным платежом на 2$
- Основной баланс увеличится на 2$
- Бонусный счет уменьшится на 2$
- Через несколько секунд основной баланс увеличится еще на 2$
- Появится бонусный платеж на 2$ с комментарием про перевод денег с бонусного на основной счет
Проверка, что с бонусного не спишется больше чем на нем есть:
- Создаем платеж на 10$
- Баланс увеличится на 10 + 8, а на бонусном счете станет 0$
- Дальнейшие любые пополнения не будут менять бонусный счет и пополнять основной баланс бонусами т.к на бонусном счете будет 0
Обратите внимание, что ядро должно быть запущено с модулем услуг services, хотя скорее всего он запущен ибо это один из основных модулей в NoDeny.
Принцип работы
В mysql создается триггер, который реагирует на создание записей в таблице платежей (pays). Это означает, что неважно как пополняется счет, хоть через платежную систему, хоть карточкой пополнения - триггер это «увидит», подключит услугу перевода баланса (с длительностью 2 секунды), а также уменьшит бонусный счет.
Обратите внимание, что бонусный счет уменьшается в триггере. А основной пополняется именно при завершении услуги.