Что почитать про биллинг?

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
Как его реализовывать, какие данные надо хранить и как. Не хочу изобретать велосипед )
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Деньги хранить в целочисленных типах, таких как DECIMAL, никакие данные не удалять, а лишь помечать как удаленные, данные группировать в транзакции — вроде, все как и везде :)
 

Dovg

Продвинутый новичок
Почитай что-нибудь про бухучет.

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

ИМХО.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Dovg
Ложится, но далеко не всегда, как подсказывает мой опыт :)
 

Dovg

Продвинутый новичок
c0dex
Не ради спора: приведи плз пример, что из бухучета у тебя не легло в sql. Для общего развития интересно.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Dovg
Не из бухучета, а из логики нашего собвственного биллинга. Лечь легло, но с дикими логическими костылями.
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
посоветуйте книжку про бухучет
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Это наверное тебе к бухам надо, а не к нам)
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
если есть 1С, то не изобретайте велосипед, делайте синхронизацию со своей базой (набор полей Вам подскажет любой бухгалтер работающий с 1С, ну и логика Вашего приложения).

все собственно просто там и прозрачно, для клиента много плюсов, от сверки счетов - до выставления актов, для бухгалтеров или документооборота, не надо вести и заполянять две таблицы
 

fixxxer

К.О.
Партнер клуба
Деньги хранить в целочисленных типах, таких как DECIMAL, никакие данные не удалять, а лишь помечать как удаленные, данные группировать в транзакции — вроде, все как и везде :)
и ничего не считать в php, только базой.
 
  • Like
Реакции: Dovg

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Может быть поэтому?

echo (int) ( (0.1+0.7) * 10 );

Даст 7 =)
 

Dovg

Продвинутый новичок
ИМХО fixxxer как бы имел ввиду, что для денег должна быть только одна точка входа, которая в состоянии обеспечить атомарность операции.
 

fixxxer

К.О.
Партнер клуба
Это одна причина.

Вторая в том, что с php-шной типизацией очень легко допустить ошибку, когда что-то ВНЕЗАПНО кастанется в какой-нибудь float с соответствующими приколами.

Не, ну если альтернатива - считать мысклем с strict = off, лучше похапе, да :D
 

AmdY

Пью пиво
Команда форума
как вариант реализовать паттерн money, дополнительной плюшкой может быть работа с разными валютами.
PHP:
$a = new Money(100.5, Money::CURRENCY_RUB);
$b = new Money(10, Money::CURRENCY_USD);
$a->plus(40)->minus($a)->convertTo(Money::CURRENCY_EUR);
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
в биллинге все сильно зависит от объекта обсчета
например, у операторов связи обсчет делается по логам каждую секунду,
а на хостингах можно считать раз в день для всех клиентов

учет не так сложен, как вся фигня вокруг него - экспорт данных в нужных форматах, подготовка pdf-инвойсов, интеграция с CRM, уведомления, графики, статистика

что еще забыли, так это "писать логи"
это очень важно - всегда писать в лог обо всех событиях с деталями, чтобы потом при вопросах можно было вручную проверить конкретного клиента

pg для этих задач по моему опыту лучше подходит, чем mysql - есть схемы, полноценные хранимые процедуры, последовательности, поле text без ограничений, не умирает, если индексы в память не влазят
 

AmdY

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

varan
а тебе биллинг для чего именно?
 

fixxxer

К.О.
Партнер клуба
Absinthe
зачем отсеивать постгрес? Там все весьма неплохо.

AmdY
Ну если говорить о работе с данными банковских карт - в pci dss все четко описано четко, по сути, это свод совершенно разумных правил. Про "в базе данных", там, кстати, ничего нет. Компоненты должны быть разделены и изолированы, а уж как ты это сделаешь - на твое усмотрение.
 
Сверху