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

Здравствуйте.
Необходимо реализовать сервис на подобие аукциона.
Для удобство совершение денежных операций необходимо реализовать баланс пользователей внутри системы (чтобы не приходилось каждый раз зачислять деньги через сервисы на подобие Робокассы ), для этого пользователи будут пополняться счёт на сторонних сервисах.
План действий имеется , реализация достаточно ясна и прозрачна и это настораживает.

В чём собственно опасения:
  1. По сути баланс внутри системы те же деньги (опасно! :) ). Что если , кто то дропнет базу (да да такое бывало:( ), или найдут уязвимость и воспользуются ей для манипуляций с балансом. Хотелось бы ознакомиться с чужим опытом, кто имел дело с подобными проектами, какие подводные камни встретились, на что стоит более пристально обратит внимание.
  2. Также в сервисе будет использовать Websocket, для обновление иинформации по товару и т.д. пока не думал о подробной реализации, но думаю осилю. Также хотелось бы услышать, какие тут могут быть проблемы, особенно с безопасностью, по данной технологии

Спасибо.
  • Вопрос задан
  • 858 просмотров
Пригласить эксперта
Ответы на вопрос 3
Demetriy
@Demetriy
веб и мобильная разработка
1) Как написали в первом комментарии: делать операции в транзакциях, вести логи транзакций.

2) Двойная запись (https://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D..., вот лекция с описанием https://vimeo.com/117154510.

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

4) Ведение логов действий пользователей (когда вы видите, что по логам пользователь 5 раз пополнил баланс на общую сумму 2000 рублей, а на реальный счет вам пришло 400 рублей, то это повод бить тревогу).

5) Бекапы
Ответ написан
VladimirAndreev
@VladimirAndreev
php web dev
все операции с балансом проводить используя транзакции с включенным логом транзакций, так можно будет восстановить балансы в случае дропа.
Ответ написан
Комментировать
Был один подводный камень. У человека была большая транзакция, но в определенном месте была отключена валидация save(false). Поскольку валидации не было, юзер мог заходить и делать двойной запрос. Отправляя деньгу при этом оставляя её у себя. К сожалению не могу найти эту тему на тостере. Решилось это более жесткой оберткой данных. Но какой метод использовал не вспомню, увы.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы