Первое списание за пять шагов
От привязки карты до денег на балансе
Путь целиком: от тестового ключа до успешного списания с сохранённой карты. Банк и VPN для этого не нужны — всё работает в тестовом режиме.
Получите тестовый ключ
Ключ вида sk_test_... выдаётся в кабинете продукта или у администратора
платформы. Держите его на сервере: в браузер и в мобильное приложение
секретный ключ передавать нельзя.
Создайте сессию привязки карты
Запрос делается с вашего сервера. В ответе придёт ссылка url — откройте
её клиенту в WebView или редиректом. Номер карты в ваш бэкенд при этом
не попадёт.
curl -X POST https://api.assalam.uz/subscribe/v1/card_sessions \
-H "Authorization: Bearer sk_test_..." \
-H "Content-Type: application/json" \
-d '{
"returnUrl": "https://your.app/cards/return",
"customerRef": "user_1024"
}'{
"id": "cmsr9f2c",
"url": "https://checkout.assalam.uz/s/6a3f...",
"clientToken": "6a3f...",
"expiresAt": "2026-08-14T10:15:00.000Z",
"livemode": false
}Клиент вводит карту и код из SMS
В тестовом режиме подойдёт любой номер из 16 цифр (например
8600 0000 0000 1234), любой будущий срок и код 111111. После успеха
клиент вернётся на ваш returnUrl.
Заберите идентификатор карты
Снова с сервера: GET /subscribe/v1/card_sessions/{id} вернёт статус
COMPLETED и paymentMethodId. Сохраните его у себя рядом со своим
пользователем — это и есть «карта» для будущих списаний.
Спишите деньги
Одним вызовом: карта известна заранее, и ждать между «создать» и «подтвердить» здесь нечего. Кода из СМС клиент второй раз не вводит — согласие он дал при привязке.
Сумма — в тийинах: 5000000 это 50 000 сум.
curl -X POST https://api.assalam.uz/subscribe/v1/charges \
-H "Authorization: Bearer sk_test_..." \
-H "Idempotency-Key: order-1024" \
-H "Content-Type: application/json" \
-d '{
"amount": 5000000,
"card": "cmsr…",
"description": "Полис ОСАГО"
}'{
"id": "cmsr…",
"object": "payment_intent",
"status": "SUCCEEDED",
"amount": 5000000,
"card": "cmsr…",
"rail": "mock",
"livemode": false
}Idempotency-Key — не формальность
Если ответ не дошёл из-за обрыва связи, повторите запрос с тем же ключом. Вы получите прежний результат, а не второе списание. Новый ключ на повтор — это новый платёж.
Проверьте сценарии отказов
В тестовом режиме отказ вызывается суммой: последние цифры 13 — отказ
банка, 14 — недостаточно средств, 15 — таймаут. Обработайте их
до боевого запуска.