Быстрый старт
Три запроса от нуля до активной подписки — на демо-доступах, без регистрации.
Обмен сообщениями
Мерчант Subscription Service Абонент
│ │ │
│ 1. CreateSubscription ──────►│ │
│◄── SubscriptionID + SMS_PIN ─│ ~~~ SMS с PIN ~~~~~~~~~~~►│
│ │ (в песочнице не шлётся) │
│ 2. ApproveSubscription ─────►│◄── абонент сообщает PIN ──│
│◄── REQUEST_ACCEPTED ─────────│ │
│ │ │
│ 3. GetSubscriptionStatus ───►│ │
│◄── SubscriptionStatus=Active │ │
│ │ │
│◄─ SubscriptionStatusNotification ─│ через 15 с после подтверждения- Возьмите доступы проекта —
SubscriptionProjectIDиSecretKey. В песочнице это опубликованные демо-доступы, регистрация не нужна: они перечислены в разделе «Доступ и тестовые данные». - Посчитайте подпись. У подписок она своя и отличается от разовых платежей: HMAC-SHA256 по строке
SubscriptionProjectID + Now. Разбор — в разделе «Подпись запросов». - Создайте подписку методом
CreateSubscription. В ответе придутSubscriptionIDиSubscriberAcceptanceChannel=SMS_PIN— подписка ждёт подтверждения абонента. - Подтвердите её методом
ApproveSubscription. SMS песочница не отправляет, PIN фиксированный —1234; на подбор даётся 3 попытки, после чего подписка навсегда переходит вApprovingFailed. - Проверьте статус методом
GetSubscriptionStatus— придётActive. После подтверждения на ваш callback URL уходитSubscriptionStatusNotificationсEventType=APPROVED(задержка 15 секунд). См. «Коллбеки».
Оплата картой или через СБП вместо SMS. Передайте в CreateSubscription поля CustomerType=Card и CustomerId — в ответе придёт AuthorizeUrl, страница оплаты. Шаг ApproveSubscription в этом сценарии не нужен: подписка активируется по факту оплаты. Разбор — в разделе «Подписка картой и СБП».
Сохраняйте SubscriptionID из ответа CreateSubscription. Он идентифицирует подписку во всех остальных методах — и в песочнице, и в бою.
Шаг 2 — подпись
Sandbox
curl
# ключ — SecretKey, сообщение — SubscriptionProjectID + Now
PROJECT=2001
SECRET=subs_secret_key
NOW=$(date -u +%Y%m%d%H%M%S)
SIG=$(printf '%s' "$PROJECT$NOW" | openssl dgst -sha256 -hmac "$SECRET" -r | cut -d' ' -f1)Шаг 3 — ответ CreateSubscription
<Response>
<StatusName>REQUEST_ACCEPTED</StatusName>
<SubscriptionID>83159745</SubscriptionID>
<SubscriberAcceptanceRequired>true</SubscriberAcceptanceRequired>
<SubscriberAcceptanceChannel>SMS_PIN</SubscriberAcceptanceChannel>
<OperatorID>22</OperatorID>
<PaidUntil>2026-09-05T18:16:55+03:00</PaidUntil>
</Response>Шаги 4 и 5
<!-- подпись пересчитывается заново: Now новый -->
<Request>
<SubscriptionProjectID>2001</SubscriptionProjectID>
<SubscriptionID>83159745</SubscriptionID>
<PinCode>1234</PinCode>
<Now>…</Now><Signature>…</Signature>
</Request>
<!-- GetSubscriptionStatus -->
<SubscriptionStatus>Active</SubscriptionStatus>
<PaidUntil>2026-09-05T18:16:55+03:00</PaidUntil>Коллбек — приходит сам
<Request>
<SubscriptionID>83159745</SubscriptionID>
<SubscriptionProjectID>2001</SubscriptionProjectID>
<Subscriber_MSISDN>79600000000</Subscriber_MSISDN>
<EventType>APPROVED</EventType>
<SubscriptionStatus>Active</SubscriptionStatus>
<BillingIteration>1</BillingIteration>
<CustomerPrice currency="RUB" amount="0.00"/>
</Request>