hanMaster / adverts

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Сервис объявлений (API)

Сервис реализует 2 метода /api/catalog/?category_id=1&page=1 - вывод списка из 25 объявлений (по дате создания, от более новых) /api/catalog/12345 - вывод объявления №12345

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

Задача

Нужно реализовать на сайте монетизацию.

На сайте показываются только объявления с положительным балансом. Стоимость объявления зависит от категории, в которой он размещен. Стоимость суточной публикации объявления = price в таблице categories. Оплата происходит раз в час (в 00 минут каждого часа) в размере 1/24 от суточной стоимости за каждый полный или не полный час публикации. Стоимость публикации может быть равна 0 (т.е. объявление публикуется бесплатно).

Любой пользователь может оплатить публикацию любого объявления на любую сумму. На странице объявления появляется кнопка при нажатии на которую пользователь переходит на страницу платежной системы и может пополнить счет объявления на любую сумму (от 1 копейки до размера госдолга США). Валюта пополнения всегда рубли.

Описание интеграции с платежной системой

  1. В браузере пользователя отправляется запрос на сайт платежной системы с указанием идентификатора сайта, номера объявления.

    https://payment.ru/pay?item_id=12345&parameters[user]=test&parameters[value]=1&site_id=abcdef

    • item_id=номер объявления
    • site_id=идентификатор сайта
    • parameters - не обязательный массив с любыми значениями, которые сайт хочет передать. Они никак не используются платежной системой, но возвращаются на сайт в обратном вызове. Тут можно передавать и получать какие-то доп.данные, необходимые для реализации функционала. parameters[user] и parameters[value] это просто пример.
  2. Пользователю показывается страница платежной системы, где пользователь самостоятельно вводит сумму для пополнения, номер карты и подтверждает платеж.

  3. Клиента переадресует обратно на страницу объявления.

После выполнения платежа платежная система делает обратный запрос СЕРВЕР/api/payment методом GET или POST (по желанию) и передает параметры

  • transaction_id=уникальный номер транзакции (оплаты), генерируемый на стороне платежной системы (строка, 40 символов). Не меняется при повторной отправке запроса.
  • item_id=номер объявления (число)
  • site_id=идентификатор сайта (строка до 40 символов),
  • amount=сумма пополнения (рубли и копейки, разделитель ., например, 123.40)
  • parameters=массив, переданный сайтом
  • signature= подпись параметров, выполненная по алгоритму
SHA1 от строки
secret&transaction=номертранзакции&item_id=значение&site_id=значение&amount=сумма&user=test&value=1
где user и value - это все ключи=значения parameters, отсортированные в алфавитном порядке.
secret - секретная строка, равная APP_KEY в файле .env

пример подписи
sha1('HDAJKSDhkjashdkjashdkjshkdddd&transaction=da47507194235790829029e2b6b198c2a49fa69f&item_id=12345&site_id=abcdef&amount=123.40&user=test&value=1') === 1ccf32ab78ad040441f08d75366ba5f94d95b476

В ответ платежная система ожидает

  • ответ с кодом 200 и json ответом {"success":true} в случае успеха
  • ответ с кодом 200 и json ответом {"success":false} в случае если оплату нельзя принять (в этом случае деньги вернутся клиенту).

При получении любого другого ответа, или http кода, или по любой другой технической проблеме, платежная система будет отправлять повторный запрос на данный api с теми же параметрами до получения описанного выше от сайта ответа. Повторный запрос может быть отправлен в произвольное время (от 1мс до 24 часов от предыдущего запроса).

Установка

Скопировать .env.example в .env

php artisan key:generate

Заполнить данные в .env (подключение к бд)

Запустить миграции и заполнить базу тестовыми данными

php artisan migrate:install

php artisan db:seed

Запуск приложения без установки php-fpm и т.д.

php artisan serve --host=HOST --port=8000

Требования к версиям ПО

php 8.0

oracle mysql 8.0.25+ / mariadb 10.2.39+

redis и остальное - по необходимости

About


Languages

Language:PHP 83.7%Language:Blade 16.0%Language:Shell 0.4%