@exgod
Трудно быть Богом.

Как реализовать виртуальную валюту на сайте?

Добрый день! Суть вопроса заключается в следующем: есть сайт, на котором необходимо реализовать виртуальную валюту программным образом, то есть при регистрации пользователь получает какое-то количество "баллов", которые в дальнейшем он может купить, используя платёжные системы, уровня Payeer и так далее.

С чего необходимо начать и как правильно расписать алгоритмы без ошибок для создания сие функции?
Примеры кода не нужны, мне главное понять всю суть алгоритма и как это сделать правильно.

Бэкэнд сайта - php.
Большое спасибо!
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
solotony
@solotony
code for food, caviar preferably
можно примитивно - у пользователя есть "кошелек" где количество денег изменяется в зависимости от операции

можно нормально - по аналогии с бухучетом

Заводишь счета "кошелек", "поступило, "покупки"
и дополнительно например: "заблокировано", "выведено" , "партнерка"

каждая операция изменяет 2 счета например
поступление пишется + в кошелек + в поступило
покупка - в кошелек и + в покупки

общий баланс =0
кошелек + покупки = поступило
или
кошелек + покупки + выведено + заблокировано = поступило + партнерка
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
AK-VoronM
@AK-VoronM
"Мало-мало программист"
Добавляешь сущность "кошелек", в которой будет лежать итоговое значение суммы (по умолчанию 0);
Добавляешь сущность "операция", которая будет отражать поступление и расходование бонусных баллов;
При любом движении баллов изменяешь сумму в кошельке.

Для отслеживания движений имеет смысл завести отдельную таблицу.
id, user_id, sum, type, status, comments, source, date_create, date_confirm где:
  • id - идентификатор операции
  • user_id - ид пользователя
  • sum - сумма операции
  • type - тип операции: пополнение/списание
  • status - подтверждена/не подтверждена
  • comments - комментарий к движению
  • source - источник движения
  • date_create/date_confirm - дата создания/подтверждения операции


Собственно при регистрации пользователя делаешь движение с поступлением бонусов;
Потом изменяешь данные для кошелька;
Потом пишешь любое движение в таблицу и изменяешь состояние кошелька.

В самом простом случае можно сделать прям через один класс, но это не очень комильфо.
Ответ написан
@rPman
Настоятельно рекомендую ВСЕ операции с кошельком, которые должны быть неделимыми (атомарные) реализовать в виде сторонних методов и работать только с ними, самый простой пример - хранимые процедуры в базе данных.

В этом случае у вас в принципе не будут возникать глюки с итоговым балансом (который должен быть нулевым в идеале, а сторонние поступления заводить через специальные аккаунты с отрицательным депозитом, либо вводить понятие кредита, т.е. два баланса - баланс по депозиту и размер кредита и оба числа только положительные).

Логируйте все! в идеале лог должен быть машиночитаемым, позволяющим проиграть историю операций на снапшоте, в т.ч. с самого начала жизни базы, это спасет вам море нервов, когда будете отлаживать алгоритм или решать проблемы, возникшие из-за аппаратных проблем.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы