Типовые ошибки интеграции
Подпись не сходится, хотя «та же, что у платежей»
У подписок другая схема. В Callisto подпись считается двумя проходами HMAC (login + inner), здесь — одним: ключ — SecretKey, сообщение — SubscriptionProjectID + Now. Логин в подпись не входит вовсе, и секрет у подписок свой, отдельный от секрета разовых платежей.
| Причина | Как проверить |
|---|---|
| Взята формула Callisto | У подписок один проход HMAC, а не два, и без логина |
| Локальное время вместо UTC | Now всегда UTC в формате yyyyMMddHHmmss |
Подписан один Now, отправлен другой | Считайте метку один раз и кладите и в подпись, и в тело |
| Перепутан секрет | Секрет подписок отдельный от секрета разовых платежей |
ApproveSubscription отвечает ExceededSubscriptionApprovingAttempts
На подбор PIN даётся три попытки. После третьей неудачи подписка навсегда переходит в ApprovingFailed: верный PIN её уже не поднимет, нужен новый CreateSubscription. Тот же ответ приходит, если подписку не подтвердили за 3 часа.
Создал подписку заново на тот же номер — SubscriptionAlreadyCreated
Подписка уникальна для пары проект + Subscriber_MSISDN: пока прежняя не отменена, повторный CreateSubscription отклоняется — так же ведёт себя боевой сервис. SubscriptionID существующей подписки печатается в ErrorDescription, чтобы можно было продолжить сценарий. Чтобы прогнать его начисто, берите другой номер или сначала вызовите CancelSubscription.
После оплаты картой коллбек не пришёл
Проверьте, что абонент дошёл до конца страницы AuthorizeUrl: подписка активируется по факту оплаты, а не по открытию ссылки. Ссылка одноразовая и живёт 15 минут. Если карта заканчивалась на 0001…0005, оплата отклонена намеренно — придёт EventType=REJECTED.
Метод возвращает ошибку разбора
Имя метода передаётся в пути и регистронезависимо, но должно быть одним из пяти поддерживаемых (см. «Методы»). Тело — XML либо application/x-www-form-urlencoded; при Content-Type: text/xml пустое тело или неразбираемый XML дают WRONG_PARAMS.