Перейти к основному содержимому

Описание процессов оплаты

В данной документации описаны платежные процессы с разными вводными.

Параметры списания

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

В СУ при создании/редактировании клиента можно настроить параметры списания:

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

  • Оплата с внутреннего баланса и с банковской карты. После старта зарядной сессии, денежные средства будут списываться сначала с внутреннего баланса, а затем с банковской карты.

  • Корпоративные аккаунты - общий внутренний баланс на всех сотрудников компании.

Точки списания денежных средств

В системе производится списание денежных средств по следующей логике:

  • Для пользователей с активным параметром "Предоплата":

    - Перед бронированием станции, 

    - Перед стартом и в процессе в зарядной сессии списывается обеспечительный платеж.
    • Оплата при завершении зарядной сессии по событию Avaiable - списывается оставшаяся накопленная сумма.

      При необходимости списания обеспечительного взноса, система проверяет наличие средств на балансе клиента. Если на балансе есть определенная сумма, то формируется заказ на пополнение в размере недостающей суммы.

  • При постоплате:

    • При завершении бронирования станции;

    • Промежуточные списания накопленной суммы во время зарядки при достижении денежной суммы в N рублей, где N - это параметр стенда.

    • Оплата при завершении зарядной сессии по событию Avaiable - списывается оставшаяся накопленная сумма.

  • В общих случаях (исключения):

    • Промежуточное списание накопленной суммы в условиях, если:
      • Станция, на которой идет зарядка, стала недоступной (прислала статус Unavailable)
      • После отключения в течение 30 минут не вышла в сеть.

Схема точек списаний

Для различных эквайрингов на стендах может быть установлен параметр минимальной суммы списания.

Например, на RU стенде для ЮKassa нельзя запросить на оплату меньше 1 рубля, поэтому если нужно взять копейки отдельно - например, если чуть больше накопилось при завершении или во время парковки, то нужно снимать рубль и оставшуюся часть класть на баланс.

1. Процесс привязки банковской карты

Для оплаты услуг с банковской карты пользователю необходимо привязать карту в приложении.

Привязка карты

  1. Пользователь нажимает "Привязать карту".
  2. На бэкенде в Системе управления формируется запрос к банку - ссылка на форму ввода данных отправляется пользователю.
  3. Пользователь автоматически переходит из приложения на форму ввода данных банковской карты.
  4. На бэкенде в Системе управления в рамках процесса привязки карточки формируется заказ со статусом "Pending" в качестве проверочного платежа.
  5. Пользователь заполняет форму ввода данными банковской карты и нажимает "Заплатить".
  6. Пользователь возвращается обратно в приложение на страницу "Способов оплаты".
  7. Банк присылает Системе управления информацию о том, что заказ был оплачен. Если такого функционала у банка нет, то раз в 30 секунд система запрашивает статус у банка по всем сформированным заказам (со статусом "Pending") на привязку карты у данного клиента.
    • Если пользователь не вводил данные карты в форму - заказ помечается как "отмененный".
    • Если пользователь ввел данные банковской карты и заплатил - заказ помечается как "успешный".
  8. Далее, если проверочный платеж прошел "успешно" - Система управления формирует запрос на возврат проверочного платежа и отправляет его в банк.
  9. Банк отменяет заказ и подтверждает, что возврат оформлен.
  10. Статус заказа в Системе управления меняется на возвращенный (статус "Refunded").

2. Процесс пополнения внутреннего баланса

