В главное меню

О создании и изменении статуса подписки


Дополнение к уведомлению по платежам

Для подписок дополнительно к разделу уведомление о платеже добавляется еще и этот раздел.

При проведении регулярных списаний отправляется уведомление об успешном/неуспешном платеже. Уведомление о самой подписке отправляется только при наступлении ситуаций, описанных в ReasonCode. О том, сколько попыток списания провести и какой интервал между попытками указывайте при обсуждении настроек для вашего продукта. Например, если у пользователя нет ДС на карте, подписка сразу не отключается, а проходят повторные попытки, по истечении всех попыток - подписка приостанавливается.

В структуру уведомления по платежу добавляется блок susbscription:

Поле

Тип

Обяз.

Описание

subscription

object

нет

Блок информации по подписке

Описание структуры subscription

Поле

Тип

Обяз.

Описание

id

guid

да

ID подписки

Пример JSON:

{
  "id" : 223205,
  "amount" : 10.0,
  "currency" : "643",
  "status" : "EXECUTED",
  "paymentTime" : "2021-05-05T13:07:46.955962",
  "serviceId" : 6340,
  "serviceParams" :
  {
    "id1" : "108882256562",
    "NUMBER" : "79157802494",
    "payerEmail" : "test@mts.ru"
  },
  "sessionId" : "a8d288ccf2db41ada7fac6f43831be59",
  "extClientId" : "4673804f-663c-4ab4-9888-78e9f68ffd3d",
  "subscription" :
  {
    "id" : "dd0ce6e2-b9fb-4ea1-91a3-7035ab8240a9"
  }
}

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

Дополнительную проверку подлинности сообщения можно выполнить с помощью запроса: Получение списка подписок

Настройки

Так же как и с платежами, требуется от партнера получить заранее URL адрес на который отправлять информацию по изменению статусов у подписок. Платежный шлюз МТС отправляет на указанный в профиле URL уведомление в случае изменения статуса подписки. Статус подписки может измениться в результате неуспешного очередного списания, по запросу плательщика и по техническим причинам.

Возможные основные статусы подписки:

значение

описание

тип

activeПодписка активнаосновной
creatingПодписка в процессе созданиятехнический

disabled

Подписка отключена

основной
onHold

Подписка заморожена

технический
paymentProcessВыполняется платежтехнический
repeatedPayВыполняются попытки платежатехнический

suspended

Подписка приостановлена

основной

Регулярные платежи

Во время создания платежной сессии, на основе переданных period и periodQuant, мы определяем дату следующего списания nextPaymentDate.

При наступлении этой даты и времени, временно устанавливаем статус paymentProcess, выполняем попытку списания, после чего отправляем уведомление о результате платежа:

  • если успешно, то статус платежа EXECUTED, а мы в это время:
    • возвращаем статус подписки active;
    • высчитываем следующую дату платежа на основе period и periodQuant;
    • посмотреть последнюю дату платежа и следующую дату платежа можно также запросив информацию по подписке, передав id подписки:
      • lastPaymentDate;
      • nextPaymentDate.
  • если не успешно, то статус REJECTED, а мы в это время:
    • если для вас настроены повторные попытки списания, то:
      • переведем подписку в статус repeatedPay;
      • поставим номер попытки в failedAttemptsQty (после успешного списания сбросим значение на 0);
      • определим дату следующего списания согласно настройкам повторов.
      • вернемся к повтору списания, когда наступит nextPaymentDate, как вначале.
    • если повторные попытки закончились или они не настроены, либо причина по которой попытка списания указывает, что нет смысла повторно пытаться:
      • переведем подписку в статус suspended;
      • отправим вам уведомление.
  • если по подписке суммы платежа на данный момент = 0р.:
    • никаких уведомлений по платежу не будет;
    • переведем значение в nextPaymentDate;
    • заполним lastPaymentDate.

Входные параметры

Уведомление отправляется как HTTP-запрос на адрес, указанный в настройках Партнера, в следующем формате:

Заголовок запроса

POST
Endpoint: {merchant_url}/{subscriptionId} HTTP/1.1
Content-Type: application/json

Параметр запроса

Поле

Тип

Обяз.

Описание

subscriptionId

guid

да

ID подписки

Тело запроса

Поле

Тип

Обяз.

Описание

status

string

да

Статус подписки:

  • active;
  • disabled;
  • suspended.

reasonCode

string

нет

Дополнительное описание статуса подписки

updateAt

dateTime

да

Дата и время смены статуса подписки

Выходные параметры

Уведомление считается принятым, если получатель ответил на запрос кодом HTTP 200 OK.

Заголовок ответа

Content-Type: application/json; charset=utf-8
http-code: 200
http-status: OK

Тело ответа

Поле

Тип

Обяз.

Описание

result

string

да

SUCCESS|ERROR

errorMessage

string

нет

Если result=ERROR

Пример

Заголовок запроса

POST {merchant_url}/246da738-3947-408c-9d40-5c39ad16cc12 HTTP/1.1
Host:
Content-Type: application/json

Тело запроса

{
  "status": "suspended",
  "reasonCode": "PAYMENT_FAILED",
  "updateAt": "2021-11-18T19:06:16.778Z"
}

Заголовок ответа

Content-Type: application/json; charset=utf-8
http-code: 200
http-status: OK

Тело ответа

{
  "result": "ERROR",
  "errorMessage": "что-то пошло не так"
}

Subscription reasonCode

Значение

Описание

CREATED

Подписка создана

SUSPENDED

Подписка приостановлена

DISABLED

Подписка отключена

CHANGE_NEXT_PAYMENT_DATE

Изменилась дата следующего списания

REACHED_END_DATE

Достигнута дата окончания подписки

PAYMENT_FAILED

Платеж не успешен

RECOVERED

Подписка восстановлена

SUSPENDED_BY_USER

Подписка приостановлена пользователем