Для подписок дополнительно к разделу уведомление о платеже добавляется еще и этот раздел.
При проведении регулярных списаний отправляется уведомление об успешном/неуспешном платеже. Уведомление о самой подписке отправляется только при наступлении ситуаций, описанных в 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, выполняем попытку списания, после чего отправляем уведомление о результате платежа:
Уведомление отправляется как HTTP-запрос на адрес, указанный в настройках Партнера, в следующем формате:
Заголовок запроса
POST |
Параметр запроса
Поле | Тип | Обяз. | Описание |
|---|---|---|---|
subscriptionId | guid | да | ID подписки |
Тело запроса
Поле | Тип | Обяз. | Описание |
|---|---|---|---|
status | string | да | Статус подписки:
|
reasonCode | string | нет | Дополнительное описание статуса подписки |
updateAt | dateTime | да | Дата и время смены статуса подписки |
Уведомление считается принятым, если получатель ответил на запрос кодом HTTP 200 OK.
Заголовок ответа
Content-Type: application/json; charset=utf-8 |
Тело ответа
Поле | Тип | Обяз. | Описание |
result | string | да | SUCCESS|ERROR |
errorMessage | string | нет | Если result=ERROR |
POST {merchant_url}/246da738-3947-408c-9d40-5c39ad16cc12 HTTP/1.1 |
{
"status": "suspended",
"reasonCode": "PAYMENT_FAILED",
"updateAt": "2021-11-18T19:06:16.778Z"
}
Content-Type: application/json; charset=utf-8 |
{
"result": "ERROR",
"errorMessage": "что-то пошло не так"
}
Значение | Описание |
|---|---|
CREATED | Подписка создана |
SUSPENDED | Подписка приостановлена |
DISABLED | Подписка отключена |
CHANGE_NEXT_PAYMENT_DATE | Изменилась дата следующего списания |
REACHED_END_DATE | Достигнута дата окончания подписки |
PAYMENT_FAILED | Платеж не успешен |
RECOVERED | Подписка восстановлена |
SUSPENDED_BY_USER | Подписка приостановлена пользователем |