Приём оплаты за четыре шага
Заказ, ссылка на оплату и событие об исходе
Банк не даёт метода «оплатить товар» — он умеет привязать карту и списать с привязанной. Разовая оплата собирается из этих действий, и собираем её мы. Для вас это один заказ и одно событие: карт, кодов из СМС и способов оплаты в вашем коде не будет.
Возьмите ключ с областью «продажа товаров»
Выпускается в кабинете. Такой ключ не достаёт до карт клиентов — при утечке им нельзя списать с чужой сохранённой карты.
Создайте заказ
amount — в тийинах, returnUrl — куда вернуть покупателя после оплаты,
успешной или нет. В ответе придёт paymentUrl.
Idempotency-Key делайте производным от номера вашего заказа, а не случайным:
случайный ключ при повторе запроса создаст второй заказ и вторую ссылку
на оплату.
curl -X POST https://api.assalam.uz/merchant/v1/orders \
-H "Authorization: Bearer sk_test_..." \
-H "Idempotency-Key: order-1024" \
-H "Content-Type: application/json" \
-d '{
"amount": 112000,
"returnUrl": "https://shop.uz/order/1024/done",
"description": "Заказ A-1024",
"customerRef": "user_42"
}'{
"id": "cmsr…",
"object": "order",
"amount": 112000,
"currency": "UZS",
"status": "PENDING",
"paymentUrl": "https://checkout.assalam.uz/pay/44705b…",
"expiresAt": "2026-08-21T21:42:43.813Z",
"returnUrl": "https://shop.uz/order/1024/done",
"livemode": false
}Отправьте покупателя на paymentUrl
Он увидит ваше название, описание заказа и сумму, введёт карту и код из СМС.
Дальше мы спишем деньги и вернём его на returnUrl.
Дождитесь события
order.paid — деньги списаны, order.expired — срок вышел, покупатель
не заплатил. Опрашивать нас не нужно; метод GET есть на случай, если ваш
сервис лежал.
{
"id": "evt_…",
"type": "order.paid",
"data": {
"id": "cmsr…",
"object": "order",
"amount": 112000,
"status": "PAID",
"paidAt": "2026-08-21T21:25:10.000Z",
"paymentIntent": "cmsr…"
}
}curl https://api.assalam.uz/merchant/v1/orders/cmsr… \
-H "Authorization: Bearer sk_test_..."Оплатить и сохранить карту
Поле saveCard: true оставляет карту покупателя после оплаты, и дальше вы
списываете ею сами — уже через Subscribe API. Идентификатор карты
придёт в поле savedCard вместе с событием order.paid.
По умолчанию карта отвязывается сразу после оплаты. Так и написано покупателю на странице: хранить чужую карту без нужды — лишний риск.
Возврат на карту сейчас невозможен
Банк не передал нам операцию возврата. Если ваш сценарий предполагает возвраты, прочтите «Чего пока нельзя» до запуска.