Функционал:
Для Пользователя PROTUS:
- Регистрация в сервисе PROTUS.
- Попополнение баланса кошелька (в процессе... пока устанавливаем в БД).
- Вход в партнерские интернет-сервисы (интегрированные с PROTUS), с помощью аккаунта PROTUS (по OAuth - выпускается только AccessToken и с возможностью ограничить scope для токена. Полный scope "check hold charge" - подразумевает доступ интернет-сервиса к проверке баланса кошелька, блокированию средств, списанию средств за услуги).
- Просмотр состояния своих аккаунтов в различных интернет-сервисах (в этом цикле реализован только просмотр суммы расходов для каждого аккаунта).
Для Компании-партнера:
- Регистрация компании и выдача ключа доступа к API, ключа для обработки входящих HTTP запросов на webhook компании-клиента.
- Назначение WEBHOOK URL для запросов от PROTUS API (в процессе... пока устанавливаем в БД).
- Регистрация услуги, для которой будет реализован биллинг аккаунтов пользователей (в процессе... пока устанавливаем в БД).
- Биллинг аккаунтов непосредственных пользователей сервиса.
- Просмотр состояния аккаунтов пользователей (в этом цикле реализован только просмотр суммы расходов для каждого аккаунта).
Для интеграции с сервисами-партнерами, реализованных на Django + DRF, разработан модуль PROTUS-DJANGO (пока модуль реализован как отдельный app 'protus' в демо-сервисе)
- предоставляет свою систему JWT токенов (логика заимствована из модуля "djangorestframework-simplejwt")
- предоставляет возможность пользователям PROTUS авторизоваться по OAuth в сервисе и оплачивать услуги с помощью кошелька PROTUS.
- для непосредственных пользователей сервиса при первом входе регистрирует aккаунт + кошелек в PROTUS (требует кастомизации модели User - добавление полей uuid и oauth_verified)
- предоставляет набор permissions, при добавлении которых к permission_classes для View-класса будет производится интроспекция токена для оаuth_verified пользователей (т.е. для пользователей, авторизованных с помощью PROTUS будет проверяться присутствие в scope токена нужных полей из списка "check hold charge", и что токен не был "отозван" на стороне PROTUS). Для непосредственных пользователей сервиса-клиента планируется, что набор scope будет максимальный для осуществления биллинга. Из permissions пока будет реализован ProtusChargePermission - проверяет наличие "charge" в scope токена, что позволяет списывать деньги с баланса кошелька пользователя PROTUS (oauth_verified). В данном цикле пополнение баланса PROTUS кошелька для непосредственных пользовтелей сервиса не будет реализовано.
Сервис PROTUS - это 3 микросервиса на FastAPI + модуль для Django(DRF):
- GATEWAY (fast_gate)
- AUTH (fast_auth)
- PAYMENTS (fast_pay)
- PROTUS-DJANGO (messages_app/protus) - оформление в модуль в процессе... в демо-приложении реализован как отдельный app 'protus'
Фронтенд PROTUS на Vue.js + Vuetify
MIRO: https://miro.com/app/board/uXjVKOFkZtk=/?share_link_id=649411215399
Команды для запуска:
- Создайте .env файл в папках backend-приложений ('fast_auth', 'fast_gate', 'fast_pay', 'messages_app') - используйте данные из файлов env.example для каждого приложения.
- Перед запуском docker-compose из консоли установите пароль для POSTGRES в переменную среды командой: export POSTGRES_PASSWORD=Billing123 (ваш пароль должен совпадать с паролями в .env файле - используем общий пароль).
- Также измените дефолтное значение таймаута для HTTP-соединения у контейнеров в момент сборки - из консоли запустите команду: export COMPOSE_HTTP_TIMEOUT=600 (вместо 60 сек. - 600 сек. либо больше).
- Запустите команду в консоли: docker-compose -f docker-compose.yml up --build (дождитесь завершения сборки сети контейнеров).
- Если по какой-то причине процесс остановился с ошибкой - вызовите команду из консоли: docker-compose down и дождитесь остановки. Затем повторите предыдущий шаг.
Для Django приложения: войдите в контейнер backend-messages
( sudo docker exec -it backend-messages /bin/bash -c "su - root" )
и выполнить:
cd /code/
python manage.py createsuperuser
авторизуйтесь в Django Admin ( http://127.0.0.1:8000/admin ) и установите 'IntervalSchedule' для Celery Beat: 5, 10, 30 секунд (три интервала) - подробности работы django-приложения см. тут
Для Payments приложения: войти в контейнер backend_protus_pay
( sudo docker exec -it backend_protus_pay /bin/bash -c "su - root" )
и выполнить:
cd /app/src/
alembic revision --autogenerate -m "initial on build" (создаем миграции и таблицы БД)
alembic upgrade head
python -m proto.grpc_server & (запускаем gRPC сервер)
Для Auth приложения: войти в контейнер backend_protus_auth ( sudo docker exec -it backend_protus_auth /bin/bash -c "su - root" )
и выполнить:
cd /app/src/
alembic revision --autogenerate -m "initial on build" (создаем миграции и таблицы БД)
alembic upgrade head
python -m proto.grpc_server & (запускаем gRPC сервер)
Демонстрация работы:
- Переходим на сайт сервиса PROTUS (http://127.0.0.1:8080) и регистрируем компанию в сервисе "PROTUS" (любые данные).
- Подключаемся к БД 'fast_auth_db' (БД для AUTH-приложения) и меняем сгенерированные 'CLIENT_ID', 'CLIENT_SECRET', 'WH_SECRET' на свои из.env в messages_app (чтобы не перезапускать docker-compose).
- Заполняем данные для 'WH_URL': "/api/webhook/" (для POST-запросов от PROTUS-сервиса).
- Повторяем все для 'fast_pay_db' (БД для PAYMENTS-приложения).
- Добавляем две услуги в таблице services в 'fast_pay_db' (Можно назвать их "Клиент", "Рассылка" - цены любые) - для service_id используем данные из.env в messages_app (чтобы не перезапускать docker-compose).
- Далее регистрируем пользователя - при желании можно в БД 'fast_pay_db' прописать баланс его кошелька в таблице 'wallets' (при регистрации баланс равен 0 - игнорируем поля 'debit', 'credit' - они пока не задействованы в логике).
- Переходим на сайт компании-партнера (http://127.0.0.1:8088) и входим в сервис через "вход с PROTUS" разрешив все действия для Access Token.
- Далее пользуемся сервисом - соглашаемся оплатить услуги по добавлению нового клиента и по запуску рассылок (подробнее о работе сервиса компании партнера см. тут.
- Проверяем на сайте PROTUS в ЛК Компании и Пользователя списания средств.
- Далее проверяем логику работы биллинга для обычного пользователя сервиса компании-партнера: регистрируем на сайте партнера нового пользователя - получаем услуги - проверяем в ЛК компании на сайте PROTUS создание аккаунта и биллинг.
- Для запуска сервиса можно обратиться за консультацией.