Пополнение баланса

  1. Пользователь нажимает "Пополнить баланс".
  2. Указывает сумму пополнения баланса и нажимает "Отправить". Пополнение баланса
  3. Далее пользователь выбирает способ пополнения баланса.
  4. На бэкенде в Системе управления формируется запрос к банку - ссылка на форму ввода данных отправляется пользователю.
  5. Пользователь автоматически переходит на форму ввода данных кошелька/банковской карты.
  6. На бэкенде в Системе управления в рамках процесса пополнения внутреннего баланса формируется заказ со статусом "Pending" на указанную сумму.
  7. Пользователь заполняет форму ввода и нажимает "Заплатить".
  8. Пользователь возвращается обратно в приложение на страницу "Способов оплаты".
  9. Банк присылает Системе управления информацию о том, что заказ был оплачен. Если такого функционала у банка нет, то раз в 30 секунд Система управления запрашивает актуальный статус по всем сформированным заказам (со статусом "Pending") на пополнение баланса у данного клиента.
    • Если пользователь не вводил данные карты в форму - заказ помечается как "отмененный" (в Системе управления применяется статус "Canceled").
    • Если пользователь ввел данные карты и заплатил - заказ помечается как "успешный".
  10. Далее, если проверочный платеж прошел "успешно" - Система управления пополняет внутренний баланс клиента на оплаченную сумму.
  11. Статус заказа в Системе управления меняется на успешный (статус "Success").

Если у клиента в системе есть долг, то перед пополнением внутреннего баланса проходит процесс списания долгов - см. пункт 7.

3. Процесс оплаты резерва

3.1 Процесс оплаты резерва - в режиме постоплаты

  1. Пользователь в приложении нажимает "Зарезервировать станцию" и выбирает время резерва. Параметры бронирования
  2. На бэкенде в Системе управления в формируется заказ на резерв станции.
  3. По таймеру - раз в минуту осуществляется проверка активности резервов. Анализируется, сколько времени прошло и стоимость заказа.
    • Если время резерва закончилось автоматически - по нему высчитывается сумма к оплате (в зависимости от выбранного времени резерва), формируется заказ на оплату - чек "Оплата резерва №" и происходит оплата резерва:
      • если оплата прошла не успешно (статус заказа "Error") - у клиента формируется долг в размере стоимости резерва.
      • если оплата прошла успешно, то у заказа будет статус "Success".
    • Если пользователь вручную завершил резерв - по нему высчитывается сумма к оплате (в зависимости от фактического времени активности резерва), формируется заказ на оплату - чек "Оплата резерва №" и происходит оплата резерва, аналогично как в пункте выше.

3.2 Процесс оплаты резерва - в режиме предоплаты

  1. Пользователь в приложении нажимает "Зарезервировать станцию" и выбирает время резерва. Параметры бронирования
  2. Система формирует заказ на списание обеспечительного взноса в размере, покрывающем стоимость выбранного времени резерва - формируется чек "Оплата резерва №" и происходит списание с карты:
    • если оплата прошла не успешно (статус "Error") - система возвращает отказ на бронирование.
    • если оплата прошла успешно (статус "Success") - система фиксирует резерв станции.
  3. По таймеру - раз в минуту осуществляется проверка активности резервов. Анализируется, сколько времени прошло и стоимость заказа.
    • Если пользователь вручную завершил резерв - по нему высчитывается сумма к возврату (разница между обеспечительным платежом, списанным при бронировании, и фактической стоимостью резерва, в зависисмости от времени активности резерва), формируется заказ на возврат оплаты - чек "Возврат оплаты резерва №" и происходит возврат:
      • если возврат прошел не успешно (статус "Error") - у клиента на балансе фиксируется сумма возврата.
      • если оплата прошла успешно (статус "Success") - расчет по бронированию станции оплачен в полном размере, излишки возвращены клиенту на карту.
    • Если резерв завершился по причине запроса на начало зарядной сессии - по нему высчитывается сумма к возврату (разница между обеспечительным платежом, списанным при бронировании, и фактической стоимостью резерва, в зависисмости от времени активности резерва). Разница возвращается клиенту на баланс.

4. Процесс оплаты зарядной сессии

4.1 Процесс оплаты зарядной сессии - в режиме постоплаты

