Assalam Docs

Как это устроено

Объекты платформы, идентификаторы и кто что хранит

Цепочка идентификаторов

Ваш пользователь, карта в Assalam и карта в банке — три разные сущности. Связывает их одна ссылка на каждом уровне.

Ваша система
Пользователь продукта
ваш id
user_1024
сохраняете
cmsr7d1e
← идентификатор карты в Assalam
Assalam
Платёжный метод (карта)
id
cmsr7d1e
customerRef
user_1024
ваша метка, для нас — строка
maskedPan
860031******3131
railToken
bfebf7d7-…
наружу не отдаётся
Банк
Токен карты
agentCardToken
bfebf7d7-…
знает о клиенте
ничего
только токен и сумма

Коротко

При списании вы передаёте только идентификатор карты (поле card). Платформа сама находит карту, достаёт токен банка и отправляет операцию. Данные пользователя в запросе списания не участвуют.

Кто что хранит

ДанныеВыAssalamБанк
Кто ваш пользователь (ФИО, телефон, заказы)данетнет
Связь «пользователь → карта» (paymentMethodId)дапо customerRefнет
Номер карты (PAN)нетнетда
Маска, эмитент, имя держателяне обязательнодада
Токен карты для списанийнетдада

Платформа не знает ваших пользователей. customerRef — произвольная строка, которую передаёте вы: ваш внутренний id, номер договора, что угодно. Для нас это метка без смысла, по ней удобно фильтровать список карт.

Что вы обязаны сохранить

После успешной привязки сохраните paymentMethodId рядом со своим пользователем. Это единственное, что нужно для будущих списаний.

Полезно сохранить и маску карты (maskedPan) — чтобы показывать клиенту, какой картой он платит, не обращаясь к нам лишний раз.

Ваша БД — сохраните после привязки
// таблица пользователей вашего продукта
{
  "userId": "user_1024",
  "phone": "998901234567",
  "assalamPaymentMethodId": "cmsr7d1e",
  "cardMask": "8600 31** **** 3131"
}
Ваш сервер · списание
# берёте id карты из своей БД по своему пользователю
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": 180000,
    "card": "cmsr…"
  }'

Если не сохранили — не страшно: карты клиента находятся по вашей же метке через GET /subscribe/v1/cards?customerRef=…. Но хранить у себя надёжнее и быстрее.

Ваш сервер · если id карты не сохранили
# найти карты по своей же метке клиента
curl "https://api.assalam.uz/subscribe/v1/cards?customerRef=user_1024" \
  -H "Authorization: Bearer sk_test_..."
Ответ
{
  "object": "list",
  "data": [
    {
      "id": "cmsr7d1e",
      "object": "payment_method",
      "maskedPan": "860031******3131",
      "status": "ACTIVE",
      "processingSystem": "UZCARD",
      "customerRef": "user_1024"
    }
  ],
  "has_more": false
}

Объекты платформы

  • Продукт — ваш сервис в платформе. У него свои ключи, свой баланс и свои карты. Объекты одного продукта не видны другому.
  • Сессия привязки (checkout_session) — одноразовый процесс добавления карты. Живёт 15 минут, заканчивается получением карты.
  • Карта (payment_method) — привязанная карта клиента. Хранится, пока её не отключат.
  • Платёж (payment_intent) — одно списание. Создаётся, затем подтверждается.

Почему нельзя списать с чужой карты

Продукт определяется ключом API, а не телом запроса. Карта другого продукта или другого режима вернёт 404 — как несуществующая. Подставить чужой paymentMethodId не получится.

Внутри одного продукта разделения по клиентам нет: если у вас есть paymentMethodId, вы можете им списать. Следите за тем, чтобы ваш код брал идентификатор карты того пользователя, который сейчас платит.

Частая ошибка

Не берите «первую активную карту продукта» — берите карту конкретного пользователя. Именно поэтому связь «пользователь → карта» должна храниться у вас, а не восстанавливаться на ходу.

Дальше по теме

На этой странице