Кешбэк в сервисе CASHOFF начисляется за товары из чека. Для того, что бы пользователь мог накапливать кешбэк, минимально необходимо выполнить два шага:
- включить для пользователя кешбэк (по умолчанию выключен)
- загружать в сервис чеки
Первый шаг можно выполнить сразу при регистрации пользователя, указав в запросе POST /users/add параметр is_cashback_enabled=true. После регистрации кешбэком можно управлять с помощью запросов POST /offers/accept (включить) и POST /offers/pull-out (выключить).
Способы загрузки чеков в сервис описаны в разделах Импорт чеков из ФНС и Импорт данных из внешних провайдеров.
Кешбэк начисляется в рамках акций, которые описывают критерии получения кешбэка (за какие чеки и какие товары можно получить кешбэк). Подробнее акции описаны в разделе Акции.
Начисление кешбэка происходит автоматически в момент загрузки чека в систему. Кешбэк накапливается на внутреннем счете кешбэка, с которого деньги можно снять одним из доступных способов вывода кешбэка.
Начисления кешбэка
Начислением является запись, в которой указана акция, товарная позиция и сумма кешбэка. Список начислений можно получить запросом GET /cashback/accruals:
{ "items": [ { "id": 472, "offer_id": 61, "user_id": 27159, "amount": 10, "status": "pending", "items": [ { "receipt_id": 27061, "receipt_item_id": 159179 } ] }, { "id": 484, "offer_id": 11, "user_id": 27362, "amount": 1000, "status": "redeemed", "received_at": "2019-03-19T13:58:06Z", "withdrawal_id": 100, "items": [ { "receipt_id": 27121, "receipt_item_id": 159644 } ] }, { "id": 490, "offer_id": 83, "user_id": 27402, "amount": 1, "status": "received", "received_at": "2019-03-21T09:17:26Z", "items": [ { "receipt_id": 27357, "receipt_item_id": 161844 } ] } ], "total": 3 }
Так же начисления указываются в самом чеке, в атрибуте cashback.
Начислением является не обязательно уже начисленный кешбэк, это так же может быть и потенциальный. По этому у начисления есть поле status:
pending
: начисление создано, но его правильность не подтвержденаreceived
: кешбэк зачислен на внутренний счётredeemed
: кешбэк выплачен (деньги выведены из сервиса)
Данные статусы наступают последовательно, в том порядке, в котором перечислены. Статус pending опциональный, он может быть пропущен и начисление будет сразу заведено в статусе received.
Статус redeemed означает что кешбэк выведен, текущая сумма на кешбэчном счете не будет включать данное начисление. У начислений с таким статусом будет указано поле withdrawal_id, которое ссылается на запись о выводе кешбэка.
Сумма начисления не фиксируется на момент создания и может меняться. В частности она может меняться при повышении уровня кешбэка чека, через исправление ошибочных начислений или других действий. Так же при ошибочных начислениях вся запись может быть удалена.
После того, как начисление было выведено из сервиса, оно фиксируется и больше не может быть удалено либо отредактировано.
На данный момент кешбэк по акции может начисляться только на одну товарную позицию, но в дальнейшем будут групповые акции, в которых нужно купить несколько разных товаров. По этой причине поле items в начислении - массив товарных позиций.
Сумма начисления
В CASHOFF есть два уровня кешбэка:
- базовый
- базовый с бонусом за операцию
Базовый в свою очередь может различаться в зависимости от способа импорта чека в систему: одна величина за загруженный через реквизиты чек, другая - за загруженный через профили.
Величина кешбэка указана в каждой акции, поле cashback. Там отдельно указаны значения за чек по реквизитам (qr), за чек из профилей (card) и бонус за операцию (trans_bonus).
Загрузка одного чека обоими способами не увеличивает кешбэк, база считается по способу первой загрузки. Текущий уровень кешбэка указан в поле cashback_level чека.
Итоговая сумма начисления равна "базовый кешбэк + бонус(если есть)".
То, как применяется величина кешбэка зависит от поля cashback_type акции. Есть три варианта:
- percent: процент от общей суммы товарной позиции
- fix: кешбэк с фиксированной суммой
- fix_for_one: кешбэк с фиксированной суммой за единицу товара
В первом случае величина кешбэка будет считаться как процент от товарной позиции, во втором и третьем - как фиксированная величина.
Получение бонуса за операцию
CASHOFF предусматривает получение клиентом дополнительного кешбэка за загрузку в сервис банковской операции, с помощью которой была совершена покупка.
Для получения бонуса клиенту необходимо добавить в сервис профиль банка, картой которого была оплачена покупка. Через этот профиль в систему должна быть загружена выписка с операцией по чеку, после чего сервис автоматически определит соответствие чека и операции и повысит уровень кешбека чека до cashback_level=with_bonus.
Последовательность загрузки чека и операции не важна, достаточно что бы они присутствовали в сервисе одновременно. Так же удаление в дальнейшем операции не понижает уровень кешбэка чека, он остается на своем наиболее высоком уровне.
Лимиты по чекам
Если чек не подтвержден банковской транзакцией, то нам очень сложно проверить, что покупку совершил именно пользователь, загрузивший чек. Часто недобросовестные пользователи пользуются этим, и получают кешбэк за те товары, которые они на самом деле не покупали. Если пользователь будет иметь возможность загружать много чужих чеков, то он сможет накапливать не маленькие суммы незаслуженного кешбэка.
Чтобы отбить у пользователей желание так делать, в сервисе существуют дополнительные правила по загрузке чеков:
- Пользователь должен загрузить чек не позднее N часов (или M суток) с момента покупки. Если чек загружен позднее, то его товарные позиции не будут обрабатываться на наличие акционных товаров, т.е. кешбэка в чеке не будет.
Пользователь может получить кешбэк не более чем по K чекам с одной датой покупки, не подтвержденным банковской транзакцией. Если пользователь загружает больше K чеков с одинаковой датой покупки без подтверждения банковской транзакцией, то первые K из этих чеков обрабатываются на кешбэк, а остальные – нет. Важно, что если чек подтвержден банковской транзакцией, то он обязательно обрабатывается на кешбэк и не учитывается в лимите.
Например, K = 2. Предположим, что 10.03.2021 пользователь загрузил 9 чеков: 4 чека с датой покупки 9.03.2020 и 5 чеков с датой покупки 10.03.2020. В последнем столбце таблицы показано, какие из них будут обработаны на кешбэк:Дата покупки Чек подтвержден банковской транзакцией? Чек будет обработан на кешбэк? 9.03.2020 9.03.2020 9.03.2020 9.03.2020 10.03.2020 10.03.2020 10.03.2020 10.03.2020 10.03.2020
Конкретные числа N, M и K иногда могут быть заданы по согласованию с площадкой.
Информация об исчерпании лимита чеков за конкретную дату, доступных для кешбэка конкретному пользователю, хранится в сервисе. Ее можно получить запросом GET /cashback/limits/receipts-daily-limit:
{ "items": [ { "date": "2021-03-02", "receipts_count": 4, "receipts_list": [ 451242, 451251, 451279 ] } { "date": "2021-03-01", "receipts_count": 2, "receipts_list": [ 451242, 451251 ] }, ], "total": 2 }
Чеки с недоступным кешбэком
Механизм начисления кешбэка CASHOFF предполагает ряд ситуаций, при которых кешбэк за чек не может быть начислен:
- По чеку уже был ранее начислен кешбэк. CASHOFF при начислении кешбэка запоминает чек и в дальнейшем по при повторных загрузках этого чека не проводит по нему повторных начислений (чек "использован"). Это позволяет не получать за чек несколько раз кешбэк загружая его разным пользователям. Информация о том, какие чеки уже "использованы" остается в сервисе на постоянной основе, удаление чека/профиля/пользователя не приводит к её сбросу.
- Запрещенные магазины. Все чеки из ряда магазинов не могут участвовать в кешбэке вне зависимости от акций.
- Функционал кешбэка выключен для пользователя либо персонально, либо на всей площадке.
- Согласие с офертой на участие в программе кешбэка обязательно, но пользователь его не дал.
- Пользователь загрузил чек позднее установленного ограничения на количество часов или суток, прошедших с момента покупки.
Исчерпан лимит чеков с одной датой покупки.
- Кешбэк в чеке заблокирован по индивидуальным причинам, связанным с подозрением пользователя в злоупотреблении функционалом кешбэка.
При наступлении таких ситуаций чек получает cashback_level=unavailable и поле unavailable_reason указывает на причину недоступности кешбэка.
Накопленный кешбэк и его вывод
Накопленный кешбэк собирается на внутреннем виртуальном счете кешбэка, данные по которому можно получить запросом GET /cashback:
{ "amount": 15, "currency": "rub" }
Данный баланс - это имеющийся у пользователя кешбэк, который доступен для вывода. При выводе кешбэка средства с этого счета снимаются, при появлении новых начислений - добавляются.
В накопленный кешбэк идут только начисления со статусом received.
На данный момент в сервисе доступен только один штатный способ по выводу кешбэка - вывод на банковскую карту клиента через платежную систему Монета. Альтернативой является интеграция с учетными системами приложения, либо вывод кешбэка на какой-то регулярной основе - для рассмотрения этих вариантов необходимо обратиться в отдел продаж CASHOFF.
Вывод возможен только всей суммы целиком. При этом действует ограничение на минимальную сумму накопленного кешбэка, которую нужно достичь для получения возможности вывода денег. По умолчанию эта сумма равна 300 рублей.
Вывод через Монету.
Вывод происходит через специальную страницу, которую генерирует ПС Монета и на которой клиент вводит данные своей карты. Для получения ссылки на эту страницу необходимо выполнить запрос POST /cashback/withdraw/moneta:
{ "redirect_url": "https://example.com/withdraw-done/" }
Единственный параметр redirect_url должен быть ссылкой на страницу, на которую нужно перенаправить клиента после завершения заполнения формы. Ответ будет следующего вида:
{ "form_url":"https://www.moneta.ru/secureCardData.htm", "withdrawal":{ "id":10, "user_id":20, "amount":100, "date":"2019-04-04T12:33:36Z", "status":"created" } }
Он содержит два ключевых элемента:
- form_url - ссылка на страницу вывода, которую нужно открыть клиенту
- withdrawal - созданный объект вывода, по которому можно отследить процесс вывода
На каждый запрос генерируется уникальная ссылка для вывода, а так же свой объект вывода.
После заполнения и отправки формы клиент вернется на страницу redirect_url, причем к параметрам адреса будет добавлена информация по выводу: его идентификатор, сумма и результат.
История выводов
Историю выводов кешбэка можно получить с помощью метода GET /cashback/withdrawals:
{ "items": [ { "id": 10, "user_id": 27159, "amount": 100, "date": "2019-03-14T16:14:38Z", "status": "created" } { "id": 6, "user_id": 27159, "amount": 100, "date": "2019-03-01T10:54:12Z", "status": "done" } ], "total": 2 }
Из всех возможных статусов (поле status) только done означает успешный вывод. Статусы created и accepted являются промежуточными, а canceled означает отмену вывода.
Вывод может получить статус canceled в случае, если клиент на форме вывода отказался от вывода, а так же при появлении каких-либо ошибок в процессе вывода. Из этого статуса продолжение не возможно, необходимо заново инициировать процесс вывода.
Уведомления о начислении кешбэка
В CASHOFF предусмотрено событие receipt.cashback, которое отправляется в тех случаях, когда чек либо получает начисления в статусе received, либо существующее начисление изменяется. Тело события будет содержать полную информацию по по чеку, включая все товарные позиции и весь начисленный кешбэк. Подробнее о получении уведомлений описано в разделе Нотификации.