Хуки песочницы: Списания
В бою подписка тарифицируется по расписанию проекта — раз в 30 дней и так несколько циклов. Ждать этого в тесте нельзя, поэтому цикл сжимается блоком <TestInfo> в CreateSubscription: период задаётся в секундах, а исход списания выбирается заранее.
| Поле | Значение |
|---|---|
BillingPeriodSeconds | 1…86400. Включает цикл списаний — без этого поля списаний не будет вовсе. Задаёт и период между списаниями, и интервал повторной попытки после отказа |
MaxIterations | 1…100, по умолчанию 3. Сколько успешных списаний пройдёт, прежде чем подписка закроется (FINISHED / Closed) |
ExpectedBillingResult | Success (по умолчанию) или Failed — исход каждой попытки списания |
BillingAmount | Сумма списания в уведомлениях (CustomerPrice), по умолчанию 10. |
OperatorID | Оператор подписки, по умолчанию 22. Значение 20 включает поведение Мегафона: operation_status вместо action в обратном редиректе (WAP) и CancelUrl в ответе CancelSubscription |
Перед каждым успешным списанием мок присылает ContentRequest — запрос текста сервисного SMS. Отвечайте StatusName=REQUEST_ACCEPTED и блоком ContentMessage со значениями параметров; ответ сохраняется в журнале коллбеков.
Некорректные значения запрос не ломают: в лог уходит предупреждение, применяется значение по умолчанию. Отсчёт первого списания начинается с момента активации подписки (подтверждение PIN или оплата), а не с её создания.
Блока <TestInfo> в боевом контракте нет — уберите его перед переходом в прод. Там списания идут по расписанию проекта.
Что приходит при ExpectedBillingResult=Success
Каждый период — APPROVED_BILLING с растущим BillingIteration и сдвинутым PaidUntil. На последней итерации следом приходит FINISHED, подписка переходит в Closed, списания прекращаются.
Что приходит при Failed
Попытка списания не проходит: REJECTED_BILLING_ATTEMPT, статус Redelivering, BillingErrorCode=210 («нет средств»), через период — следующая попытка. После третьей неудачи — REJECTED_BILLING и RenewingFailed: подписка закрыта, новых попыток не будет.
<Request>
<SubscriptionProjectID>2001</SubscriptionProjectID>
<Subscriber_MSISDN>79600000000</Subscriber_MSISDN>
<Now>20260817120000</Now>
<Signature>d2f36558ca5455be...</Signature>
<TestInfo>
<BillingPeriodSeconds>10</BillingPeriodSeconds>
<MaxIterations>3</MaxIterations>
<ExpectedBillingResult>Success</ExpectedBillingResult>
<BillingAmount>49.00</BillingAmount>
</TestInfo>
</Request># ExpectedBillingResult=Success
APPROVED сразу после подтверждения
APPROVED_BILLING +10 c BillingIteration=1
APPROVED_BILLING +20 c BillingIteration=2
APPROVED_BILLING +30 c BillingIteration=3
FINISHED +30 c SubscriptionStatus=Closed
# ExpectedBillingResult=Failed
APPROVED после подтверждения
REJECTED_BILLING_ATTEMPT +10 c Redelivering, BillingErrorCode=210
REJECTED_BILLING_ATTEMPT +20 c Redelivering
REJECTED_BILLING +30 c RenewingFailed