Интеграция VSPS: как отличить активные подписки от приостановленных
При разработке интеграции с VSPS (Visa Subscription Payment Service) для управления подписками на карты часто возникает вопрос: как программно различать активные и приостановленные подписки? В этой статье мы разберём ключевые поля API, типичные статусы и практические советы по работе с песочницей Visa.
Что такое VSPS и зачем различать статусы подписок?
VSPS - это сервис Visa для рекуррентных платежей по картам. При интеграции важно правильно обрабатывать жизненный цикл подписки: активные списания, добровольная приостановка (например, по запросу держателя карты) или блокировка. Ошибка в определении статуса может привести к неправильным списаниям или потере данных.
Основные статусы подписок в VSPS
Согласно документации Visa, подписка может находиться в одном из следующих состояний:
- ACTIVE - подписка активна, списания выполняются по расписанию.
- SUSPENDED - подписка приостановлена (например, временно по просьбе клиента или из-за проблем с картой).
- CANCELLED - подписка отменена.
- EXPIRED - срок действия подписки истёк.
Как отличить активную подписку от приостановленной через API
Для получения статуса используйте метод GET /subscriptions/{id}. В ответе ищите поле status. Если статус равен ACTIVE - подписка активна. Если SUSPENDED - приостановлена. Дополнительно можно проверить поле suspensionReason, которое содержит причину приостановки (например, cardholder_request).
Пример запроса на получение статуса:
GET /v1/subscriptions/sub_12345 HTTP/1.1
Host: api.visa.com
Authorization: Bearer <token>Пример ответа:
{
"id": "sub_12345",
"status": "SUSPENDED",
"suspensionReason": "cardholder_request",
"startDate": "2025-01-15",
"endDate": null
}Проблемы с песочницей Visa: нестыковки данных
Многие разработчики жалуются, что в песочнице Visa (VISA Sandbox) данные могут не соответствовать документации. Например, подписка со статусом SUSPENDED иногда возвращает некорректные поля или отсутствующие причины приостановки. Рекомендуется:
- Тестировать на реальных данных после выхода в production, используя тестовые карты Visa.
- Верифицировать статус через вебхуки (callbacks) от Visa, которые приходят при изменении состояния подписки.
- Использовать поле
nextBillingDate: если оноnullили в прошлом, подписка, скорее всего, приостановлена или завершена.
Практические рекомендации по интеграции
Чтобы избежать путаницы, следуйте этим советам:
- Всегда проверяйте поле
statusв ответе API, а не только полеactive(если оно есть). - Логируйте все изменения статусов через вебхуки, чтобы иметь полную историю.
- Если документация непонятна, используйте официальные примеры кода из репозитория Visa на GitHub.
- Для отладки в песочнице создавайте подписки с разными сценариями (например, с истечением срока или приостановкой) и сверяйте ответы.
Заключение
Различие между активными и приостановленными подписками в VSPS сводится к анализу поля status в ответе API. Несмотря на возможные нестыковки в песочнице Visa, использование вебхуков и дополнительных полей (например, nextBillingDate) поможет избежать ошибок. Придерживайтесь документации и тестируйте на реальных данных перед запуском.