Процесс оплаты зарядной сессии - в режиме постоплаты

  1. При получении Start Transaction проверяется наличие активного резерва:
    • если есть активный резерв, то по нему высчитывается сумма к оплате, формируется заказ на оплату - чек "Оплата резерва №" и происходит оплата резерва:
      • если оплата прошла не успешно (статус "Error") - отправляется StopTransaction на станцию и у клиента возникает долг в размере стоимости резерва.
      • если оплата прошла успешно (статус "Success") - начинается процесс зарядки.
    • если активного резерва нет, то начинается процесс зарядки.

      Если по тарифу старт зарядки платный, то на этом шаге также списывается фиксированный платеж за старт.

  2. В процессе зарядки при получении MeterValue происходит расчет - достигает ли текущая сумма по зарядке значения минимально необходимого к оплате (параметр промежуточного списания в N рублей)
  3. Если текущая сумма достигла минимально необходимого для оплаты значения, то формируется заказ на оплату - чек "Оплата зарядной сессии №..." и происходит оплата:
    • если оплата прошла не успешно (статус "Error") - отправляется запрос на станцию для остановки зарядки и у клиента на балансе возникает долг.
    • если оплата прошла успешно (статус "Success") - процесс зарядки продолжается.
  4. При получении StopTransaction (завершение зарядной сессии на станции) мы имеем конечное значение по количеству потребленной энергии на станции, по которому расчитывается итоговая стоимость зарядки: время зарядки × потребленная мощность × тариф.
  5. Сравниваем итоговую стоимость зарядки и сколько из этой суммы оплатил клиент. Для оплаты разницы, полученной между "начисленной" и "оплаченной" суммой, формируется финальный заказ на оплату - чек "Оплата зарядной сессии №..." и происходит оплата:
    • если оплата прошла не успешно (статус "Error") - у клиента на балансе возникает долг.
    • если оплата прошла успешно (статус "Success") - зарядная сессия полностью оплачена.

Если в процессе зарядной сессии станция стала недоступной и не присылала статусы в течение 30 минут, то система списывает накопленную сумму, не дожидаясь StopTransaction.

4.2 Процесс оплаты зарядной сессии - в режиме предоплаты

Процесс оплаты зарядной сессии - в режиме предоплаты

  1. При получении Remote Start Transaction система формирует заказ на списание обеспечительного взноса, необходимого для старта зарядки - формируется чек "Оплата зарядной сессии №..." и происходит списание недостающих средств:
    • если оплата прошла не успешно (статус "Error") - система возвращает отказ (отправка StopTransaction на станцию).
    • если оплата прошла успешно (статус "Success") - деньги хранятся на балансе, система отправляет команду на начало зарядки (отправка StartTransaction на станцию).
  2. В процессе зарядки при получении MeterValue происходит расчет - достигает ли текущая сумма по зарядке значения обеспечительного платежа, необходимого для продолжения зарядки (параметр обеспечительного платежа в X рублей)
  3. Если текущая сумма по зарядке достигла суммы обеспечительного платежа, необходимого для продолжения зарядки, то формируется заказ на списание средств до суммы необходимого обеспечительного платежа - чек "Оплата зарядной сессии №..." и происходит оплата:
    • если оплата прошла не успешно (статус "Error") - отправляется запрос на станцию для остановки зарядки.
    • если оплата прошла успешно (статус "Success") - процесс зарядки продолжается.
  4. При получении StopTransaction (завершение зарядной сессии на станции) мы имеем конечное значение по количеству потребленной энергии на станции, по которому расчитывается итоговая стоимость зарядки: время зарядки × потребленная мощность × тариф.
  5. Сравниваем итоговую стоимость зарядки и сколько из этой суммы оплатил клиент в качестве обеспечительного платежа. Разница, полученная между "оплаченной" и "начисленной" суммой, фиксируется у клиента на балансе.

Если в процессе зарядной сессии станция стала недоступной и не присылала статусы в течение 30 минут, то техподдержка изучает сессию, получает последнее значение, которое присылала станция, вручную рассчитывает сумму к возврату и проводит возврат.

5. Процесс оплаты парковки

5.1 Процесс оплаты парковки - в режиме постоплаты

  1. Рассчитывается время парковки - с момента получения статуса StopTransaction и до получения статуса о доступности станции, когда пользователь больше не взаимодействует с ней.
  2. Рассчитывается стоимость парковки по следующей логике: "Время парковки (из п.1)" * "Стоимость минуты парковки" - "10 минут бесплатной парковки".
  3. Для оплаты парковки формируется заказ на оплату - чек "Оплата зарядной сессии №..." и происходит оплата:
    • если оплата прошла не успешно (статус "Error") - у клиента на балансе возникает долг.
    • если оплата прошла успешно (статус "Success") - зарядная сессия полностью оплачена.

5.2 Процесс оплаты парковки - в режиме предоплаты

  1. Рассчитывается время парковки - с момента получения статуса StopTransaction и до получения статуса о доступности станции, когда пользователь больше не взаимодействует с ней.
  2. Рассчитывается стоимость парковки по следующей логике: "Время парковки (из п.1)" * "Стоимость минуты парковки" - "10 минут бесплатной парковки".
  3. Система сравнивает итоговую стоимость зарядки и сколько из этой суммы оплатил клиент в качестве обеспечительного платежа:
    • если после завершения зарядной сессии у клиента есть долг, то формируется заказ на оплату недостающуей суммы - чек "Оплата зарядной сессии №..." и происходит оплата:
      • если оплата прошла не успешно (статус "Error") - у клиента на балансе возникает долг.
      • если оплата прошла успешно (статус "Success") - зарядная сессия полностью оплачена.
    • если после завершения зарядной сессии у клиента образовалась переплата, формируется заказ на возврат в размере переплаты - чек "Возврат по зарядной сессии №..." и происходит возврат:
      • если возврат прошел не успешно (статус "Error") - у клиента на балансе фиксируется сумма возврата.
      • если возврат прошел успешно (статус "Success") - зарядная сессия полностью оплачена, излишки возвращены клиенту на карту.

6. Процесс ручной корректировки баланса

  1. Сотрудник тех.поддержки в Системе управления корректирует баланс клиента, указывая сумму, причину списания/начисления и связанную сущность (номер транзакции).
  2. В Системе управления формируется заказ с описанием "Ручная корректировка баланса" и баланс клиента изменяется.

Если был начислен долг, то он имеет привязку к сущности (зарядной сессии/резерву), тогда в дальнейшем при оплате долга платеж будет с описанием "Оплата зарядной сессии №" или "Оплата резерва" - подробнее в разделе 7.

7. Процесс списания долга

Уйти в долг можно только в рамках одной сессии.

Если для оплаты недостаточно средств - зарядная сессия останавливается.

Причины начисления долга

Задолженность у пользователя может образоваться, если:

  • во время зарядной сессии не удалось списать денежные средства с карты (платеж со статусом "Error") и система автоматически начислила долг пользователю.

  • при расчете стоимости сессии произошла ошибка (например, задвоилось списание или нулевое начисление) и сотрудники тех. поддержки осуществили ручную корректировку баланса в Системе управления (описано в разделе 6).

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

Способы погашения задолженности

Пользователь в приложении может погасить задолженность двумя способами:

  • через кнопку "Погасить" в приложении
  • через пополнение внутреннего баланса (см. раздел 2)

Процесс списания долга

  1. Пользователь с отрицательным балансом в приложении нажимает кнопку "Погасить".
  2. Система управления проверяет, по каким сущностям у клиента (зарядным сессиям/резервам) сумма "оплачено" не равна "начисленной".
  3. По каждому событию несовпадения формируется заказ на оплату:
    • Если у сущности есть привязка к транзакции, то формируется платеж с описанием "Оплата резерва" или "Оплата зарядной сессии №..." и направлет пользователя на страницу оплаты в банк:
      • если оплата прошла не успешно (статус "Error") - у клиента не изменяется баланс, т.е. долг остается.
      • если оплата прошла успешно (статус "Success") - долг по оплаченной сущности погашен.
    • Если после погашения долга на балансе клиента все равно остается минусовая сумма - это несовпадения по сущностям без привязки к транзакции. Тогда погашение данной суммы будет формироваться как платеж с описанием "Оплата без привязки".

Если пользователь погашает долг путем пополнения внутреннего баланса, то сначала списывается сумма долга по логике, описанной в п. 2 и 3 данного раздела. А оставшаяся после погашения долга сумма зачисляется на баланс клиента как платеж с описанием "Пополнение внутреннего баланса".