Введение
Общая информация
Универсальная платформа приема платежей ATMOS позволяет мерчантам интегрировать свой сайт или мобильное приложение к платежнему шлюзу в целях организации приема платежей с банковских карт UzCard и Humo. Интеграция с платежной платформой ATMOS возможна следующими путями:
- Вызов платежного виджета на стороне клиента;
- Оплата посредством перехода на платежную страницу;
- Интеграция с API и прием оплат на внешнем клиенте мерчанта;
Начало работы
API работает по протоколу REST, формат всех сообщений - JSON. Для начала работы с API, мерчанту необходимо получить от ATMOS следующие данные:
- Consumer key
- Consumer secret
Также, перед началом работы, необходимо ознакомиться с принципом действия Callback API.
Тестовые данные
В разделе песочница приведены тестовые данные для интеграции и ознакомления с работой системы.
Авторизация в API
Для работы с ATMOS API необходимо получить токен доступа, который устанавливается в заголовки каждого запроса и служит уникальным идентификатором при проведении платежных операций. Ниже приведены инструкции по получению токена доступа к API.
Получение токена
Для получения bearer-токена:
curl --location --request POST 'https://apigw.atmos.uz/token?grant_type=client_credentials' \
--header 'Authorization: Basic Base64(consumer-key:consumer-secret)'
POST /token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic Base64(consumer-key:consumer-secret)
Host: apigw.atmos.uz
Content-Length: 29
//form-data
grant_type=client_credentials
Пример ответа:
{
"access_token": "<access_token>",
"scope": "am_application_scope default",
"token_type": "Bearer",
"expires_in": 2525
}
HTTP Request
POST https://apigw.atmos.uz/token
Принимает в качестве параметра зашифрованную строку в формате base64 по формуле - Base64(consumer_key + ':' + consumer_secret). В ответе сервера будет возвращен токен доступа, который действителен в течение 3600 секунд(1ч.).
Обновление токена
Для обновления bearer-токена:
curl --location 'https://apigw.atmos.uz/token' \
--header 'Authorization: Basic Base64(consumer-key:consumer-secret)' \
--header 'Content-Length: 29' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'refresh_token=<access_token>'
POST /token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic Base64(consumer-key:consumer-secret)
Host: apigw.atmos.uz
Content-Length: 29
//form-data
grant_type=client_credentials
refresh_token=<access_token>
Пример ответа:
{
"access_token": "<access_token>",
"scope": "am_application_scope default",
"token_type": "Bearer",
"expires_in": 2525
}
HTTP Request
POST https://apigw.atmos.uz/token
Имеет аналогичный функционал с преждним методом, за исключением того, что продлевает срок действия уже выданного токена.
Отзыв токена
Для отзыва bearer-токена:
curl --request POST \
--url https://apigw.atmos.uz/revoke \
--header 'Authorization: Basic Base64(consumer-key:consumer-secret) \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data token=<access_token>
POST /revoke HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic Base64(consumer-key:consumer-secret)
Host: apigw.atmos.uz
Content-Length: 29
//form-data
token=<access_token>
Пример ответа:
{
"access_token": "<access_token>",
"scope": "am_application_scope default",
"token_type": "Bearer",
"expires_in": 2525
}
HTTP Request
POST https://apigw.atmos.uz/revoke
Отменяет действие уже выданного токена.
Оплаты
API ATMOS позволяет проводить оплаты следующими путями:
- Путем отправки одноразового кода подтверждения при каждом платеже держателю карты;
- Через привязку карты к мерчанту, для дальнейших списаний без надобности подтверждения и ввода реквизитов.
Каждый запрос(для эндпоинтов раздела "Оплаты") может содержать в своем теле необязательное поле lang, для выбора языка получаемых текстовых данных от сервера.
Для поля lang являются допустимыми значения: uz, ru, en.
В теле каждого ответа(для эндпоинтов раздела "Оплаты") содержится объект result с полями:
- code - "OK" для успешных запросов, или строка с номером ошибки (см. Системные ошибки);
- description - "Нет ошибок" для успешных запросов, или строка с описанием ошибки.
Создание транзакции
Запрос:
curl --request POST \
--url https://apigw.atmos.uz/merchant/pay/create \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{
"amount": 5000000,
"account": "12345",
"terminal_id": "XXXXXXXX",
"store_id": "XXXX",
"lang": "ru"
}'
POST /merchant/pay/create HTTP/1.1
Content-Type: application/json
Authorization: Bearer <access-token>
Host: apigw.atmos.uz
Content-Length: 123
{
"amount": 5000000,
"account": "12345",
"terminal_id": "XXXXXXXX",
"store_id": "XXXX",
"lang": "ru"
}
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"transaction_id": 111111,
"store_transaction": {
"success_trans_id": null,
"trans_id": 222222,
"store": {
"id": 0000,
"name": "Store name",
"desc": "",
"logo": null,
"ga_id": null
},
"terminal_id": "00000000",
"account": "000000000",
"amount": 5000000,
"confirmed": false,
"prepay_time": null,
"confirm_time": null,
"label": {
"type_id": 64,
"label_ru": "Номер инвойса",
"label_uz": "Invoys raqami",
"label_en": "Number of Invoice"
},
"details": null,
"commission_value": "0",
"commission_type": "0",
"total": 5000000,
"card_id": null,
"status_code": null,
"status_message": null
}
}
Создает в системе черновик транзакции для дальнейшего пред-подтверждения и финального подтверждения, и возвращает номер созданной операции.
HTTP Request
POST https://apigw.atmos.uz/merchant/pay/create
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| amount | Сумма платежа в тиинах | да |
| account | Идентификатор платежа | да |
| terminal_id | id терминала мерчанта | нет |
| store_id | id мерчанта | да |
| lang | язык для ответа сервера | нет |
Параметры ответа
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| transaction_id | номер созданной в системе транзакции |
| store_transaction | объект с детализацией по транзакции |
| - terminal_id | id терминала через который была создана транзакция |
| - account | идентификатор платежа |
| - amount | сумма транзакции в тиинах |
| - confirmed | подтверждена ли транзакция |
| - prepay_time | время пред-подтверждения транзакции |
| - confirm_time | время подтверждения транзакции |
| - label | Объект с номером и мета-данными инвойса |
| - details | детали транзакции |
| - commission_value | размер комиссии в тиинах |
| - commission_type | сервисное поле |
| - total | итоговая сумма транзакции |
| - card_id | в данном случае null |
| - status_code | в данном случае null |
| - status_message | в данном случае null |
Пред-подтверждение транзакции
Запрос:
POST merchant/pay/pre-apply HTTP/1.1
Content-Type: application/json
Authorization: Bearer <access_token>
Host: apigw.atmos.uz
Content-Length: 102
{
"card_token": "<card-token>",
"store_id": 0000,
"transaction_id": 00000
}
curl --request POST \
--url https://apigw.atmos.uz/merchant/pay/pre-apply \
--header 'Authorization: <access_token \
--header 'Content-Type: application/json' \
--data '{
"card_token": "<card-token>",
"store_id": 0000,
"transaction_id": 00000
}'
Response example:
{
"transaction_id": 202072,
"result": {
"code": "OK",
"description": "Нет ошибок"
}
}
Принимает номер созданной транзакции и подготавливает ее к списанию средств. В случае передачи в метод номера и срока действия карты, высылает одноразовый sms-код для подтверждения транзакции держателю карты.
Для списания по одноразовому SMS-коду подтверждения используйте поля
card_numberиexpiry.Для списания по ранее привязанной к сервису карте, достаточно использовать поле
card_tokenбезcard_numberиexpiry.
HTTP Request
POST https://apigw.atmos.uz/merchant/pay/pre-apply
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| card_token | Токен карты | +/- |
| card_number | Номер карты | +/- |
| expiry | срок действия карты (YYmm) | +/- |
| store_id | id мерчанта(store) | да |
| transaction_id | номер созданной прежде транзакции | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| transaction_id | id транзакции |
| result | объект со статусом ответа сервера |
Подтверждение транзакции
Запрос:
POST /merchant/pay/apply HTTP/1.1
Content-Type: application/json
Authorization: Bearer Bearer <access-token>
Host: apigw.atmos.uz
Content-Length: 63
{
"transaction_id": 00000,
"otp": 111111,
"store_id": 0000
}
curl --request POST \
--url https://apigw.atmos.uz/merchant/pay/apply \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{
"transaction_id": 00000,
"otp": 111111,
"store_id": 0000
}'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"store_transaction": {
"success_trans_id": 0000000,
"trans_id": 11111,
"store": {
"id": 0000,
"name": "XXXXX",
"desc": "",
"logo": null,
"ga_id": null
},
"terminal_id": "00000000",
"account": "0001",
"amount": 5000000,
"confirmed": true,
"prepay_time": 1656326498000,
"confirm_time": 1656326529324,
"label": {
"type_id": 64,
"label_ru": "Номер инвойса",
"label_uz": "Invoys raqami",
"label_en": "Number of Invoice"
},
"details": null,
"commission_value": "0",
"commission_type": "0",
"total": 5000000,
"card_id": "XXXXXX",
"status_code": "0",
"status_message": "Success"
},
"ofd_url": "https://ofd2.atmos.uz/api/ofd/bUFLd0Erc2NyTEJMWGFyQlNaRUdRZz09",
"ofd_url_commission": "https://ofd2.atmos.uz/api/ofd-commission/bUFLd0Erc2NyTEJMWGFyQlNaRUdRZz09"
}
Подтверждает транзакцию и списыввет средства с карты на терминал мерчанта.
HTTP Request
POST https://apigw.atmos.uz/merchant/pay/apply
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| otp | Код из sms | да |
| store_id | id мерчанта | да |
| transaction_id | номер созданной прежде транзакции | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| transaction_id | номер созданной в системе транзакции |
| store_transaction | объект с детализацией по транзакции |
| - success_trans_id | постоянный номер успешной транзакции |
| - trans_id | номер транзакции |
| - store | объект с данными мерчанта |
| - terminal_id | id терминала через который была создана транзакция |
| - account | идентификатор платежа |
| - amount | сумма транзакции в тиинах |
| - confirmed | подтверждена ли транзакция |
| - prepay_time | время пред-подтверждения транзакции |
| - confirm_time | время подтверждения транзакции |
| - label | Объект с номером и мета-данными инвойса |
| - details | детали транзакции |
| - commission_value | размер комиссии в тиинах |
| - commission_type | сервисное поле |
| - total | итоговая сумма транзакции |
| - card_id | токен карты |
| - status_code | сервисное поле |
| - status_message | статус транзакции |
| ofd_url | ссылка на фискальный чек за товар/услугу |
| ofd_url_comission | ссылка на фискальный чек (комиссия) |
Создание мультитранзакции
Запрос:
POST /merchant/bulk/pay/create HTTP/1.1
Content-Type: application/json
Authorization: Bearer <access-token>
Host: apigw.atmos.uz
Content-Length: 208
{
"store_id": <store-id>,
"params": [
{
"account": "user_1",
"amount": 50000,
"details": "Для услуги 1"
},
{
"account": "user_1",
"amount": 100000,
"details": "Для услуги 1"
}
]
}
curl --request POST \
--url https://apigw.atmos.uz/merchant/bulk/pay/create \
--header 'Authorization: <access_token \
--header 'Content-Type: application/json' \
--data '{
"store_id": <store-id>,
"params": [
{
"account": "user_1",
"amount": 50000,
"details": "Для услуги 1"
},
{
"account": "user_1",
"amount": 100000,
"details": "Для услуги 1"
}
]
}'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"transaction_id": [111111, 222222],
"store_transactions": [
{
"success_trans_id": null,
"trans_id": 111111,
"store": {
"id": 0000,
"name": "Store name",
"desc": "",
"logo": null,
"ga_id": null
},
"terminal_id": "00000000",
"account": "000000000",
"amount": 50000,
"confirmed": false,
"prepay_time": null,
"confirm_time": null,
"label": {
"type_id": 64,
"label_ru": "Номер инвойса",
"label_uz": "Invoys raqami",
"label_en": "Number of Invoice"
},
"details": "Для услуги 1",
"commission_value": "0",
"commission_type": "0",
"total": 50000,
"card_id": null,
"status_code": null,
"status_message": null
},
{
"success_trans_id": null,
"trans_id": 222222,
"store": {
"id": 0000,
"name": "Store name",
"desc": "",
"logo": null,
"ga_id": null
},
"terminal_id": "00000000",
"account": "000000000",
"amount": 50000,
"confirmed": false,
"prepay_time": null,
"confirm_time": null,
"label": {
"type_id": 64,
"label_ru": "Номер инвойса",
"label_uz": "Invoys raqami",
"label_en": "Number of Invoice"
},
"details": "Для услуги 2",
"commission_value": "0",
"commission_type": "0",
"total": 100000,
"card_id": null,
"status_code": null,
"status_message": null
}
]
}
Создает в системе черновик мультитранзакции для дальнейшего пред-подтверждения и финального подтверждения, и возвращает номер созданной операции. Позволяет произвести несколько оплат(в т.ч. на разные терминалы) в рамках одного списания.
HTTP Request
POST https://apigw.atmos.uz/merchant/bulk/pay/create
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| amount | Сумма платежа в тиинах | да |
| params | Массив данных создаваемых транзакций | да |
| - account | Идентификатор платежа | да |
| - terminal_id | id терминала мерчанта | нет |
| - store_id | id мерчанта(store) | да |
| - lang | язык для ответа сервера | нет |
Параметры ответа
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| transaction_id | номер созданной в системе транзакции |
| store_transaction | массив объектов с детализацией по транзакции |
| - terminal_id | id терминала через который была создана транзакция |
| - account | идентификатор платежа |
| - amount | сумма транзакции в тиинах |
| - confirmed | подтверждена ли транзакция |
| - prepay_time | время пред-подтверждения транзакции |
| - confirm_time | время подтверждения транзакции |
| - label | Объект с номером и мета-данными инвойса |
| - details | детали транзакции |
| - commission_value | размер комиссии в тиинах |
| - commission_type | сервисное поле |
| - total | итоговая сумма транзакции |
| - card_id | в данном случае null |
| - status_code | в данном случае null |
| - status_message | в данном случае null |
Пред-подтверждение мультитранзакции
Запрос:
POST merchant/bulk/pay/pre-apply HTTP/1.1
Content-Type: application/json
Authorization: Bearer <access_token>
Host: apigw.atmos.uz
Content-Length: 102
{
"card_token": "<card-token>",
"store_id": 0000,
"transaction_id": [00000, 11111]
}
curl --request POST \
--url https://apigw.atmos.uz/merchant/bulk/pay/pre-apply \
--header 'Authorization: <access_token \
--header 'Content-Type: application/json' \
--data '{
"card_token": "<card-token>",
"store_id": 0000,
"transaction_id": [00000, 11111]
}'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
}
}
Принимает номер созданной мультитранзакции и подготавливает ее к списанию средств. В случае передачи в метод номера и срока действия карты, высылает одноразовый sms-код для подтверждения транзакции держателю карты.
Для списания по одноразовому SMS-коду подтверждения используйте поля
card_numberиexpiry.Для списания по ранее привязанной к сервису карте, достаточно использовать поле
card_tokenбезcard_numberиexpiry.
HTTP Request
POST https://apigw.atmos.uz/merchant/bulk/pay/pre-apply
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| card_token | Токен карты | +/- |
| card_number | Номер карты | +/- |
| expiry | срок действия карты (YYmm) | +/- |
| store_id | id мерчанта(store) | да |
| transaction_id | номер созданной прежде транзакции | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
Запрос:
curl --request POST \
--url https://apigw.atmos.uz/merchant/bulk/pay/create \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{
"store_id": <store-id>,
"params": [
{
"account": "user_1",
"amount": 50000,
"details": "Для услуги 1"
},
{
"account": "user_1",
"amount": 100000,
"details": "Для услуги 1"
}
]
}'
Подтверждение мультитранзакции
Запрос:
POST merchant/bulk/pay/apply HTTP/1.1
Content-Type: application/json
Authorization: Bearer <access-token>
Host: apigw.atmos.uz
Content-Length: 63
{
"store_id": 000,
"otp": "111111",
"transaction_id": [11111, 22222]
}
curl --request POST \
--url https://apigw.atmos.uz/merchant/bulk/pay/apply \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{
"store_id": 000,
"otp": "111111",
"transaction_id": [11111, 22222]
}
'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"store_transaction": [
{
"success_trans_id": 2728805,
"trans_id": 45702,
"store": {
"id": 000,
"name": "Store name",
"desc": "",
"logo": null,
"ga_id": null
},
"terminal_id": "7777777",
"account": "user_1",
"amount": 50000,
"confirmed": true,
"prepay_time": 1635828973000,
"confirm_time": 1635829043427,
"label": {
"type_id": 49,
"label_ru": "Номер инвойса",
"label_uz": "Invoys raqami",
"label_en": "Invoice number"
},
"details": "Для услуги 1",
"commission_value": "0",
"commission_type": "0",
"total": 50000,
"card_id": "<card-id>",
"status_code": "0",
"status_message": "Success"
},
{
"success_trans_id": 2728806,
"trans_id": 45703,
"store": {
"id": 271,
"name": "Store name",
"desc": "",
"logo": null,
"ga_id": null
},
"terminal_id": "7777777",
"account": "user_1",
"amount": 100000,
"confirmed": true,
"prepay_time": 1635828973000,
"confirm_time": 1635829043432,
"label": {
"type_id": 49,
"label_ru": "Номер инвойса",
"label_uz": "Invoys raqami",
"label_en": "Invoice number"
},
"details": "Для услуги 2",
"commission_value": "0",
"commission_type": "0",
"total": 100000,
"card_id": "<card-id>",
"status_code": "0",
"status_message": "Success"
}
]
}
Подтверждает мультитранзакцию и списыввет средства с карты на терминалы мерчанта(store).
HTTP Request
POST https://apigw.atmos.uz/merchant/bulk/pay/apply
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| otp | Код из sms | да |
| store_id | id мерчанта | да |
| transaction_id | номер созданной прежде транзакции | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| transaction_id | номер созданной в системе транзакции |
| store_transaction | массив объектов с детализацией по транзакциям |
| - success_trans_id | постоянный номер успешной транзакции |
| - trans_id | номер транзакции |
| - store | объект с данными мерчанта |
| - terminal_id | id терминала через который была создана транзакция |
| - account | идентификатор платежа |
| - amount | сумма транзакции в тиинах |
| - confirmed | подтверждена ли транзакция |
| - prepay_time | время пред-подтверждения транзакции |
| - confirm_time | время подтверждения транзакции |
| - label | Объект с номером и мета-данными инвойса |
| - details | детали транзакции |
| - commission_value | размер комиссии в тиинах |
| - commission_type | сервисное поле |
| - total | итоговая сумма транзакции |
| - card_id | токен карты |
| - status_code | сервисное поле |
| - status_message | статус транзакции |
Повторный запрос кода подтверждения
Запрос:
POST /merchant/pay/otp-resend HTTP/1.1
Content-Type: application/json
Authorization: Bearer 9281a6ab-c963-3c1c-9d95-dbed95db955c
Host: api.atmos.uz
Content-Length: 28
{
"transaction_id": 00001
}
curl --request POST \
--url https://api.atmos.uz/merchant/pay/otp-resend \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <access-token>' \
--data '{
"transaction_id": 10000
}'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"transaction_id": 10000
}
Переотправляет SMS-код подтверждения держателю карты.
HTTP Request
POST https://api.atmos.uz/merchant/pay/otp-resend
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| transaction_id | номер созданной прежде транзакции | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| transaction_id | номер транзакции для которой был переотправлен код подтверждения |
Отмена транзакции
Запрос:
POST /merchant/pay/reverse HTTP/1.1
Content-Type: application/json
Authorization: Bearer <access-token>
Host: apigw.atmos.uz
Content-Length: 54
{
"transaction_id": 000001,
"reason": "Something"
}
curl --request POST \
--url https://apigw.atmos.uz/merchant/pay/reverse \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{
"transaction_id": 000001,
"reason": "Something"
}'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"transaction_id": 000001
}
Отменяет ранее оплаченную транзакцию и возвращает средства на карту.
HTTP Request
POST https://apigw.atmos.uz/merchant/pay/reverse
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| transaction_id | номер отменяемой транзакции | да |
| hold_amount | удерживаемая сумма в тиинах | нет |
| reason | причина отмены транзакции | нет |
Параметры ответа
| Параметр | Описание |
|---|---|
| transaction_id | номер отмененной транзакции |
Получение информации о транзакции
Запрос:
POST /merchant/pay/get HTTP/1.1
Content-Type: application/json
Authorization: Bearer <access-token>
Host: apigw.atmos.uz
Content-Length: 47
{
"store_id": 0001,
"transaction_id": 51827
}
curl --request POST \
--url https://apigw.atmos.uz/merchant/pay/get \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{
"store_id": 0001,
"transaction_id": 51827
}'
Response example:
{
"result": {
"code": "STPIMS-ERR-092",
"description": "Транзакция закрыта"
},
"store_transaction": {
"success_trans_id": 2730590,
"trans_id": 51827,
"store": {
"id": 0001,
"name": "XXXXX",
"desc": "",
"logo": null,
"ga_id": null
},
"terminal_id": "000001",
"account": "XXXXXX",
"amount": 5000000,
"confirmed": true,
"prepay_time": 1656326498000,
"confirm_time": 1656326529000,
"label": {
"type_id": 64,
"label_ru": "Номер инвойса",
"label_uz": "Invoys raqami",
"label_en": "Number of Invoice"
},
"details": null,
"commission_value": "0",
"commission_type": "0",
"total": 5000000,
"card_id": null,
"status_code": "0",
"status_message": "Success"
}
}
Запрос данных о ранее созданной/подтвержденной/закрытой транзакции. Данный метод также используется, если после запроса merchant/pay/apply клиент не получил в теле ответа объект result (случился обрыв связи в сети, или сервис не ответил в рамках заданного клиентом срока (time out), или получили ошибку от шины) необходимо проверить статус транзакции через данный метод.
HTTP Request
POST https://apigw.atmos.uz/merchant/pay/get
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| store_id | id мерчанта(store) в системе ATMOS | да |
| transaction_id | номер запрашиваемой транзакции | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| store_transaction | объект с детализацией по транзакции |
| - success_trans_id | постоянный номер успешной транзакции |
| - trans_id | номер транзакции |
| - store | объект с данными мерчанта |
| - terminal_id | id терминала через который была создана транзакция |
| - account | идентификатор платежа |
| - amount | сумма транзакции в тиинах |
| - confirmed | подтверждена ли транзакция |
| - prepay_time | время пред-подтверждения транзакции |
| - confirm_time | время подтверждения транзакции |
| - label | Объект с номером и мета-данными инвойса |
| - details | детали транзакции |
| - commission_value | размер комиссии в тиинах |
| - commission_type | сервисное поле |
| - total | итоговая сумма транзакции |
| - card_id | токен карты |
| - status_code | сервисное поле |
| - status_message | статус транзакции |
Привязка карт
Привязка карт может быть полезна в мобильных приложениях, веб-сервисах, платформах, где требуется регулярное списание средств, или просто требуется оплата без подтверждения через sms-код каждой транзакции. Привязка карты проводится в приведенной последовательности:
- Заявка на создание токена карты (держателю карты высылается sms-код подтверждения);
- Подтверждение привязки карты через сообщение API ATMOS кода подтверждения;
- Получение токена карты.
Запрос на привязку карты
Запрос:
POST /partner/bind-card/init HTTP/1.1
Content-Type: application/json
Authorization: Bearer <access-token>
Host: apigw.atmos.uz
Content-Length: 57
{
"card_number": "8600490744313347",
"expiry": "2410"
}
curl --request POST \
--url https://apigw.atmos.uz/partner/bind-card/init \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{
"card_number": "8600332914249390",
"expiry": "2509"
}'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"transaction_id": 442,
"phone": "998900222222"
}
Создание заявки на привязку карты. Если все данные верны, возвращает в поле transaction_id значение для дальнейшего подтверждения заявки и высылает sms-код подтверждения держателю карты.
HTTP Request
POST https://apigw.atmos.uz/partner/bind-card/init
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| card_number | 16-значный код на лицевой стороне карты | да |
| expiry | дата действительности карты (YYmm) | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| transaction_id | id операции |
| phone | номер телефона держателя карты |
Подтверждение привязки карты
Запрос:
POST /partner/bind-card/confirm HTTP/1.1
Content-Type: application/json
Authorization: Bearer Bearer <access-token>
Host: apigw.atmos.uz
Content-Length: 44
{
"transaction_id": 383,
"otp": "111111"
}
curl --request POST \
--url https://apigw.atmos.uz/partner/bind-card/confirm \
--header 'Authorization: Bearer Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{
"transaction_id": 383,
"otp": "111111"
}'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"data": {
"card_id": 1579076,
"pan": "986009******1840",
"expiry": "2505",
"card_holder": "TEST",
"balance": 1000000000,
"phone": "998989999999",
"card_token": "<card-token>"
},
"transaction_id": 4789
}
Подтверждает созданную ранее операцию по привязке карты к сервису мерчанта и выдает токен для совершения платежей.
HTTP Request
POST https://apigw.atmos.uz/partner/bind-card/confirm
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| transaction_id | номер созданной ранее операции | да |
| otp | код, полученный держателем карты в виде sms | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| data | объект с данными карты |
| transaction_id | id транзакции |
Список привязанных к мерчанту карт
Запрос:
POST /partner/list-cards HTTP/1.1
Content-Type: application/json
Authorization: Bearer <access-token>
Host: apigw.atmos.uz
Content-Length: 32
{
"page": 1,
"page_size": 10
}
curl --request POST \
--url https://apigw.atmos.uz/partner/list-cards \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{
"page": 1,
"page_size": 10
}'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"cardDataSmallList": [
{
"card_id": 1579076,
"card_token": "<card-token>",
"pan": "986009******1840",
"expiry": "2505"
}
]
}
Возвращает список всех привязанных к сервису мерчанта карточек.
HTTP Request
https://apigw.atmos.uz/partner/list-cards
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| page | номер страницы | нет |
| page_size | кол-во элементов на страницк | нет |
Параметры ответа
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| cardDataSmallList | массив привязанных к сервису карт |
Аннулировать привязанную карту
Запрос:
POST /partner/remove-card HTTP/1.1
Content-Type: application/json
Authorization: Bearer <bearer-token>
Host: apigw.atmos.uz
Content-Length: 64
{
"id": 1666711,
"token": "<card-token>"
}
curl --request POST \
--url https://apigw.atmos.uz/partner/remove-card \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Content-Type: application/json' \
--data '{
"id": 1666711,
"token": "<card-token>"
}'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"data": {
"card_id": 1666711,
"pan": null,
"expiry": null,
"card_holder": null,
"balance": null,
"phone": null,
"card_token": null
}
}
Аннулирует токен ранее привязанной к сервису карты, и дальнейшая оплата по ней становится невозможной.
HTTP Request
https://apigw.atmos.uz/partner/remove-card
Параметры запроса:
| Параметр | Описание | Обязательность |
|---|---|---|
| id | id карты | да |
| token | токен карты | да |
Параметры ответа:
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| data | объект с аннулированными данными |
Холдирование
Холдирование - инструмент по заморозке денежных средств на карте на определенный временной промежуток без списания. ATMOS API позволяет холдировать сумму на счету покупателя и сразу производить списание по мере необходимости. Также, мерчантам доступна отмена холдирования.
Создать заявку на холдирование
Запрос:
POST /hold/create HTTP/1.1
Content-Type: application/json
Authorization: Bearer <access-token>
Host: apigw.atmos.uz
Content-Length: 168
{
"card_token": "<card-token>",
"store_id": "0001",
"account": "12345",
"payment_details": "",
"amount": "50000",
"duration": "1"
}
curl --request POST \
--url https://apigw.atmos.uz/hold/create \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{
"card_token": "<card-token>",
"store_id": "0001",
"account": "12345",
"payment_details": "",
"amount": "50000",
"duration": "1"
}'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"hold_id": 1173,
"account": null
}
Создает заявку на холдирование, высылает код подтверждения держателю карты(если карта не привязана) и возвращает номер операции, для дальнейшего ее подтверждения.
HTTP Request
POST https://apigw.atmos.uz/hold/create
Параметры запроса:
| Параметр | Описание | Обязательность |
|---|---|---|
| card_token | токен карты | +/- |
| card_number | номер карты | +/- |
| card_expiry | срок действия карты(YYmm) | +/- |
| store_id | id мерчанта(store) | да |
| account | идентификатор платежа | да |
| payment_details | детали платежа | нет |
| amount | сумма холдирования в тиинах | да |
| duration | срок холдирования в минутах | да |
Параметры ответа:
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| hold_id | номер созданной операции |
Подтвердить заявку на холдирование
Запрос:
PUT /hold/apply/{id} HTTP/1.1
Content-Type: application/json
Authorization: Bearer <access-token>
Host: apigw.atmos.uz
Content-Length: 20
{
"otp": "111111"
}
curl --request PUT \
--url https://apigw.atmos.uz/hold/apply/{id} \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{
"otp": "111111"
}'
Пример ответа от сервера:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"hold_id": 1173,
"card_token": "<card-token>",
"card_pan": "986009******1840",
"hold_till": "2022-06-30T14:55:19.597"
}
Подтверждает запрос на холдирование и замораживает средства на карте.
HTTP Request
PUT https://apigw.atmos.uz/hold/apply/{id}}
Параметры URL:
| Параметр | Описание | Обязательность |
|---|---|---|
| id | id созданной ранее транзакции | да |
Параметры запроса:
| Параметр | Описание | Обязательность |
|---|---|---|
| otp | код из sms | да |
Параметры ответа:
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| hold_id | номер подтвержденной операции |
| hold_till | дата разморозки средств |
Создать заявку на множественное холдирование
Запрос:
POST /hold/multiple/create HTTP/1.1
Content-Type: application/json
Authorization: Bearer <access-token>
Host: apigw.atmos.uz
Content-Length: 168
{
"card_token": "<card-token>",
"duration": "1",
"items": [
{
"store_id": "<store_id>",
"account": "<account>",
"payment_details": "",
"amount": "1000000"
},
{
"store_id": "<store_id>",
"account": "<account>",
"payment_details": "",
"amount": "1000000"
}
]
}
curl --request POST \
--url https://apigw.atmos.uz/hold/multiple/create \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{
"card_token": "<card-token>",
"duration": "1",
"items": [
{
"store_id": "<store_id>",
"account": "<account>",
"payment_details": "",
"amount": "1000000"
},
{
"store_id": "<store_id>",
"account": "<account>",
"payment_details": "",
"amount": "1000000"
}
]
}'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"parent_id": 261,
"items": [
{
"result": null,
"hold_id": 1543,
"account": "255432"
},
{
"result": null,
"hold_id": 1544,
"account": "2345645"
}
]
}
Создает заявку на несколько операций(средства за которые могут быть списаны по отдельности) в контексте холдирования общей суммы, высылает код подтверждения держателю карты(если карта не привязана) и возвращает номер операции, для дальнейшего ее подтверждения.
HTTP Request
POST https://apigw.atmos.uz/hold/multiple/create
Параметры запроса:
| Параметр | Описание | Обязательность |
|---|---|---|
| card_token | токен карты | +/- |
| duration | срок холдирования в минутах | да |
| items | массив заявок на холдирование | да |
Параметры ответа:
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| parent_id | номер созданной(главной) операции |
| items | массив принятых заявок на холдирование, ожидающих подтверждения |
Подтвердить заявку на множественное холдирование
Запрос:
PUT /hold/multiple/apply/{id} HTTP/1.1
Content-Type: application/json
Authorization: Bearer <access-token>
Host: apigw.atmos.uz
Content-Length: 168
{
"otp": "111111"
}
curl --request PUT \
--url https://apigw.atmos.uz/hold/multiple/apply/{id} \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{
"otp": "111111"
}'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"parent_id": 260,
"items": [
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"hold_id": 1541,
"card_token": "<card-token>",
"card_pan": "XXXXXXXXXXXXXXXX",
"hold_till": "2022-09-28T16:46:22.762"
},
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"hold_id": 1542,
"card_token": "<card-token>",
"card_pan": "XXXXXXXXXXXXXXXX",
"hold_till": "2022-09-28T16:46:23.118"
}
]
}
Подтверждает ранее созданную заявку на несколько операций в контексте холдирования общей суммы, делая доступным списание средств.
HTTP Request
PUT https://apigw.atmos.uz/hold/multiple/apply/{id}
Параметры запроса:
| Параметр | Описание | Обязательность |
|---|---|---|
| otp | стандартное значение "111111", если списание идет по токену карты | да |
Параметры ответа:
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| parent_id | номер главной операции |
| items | массив принятых заявок на холдирование, с их статусами |
Произвести списание захолдированной суммы
Запрос:
POST /hold/{id} HTTP/1.1
Authorization: Bearer <access-token>
Content-Type: application/json
Host: apigw.atmos.uz
curl --request POST \
--url https://apigw.atmos.uz/hold/{id} \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"store_transaction": {
"success_trans_id": 000001,
"trans_id": 12345,
"store": {
"id": 0001,
"name": "XXXXX",
"desc": "",
"logo": null,
"ga_id": null
},
"terminal_id": "0000001",
"account": "12345",
"amount": 5000000,
"confirmed": true,
"prepay_time": 1656325395000,
"confirm_time": 1656325681944,
"label": {
"type_id": 64,
"label_ru": "Номер инвойса",
"label_uz": "Invoys raqami",
"label_en": "Number of Invoice"
},
"details": "",
"commission_value": "0",
"commission_type": "0",
"total": 5000000,
"card_id": "<card-token>",
"status_code": "0",
"status_message": "Success"
},
"ofd_url": "https://ofd2.atmos.uz/api/ofd/blU3NTZPMGZOZGZyMkZPMWtqN1lGZz09",
"ofd_url_commission": "https://ofd2.atmos.uz/api/ofd-commission/blU3NTZPMGZOZGZyMkZPMWtqN1lGZz09"
}
Производит оплату за счет захолдированной ранее суммы. Работает при условии того, что время действия холда не истекло.
HTTP Request
POST https://apigw.atmos.uz/hold/{id}
Параметры URL:
| Параметр | Описание | Обязательность |
|---|---|---|
| id | id транзакции | да |
Параметры ответа:
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| transaction_id | номер созданной в системе транзакции |
| store_transaction | объект с детализацией по транзакции |
| - success_trans_id | постоянный номер успешной транзакции |
| - trans_id | номер транзакции |
| - store | объект с данными мерчанта |
| - terminal_id | id терминала через который была создана транзакция |
| - account | идентификатор платежа |
| - amount | сумма транзакции в тиинах |
| - confirmed | подтверждена ли транзакция |
| - prepay_time | время пред-подтверждения транзакции |
| - confirm_time | время подтверждения транзакции |
| - label | Объект с номером и мета-данными инвойса |
| - details | детали транзакции |
| - commission_value | размер комиссии в тиинах |
| - commission_type | сервисное поле |
| - total | итоговая сумма транзакции |
| - card_id | токен карты |
| - status_code | сервисное поле |
| - status_message | статус транзакции |
| ofd_url | ссылка на фискальный чек за товар/услугу |
| ofd_url_comission | ссылка на фискальный чек (комиссия) |
Отмена холдирования
Запрос:
DELETE /hold/24888 HTTP/1.1
Host: apigw.atmos.uz
Authorization: Bearer <access-token>
Content-Type: application/json
Content-Length: 26
{
"send_cancel_sms": true
}
curl --location --request DELETE 'https://apigw.atmos.uz/hold/24888' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"send_cancel_sms": true
}'
Response example:
{
"result": {
"code": "STPIMS-ERR-145",
"description": "холдирование отменено"
},
"status": -242,
"processing": "UZCARD"
}
Отменяет ранее созданный холд.
HTTP Request
DELETE https://apigw.atmos.uz/hold/{id}
Параметры URL:
| Параметр | Описание | Обязательность |
|---|---|---|
| id | id транзакции | да |
Параметры запроса:
| Параметр | Описание | Обязательность |
|---|---|---|
| send_cancel_sms | уведомлять об отмене холдирования по SMS | да |
Параметры ответа:
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| status | детальный статус по справочнику |
| processing | процессинговый центр держателя карты |
Запрос данных об операции холдирования
Запрос:
GET /hold/{id} HTTP/1.1
Authorization: Bearer <access-token>
Content-Type: application/json
Host: apigw.atmos.uz
curl --request GET \
--url https://apigw.atmos.uz/hold/{id} \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json'
Response example:
{
"result": {
"code": "OK",
"description": "Нет ошибок"
},
"store_transaction": {
"success_trans_id": 000001,
"trans_id": 12345,
"store": {
"id": 0001,
"name": "XXXXX",
"desc": "",
"logo": null,
"ga_id": null
},
"terminal_id": "0000001",
"account": "12345",
"amount": 5000000,
"confirmed": true,
"prepay_time": 1656325395000,
"confirm_time": 1656325681944,
"label": {
"type_id": 64,
"label_ru": "Номер инвойса",
"label_uz": "Invoys raqami",
"label_en": "Number of Invoice"
},
"details": "",
"commission_value": "0",
"commission_type": "0",
"total": 5000000,
"card_id": "<card-token>",
"status_code": "0",
"status_message": "Success"
}
}
Возвращает данные по созданной ранее операции холдирования
HTTP Request
GET https://apigw.atmos.uz/hold/{id}
Параметры URL:
| Параметр | Описание | Обязательность |
|---|---|---|
| id | id транзакции | да |
Параметры ответа:
| Параметр | Описание |
|---|---|
| result | объект со статусом ответа сервера |
| store_transaction | объект с детализацией по транзакции |
| - success_trans_id | постоянный номер успешной транзакции |
| - trans_id | номер транзакции |
| - store | объект с данными мерчанта |
| - terminal_id | id терминала через который была создана транзакция |
| - account | идентификатор платежа |
| - amount | сумма транзакции в тиинах |
| - confirmed | подтверждена ли транзакция |
| - prepay_time | время пред-подтверждения транзакции |
| - confirm_time | время подтверждения транзакции |
| - label | Объект с номером и мета-данными инвойса |
| - details | детали транзакции |
| - commission_value | размер комиссии в тиинах |
| - commission_type | сервисное поле |
| - total | итоговая сумма транзакции |
| - card_id | токен карты |
| - status_code | сервисное поле |
| - status_message | статус транзакции |
Списание по ПИНФЛ
Для работы с сервисом необходимо получить токен доступа, который устанавливается в заголовки каждого запроса и служит уникальным идентификатором при проведении операций. Подробная информация о процессе авторизации содержится в разделе Авторизация в API
Для нижеперечисленных эндпоинтов, предусмотрен следующий адрес для работы с сервисом
Base URL: https://apigw.atmos.uz/ppa
Создание транзакции (ПИНФЛ)
Запрос:
curl -X POST https://apigw.atmos.uz/ppa/transaction/create \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{
"ext_id": "12345789",
"first_name": "Ivan",
"last_name": "Ivanov",
"middle_name": "Ivanovich",
"pinfl": "123456789123456789",
"passport_series": "AA",
"passport_number": "123456789",
"contract_number": "123456",
"amount": 100500,
"partial_debit": true,
"ofd_items": {
"ofd_code": "ofd_code_exm",
"package_code": "123456",
"tin" : "100100100"
},
"epos": {
"branch_id": "branch_id",
"terminal_group_id": "terminal_group_id"
}
}'
POST /transaction/create HTTP/1.1
Host: apigw.atmos.uz
Content-Type: application/json
Authorization: Bearer <access-token>
{
"ext_id": "12345789",
"first_name": "Ivan",
"last_name": "Ivanov",
"middle_name": "Ivanovich",
"pinfl": "123456789123456789",
"passport_series": "AA",
"passport_number": "123456789",
"contract_number": "123456",
"amount": 100500,
"partial_debit": true,
"ofd_items": {
"ofd_code": "ofd_code_exm",
"package_code": "123456",
"tin" : "100100100"
},
"epos": {
"branch_id": "branch_id",
"terminal_group_id": "terminal_group_id"
}
}
Пример ответа:
{
"payload": {
"available_balance": 123456789,
"transaction_status": "CREATED",
"transaction_id": "12345678",
"ext_id": "12345789",
"amount": "100500",
"first_name": "Ivan",
"middle_name": "Ivanovich",
"last_name": "Ivanov",
"date_created": "2023-12-12 00:00:00"
},
"code": "200",
"description": "Transaction confirmed"
}
HTTP Request
POST https://apigw.atmos.uz/ppa/transaction/create
Создание транзакции на стороне платформы для дальнейшей работы
Параметры запроса
| название | описание | обязательность |
|---|---|---|
| ext_id | уникальный идентификатор транзакции на стороне клиента | да |
| first_name | имя | да |
| last_name | фамилия | да |
| middle_name | отчество | да |
| pinfl | пинфл | да |
| passport_series | серия паспорта | да |
| passport_number | номер паспорта | да |
| contract_number | номер договора с клиентом | да |
| amount | сумма списания в тиинах | да |
| partial_debit | флаг частичного списания (true/false). по умолчанию - false | нет |
| ofd_items | данные ОФД | нет |
| ofd_items.ofd_code | код ОФД | нет |
| ofd_items.package_code | маркировочный код | нет |
| ofd_items .tin | ИНН | нет |
| epos | данные epos и филиала партнера, от которых производится списание | нет |
| epos.branch_id | id филиала/департамента партнера | нет |
| epos.terminal_group_id | id группы терминалов партнера | нет |
Параметры ответа
| Название | Описание | Обязательность |
|---|---|---|
| code | статус ответа (ok, progress, error) | да |
| description | описание статуса ответа | нет |
| payload | объект с данными о созданной транзакции | да |
| available_balance | актуальный баланс карты | да |
Подтверждение транзакции (ПИНФЛ)
Запрос:
curl -X POST https://apigw.atmos.uz/ppa/transaction/confirm \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{
"ext_id": "12345789",
"transaction_id": "1113423543"
}'
POST /ppa/transaction/confirm HTTP/1.1
Host: apigw.atmos.uz
Content-Type: application/json
Authorization: Bearer <access-token>
{
"ext_id": "12345789",
"transaction_id": "1113423543"
}
Response example:
{
"payload": {
"transaction_id": "12345678",
"ext_id": "12345789",
"transaction_status": "SUCCESS",
"details": [
{
"pan": "860066******5544",
"amount": "100",
"upper_commission": "1",
"status": "SUCCESS"
}
],
"ofd_url": "www.ofd_url_example.uz"
},
"code": "200",
"message": null
}
Подтверждение списания средств по уникальным идентификаторам транзакции
HTTP Request
POST https://apigw.atmos.uz/ppa/transaction/confirm
Параметры запроса
| Название | Описание | Обязательность |
|---|---|---|
| ext_id | уникальный идентификатор транзакции | да |
| transaction_id | id транзакции на стороне atmos | да |
Параметры ответа
| Название | Описание | Обязательность |
|---|---|---|
| code | статус ответа (ok, progress, error) | да |
| message | описание статуса ответа | нет |
| payload | объект с данными о созданной транзакции | да |
Запрос данных о транзакции
Запрос:
POST /transaction/check HTTP/1.1
Host: apigw.atmos.uz
Authorization: Bearer <access-token>
Content-Type: application/json
{
"ext_id": 12345789,
"pinfl": "123456789123456789",
"passport_series": "AA",
"passport_number": "123456789",
"contract_number": "123456",
"amount": 100500
}
curl -X POST https://apigw.atmos.uz/ppa/transaction/check \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"ext_id": 12345789,
"pinfl": "123456789123456789",
"passport_series": "AA",
"passport_number": "123456789",
"contract_number": "123456",
"amount": 100500
}'
Response example:
{
"payload": {
"transaction_id": 12345678,
"ext_id": 12345789,
"transaction_status": "SUCCESS",
"details": [
{
"pan": "860066******5544",
"amount": 100,
"upper_commission": 1,
"status": "SUCCESS"
}
],
"ofd_url": "www.ofd_url_example.uz"
},
"code": "200",
"message": null
}
Находит транзакцию по указанным реквизитам, и возвращает по ней детализацию
HTTP Request
POST https://apigw.atmos.uz/ppa/transaction/check
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| ext_id | уникальный идентификатор транзакции | да |
| pinfl | пинфл | да |
| passport_series | серия паспорта | да |
| passport_number | номер паспорта | да |
Параметры ответа
| Параметр | Описание | Обязательность |
|---|---|---|
| code | статус ответа (ok, progress, error) | да |
| message | описание статуса ответа | нет |
| payload | объект с данными о созданной транзакции | да |
Отмена транзакции (ПИНФЛ)
Запрос:
curl -X POST https://apigw.atmos.uz/ppa/transaction/cancel \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"ext_id": 12345789,
"transaction_id": "1113423543"
}'
POST /ppa/transaction/cancel HTTP/1.1
Host: apigw.atmos.uz
Authorization: Bearer <access-token>
Content-Type: application/json
{
"ext_id": 12345789,
"transaction_id": "1113423543"
}
Response example:
{
"payload": {
"transaction_id": 12345678,
"ext_id": 12345789,
"transaction_status": "CANCELED"
},
"code": "200",
"message": null
}
Отменяет транзакцию в ATMOS.PAY по паре ее уникальных идентификаторов, до того, как она будет подтверждена
HTTP Request
POST https://apigw.atmos.uz/ppa/transaction/cancel
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| ext_id | уникальный идентификатор транзакции | да |
| transaction_id | id транзакции на стороне atmos | да |
Параметры ответа
| Параметр | Описание | Обязательность |
|---|---|---|
| code | статус ответа (ok, progress, error) | да |
| message | описание статуса ответа | нет |
| payload | объект с данными о созданной транзакции | да |
Актуализация карт по ПИНФЛ
Запрос:
curl -X POST https://apigw.atmos.uz/ppa/cards/update-cards-list \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{
"pinfl": "12345678911234",
"ext_id": "1234567",
"epos": {
"branch_id": 546,
"terminal_group_id": 266
}
}'
POST /ppa/cards/update-cards-list HTTP/1.1
Host: apigw.atmos.uz
Content-Type: application/json
Authorization: Bearer <access-token>
{
"pinfl": "12345678911234",
"ext_id": "1234567",
"epos": {
"branch_id": 546,
"terminal_group_id": 266
}
}
HTTP Request
POST https://apigw.atmos.uz/ppa/cards/update-cards-list
Синхронизировать/обновить данные карт по запрошенному ПИНФЛ
Метод используется в следующих случаях:
- Если карты владельца не были найдены в системе;
- Необходимо обновить список карт для получения информации о недавно открытых новых картах владельцем ПИНФЛ.
Параметры запроса
| название | описание | обязательность |
|---|---|---|
| pinfl | ПИНФЛ запрашиваемого лица | да |
| ext_id | Уникальный идентификатор запроса на стороне клиента | нет |
| epos.branch_id | id филиала | да |
| epos.terminal_group_id | id группы терминалов | да |
Параметры ответа
отсутствуют
Проверка статуса актуализации карт
Запрос:
curl -X POST https://apigw.atmos.uz/ppa/cards/check/{ext_id} \
-H "Authorization: Bearer <access-token>" \
POST /ppa/cards/check/{ext_id} HTTP/1.1
Host: apigw.atmos.uz
Authorization: Bearer <access-token>
Response example:
{
"code": 200,
"message": null,
"payload": {
"ext_id": "example_ext_id",
"masked_pinfl": "3210xxxxxxx067",
"status": "SUCCESSFUL",
"request_date": "2024-11-26 16:11:47"
}
}
HTTP Request
POST https://apigw.atmos.uz/ppa/cards/check/{ext_id}
Используется для выяснения статуса актуализации списка карт по ПИНФЛ. В поле payload.status возвращает состояние запроса в системе. Значение SUCCESSFUL свидетельствует о том, что карты физ.лица по ПИНФЛ были успешно обновлены в системе.
Параметры запроса
| название | описание | обязательность |
|---|---|---|
| ext_id | уникальный идентификатор запроса | да |
Параметры ответа
| Название | Описание |
|---|---|
| code | статус ответа (ok, progress, error) |
| message | описание статуса ответа |
| payload.ext_id | Уникальный идентификатор запроса |
| payload.masked_pinfl | Замаскированный идентификатор пользователя |
| payload.status | Статус выполнения запроса |
| payload.request_date | Дата и время создания запроса |
Справочник статусов
В теле каждого ответа сервера содержится поле status, которое хранит в себе состояние той, или иной операции. По умолчанию, при успешном выполнении запроса пользователя, поле содержит код 200.
Детализации к статусам ошибок приведены в таблице ниже.
| Код ошибки | Текст ошибки | Описание |
|---|---|---|
| -100 | Unexpected exception | Непредвиденная ошибка. Обратитесь в техническую поддержку. |
| -101 | Contract registration was unsuccessful | Ошибка при регистрации контракта. |
| -102 | Client registration was unsuccessful | Ошибка при регистрации клиента. |
| -103 | Client with PINFL [pin num] is not available | Клиент, зарегистрированный с указанным [pin num] ПИНФЛ, недоступен для выполнения транзакции. |
| -105 | No cards with sufficient balance were found | Карты с доступным минимальным балансом для выполнения транзакции не найдены. |
| -106 | Not enough balance | Недостаточно средств для выполнения транзакции (только если "partial_debit": "false"). |
| -107 | Could not initiate payment in full amount | Недостаточно средств для выполнения транзакции на указанную сумму (нечастичное списание). |
| -108 | Cards balance is not available | Баланс карт недоступен. |
| -109 | Cards attributable to PINFL [pinfl] not found | Карты, принадлежащие указанному ПИНФЛ [pinfl], не найдены. Требуется обновление списка карт с помощью метода update-cards-list. |
| -200 | Unexpected error. Please try again later | Непредвиденная ошибка. Попробуйте позже или обратитесь в техническую поддержку. |
| -202 | Transaction with external id: [trans id] failed | Неуспешная транзакция [trans id]. Возвращается только в методе Check. |
| -301 | Client or contract or ePOS not found | Указанные данные для подтверждения транзакции не соответствуют данным, указанным при создании транзакции. |
| -302 | External id [external id] is already used | Указанный external_id уже был использован. |
| -303 | Invalid external id | Неправильный идентификатор external_id. |
| -303 | Invalid firstname | Неправильное имя клиента. |
| -303 | Invalid lastname | Неправильная фамилия клиента. |
| -303 | Invalid middle name | Неправильное отчество клиента. |
| -303 | Invalid PINFL | Неправильный ПИНФЛ. |
| -303 | Invalid passport series | Неправильная серия паспорта. |
| -303 | Invalid passport number | Неправильный номер паспорта. |
| -303 | Invalid contract number | Неправильный номер контракта. |
| -303 | Invalid amount | Неправильная сумма. |
| -303 | Invalid packageCode | Неправильный packageCode. |
| -303 | Invalid TIN | Неправильный ИНН. |
| -303 | branch_id must not be null or empty | Поле branch_id не должно быть пустым. |
| -303 | terminal_group_id must not be null or empty | Поле terminal_group_id не должно быть пустым. |
| -306 | Requested amount is less than minimum allowed | Указанная сумма меньше минимально допустимой для списания. |
| -307 | ePOS with branch id: [branch id] not found | ePOS с указанными параметрами не найден. |
| -307 | ePOS details were not sent | Детали ePOS не были отправлены. |
| -308 | Request with provided external id not found | Запрос с указанным external_id не найден |
Эквайринг Visa/Mastercard
Система МПС - это эквайринг платформа, позволяющая юридическим лицам, осуществляющим свою деятельность на территории Республики Узбекистан, принимать платежи с карт Visa и Mastercard.
При подключении к системе, партнеру выдается уникальный API ключ, который должен быть включен в любой запрос, при работе с платформой, в виде заголовка apikey
Base URL: https://apigw.atmos.uz/mps
Авторизация
Запрос:
curl --location 'https://apigw.atmos.uz/token' \
--header 'Authorization: Basic Base64(consumer-key:consumer-secret)' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data grant_type=client_credentials
POST /token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic Base64(consumer-key:consumer-secret)
Host: apigw.atmos.uz
Response example:
{
"access_token": "string",
"refresh_token": "string",
"expires_in": 1234
}
HTTP Request
POST https://apigw.atmos.uz/token
Принимает в качестве параметра зашифрованную строку в формате base64 по формуле - Base64(consumer_key + ':' + consumer_secret). В ответе сервера будет возвращен токен доступа, который действителен в течение 3600 секунд(1ч.).
Продление срока действия токена
Запрос:
curl --location 'https://apigw.atmos.uz/token' \
--header 'Authorization: Basic Base64(consumer-key:consumer-secret)' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data grant_type=client_credentials
POST /token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic Base64(consumer-key:consumer-secret)
Host: apigw.atmos.uz
Response example:
{
"access_token": "string",
"refresh_token": "string",
"expires_in": 1234
}
HTTP Request
POST https://apigw.atmos.uz/token
Имеет аналогичный функционал с преждним методом, за исключением того, что продлевает срок действия уже выданного токена.
Привязка карт - BIND
Привязка карты
Запрос:
curl --location 'https://apigw.atmos.uz/mps/pay/card/bind' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <access-token>' \
--data-raw '{
"store_id": 1,
"pan": "4278310022884134",
"expiry": "2508",
"card_name": "TEST",
"cvc2": "075",
"client_ip_addr": "192.168.200.01",
"ext_id": "1"
}'
POST /mps/pay/card/bind HTTP/1.1
Host: apigw.atmos.uz
Content-Type: application/json
Authorization: Bearer <access-token>
{
"store_id": 1,
"pan": "4278310022884134",
"expiry": "2508",
"card_name": "TEST",
"cvc2": "075",
"client_ip_addr": "192.168.200.01",
"ext_id": "1"
}
Response example:
{
"payload": {
"id": 144,
"status": 1,
"type": "DEFAULT",
"amount": 10000,
"card": {
"id": 67,
"status": true,
"masked_pan": "402306********9999",
"masked_card_holder": "CUSTOMER NAME",
"card_type": "VISA",
"date_created": "2024-03-26 14:28:11",
"date_updated": "2024-03-26 14:28:11",
"verified_state": "PENDING",
"card_region": "DOMESTIC"
},
"api_id": 1,
"card_id": 67,
"external_id": "82b9c105-95f2-45ce-b33a-74ba4ea11ee4",
"mps_ext_id": "r2PlRV8Y8CjwBAM4gzzFcVJ504c=",
"status_ps": "Approved",
"result_code": "Approved",
"masked_pan": "402306********9327",
"client_ip_addr": "192.168.200.01",
"date_created": "2024-03-26 14:28:11",
"date_updated": "2024-03-26 14:28:11",
"redirect_uri": "https://ecomm.kapital24.uz:6443/ecomm2/ClientHandler?trans_id=r2PlRV8Y8CjwBAM4gzzFcVJ504c%3D"
},
"status": {
"code": 0,
"message": "Success",
"trace_id": "6602952bd44ca285f56c38255f2c1e15"
}
}
HTTP Request
POST https://apigw.atmos.uz/mps/pay/card/bind
Позволяет привязать карту для совершения дальнейших регулярных платежей
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| store_id | ID партнера | да |
| pan | Номер карты | да |
| expiry | Срок действия карты в формате MMYY | да |
| card_name | Название карты | да |
| cvc2 | Код безопасности карты (CVC2/CVV2) | да |
| client_ip_addr | IP-адрес клиента | да |
| ext_id | Внешний id карты | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| payload | Объект с данными о транзакции |
| payload.id | Идентификатор транзакции |
| payload.status | Статус транзакции |
| payload.type | Тип транзакции |
| payload.amount | Сумма транзакции в валюте |
| payload.card | Объект с данными о карте |
| payload.card.id | Идентификатор карты |
| payload.card.status | Статус карты |
| payload.card.masked_pan | Маскированный номер карты |
| payload.card.masked_card_holder | Маскированное имя владельца карты |
| payload.card.card_type | Тип карты |
| payload.card.date_created | Дата создания карты |
| payload.card.date_updated | Дата обновления карты |
| payload.card.verified_state | Состояние верификации карты |
| payload.card.card_region | Регион карты |
| payload.api_id | ID API |
| payload.card_id | Идентификатор карты |
| payload.external_id | Внешний ID транзакции |
| payload.mps_ext_id | MPS внешний ID транзакции |
| payload.status_ps | Статус PS |
| payload.result_code | Код результата |
| payload.client_ip_addr | IP-адрес клиента |
| payload.date_created | Дата создания транзакции |
| payload.date_updated | Дата обновления транзакции |
| payload.redirect_uri | Ссылка для перенаправления клиента после 3DS |
| status | Объект с данными о статусе операции |
| status.code | Код статуса операции |
| status.message | Сообщение статуса операции |
| status.trace_id | Идентификатор трассировки операции |
Привязка карты владельцем
Запрос:
curl -X POST "https://apigw.atmos.uz/checkout/card-bind/create" \
-H "Host: https://apigw.atmos.uz" \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"request_id": "1231312312",
"store_id": 3,
"account": "DFSDF",
"success_url": "https://atmos.uz"
}'
POST https://apigw.atmos.uz/checkout/card-bind/create HTTP/1.1
Host: https://apigw.atmos.uz
Authorization: Bearer <access-token>
Content-Type: application/json
{
"request_id": "1231312312",
"store_id": 3,
"account": "DFSDF",
"success_url": "https://atmos.uz",
}
Response example:
{
"store_id": 3,
"payment_id": 272,
"token": "9Y53Bh_hFirZgxxFqBTwtA==",
"url": "https://checkout.atmos.uz/bind?id=9Y53Bh_hFirZgxxFqBTwtA==",
"status": {
"code": "OK",
"description": "Success",
"trace_id": "6602952bd44ca285f56c38255f2c1e15"
}
}
HTTP Request
POST https://apigw.atmos.uz/checkout/card-bind/create
Метод для генерации ссылки по привязке карты держателем (владельцем карты). После привязки, партнер имеет доступ к произведению списаний средств с карты на своей стороне.
Последовательность процесса:
- По вызову метода формируется ссылка;
- Ссылка передается держателю карты. Вводятся данные карты, производится привязка по одноразовому SMS-паролю;
- В случае успешной привязки система выполняет запрос в билинг партнера со следующис содержимым:
{ "api_key" : <API-KEY> "card_id" : 1231 }; - Система ожидает ответ от билинга партнера со следующим содержимым:
{ "status": 1, "message": "Успешно" }; - Карта успешно привязана, и партнер может производить списания по выданному
card_id.
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| request_id | Уникальный идентификатор (формируется на стороне партнера) | да |
| store_id | id партнера в системе | да |
| account | Идентификтор операции (формируется на стороне партнера) | да |
| success_url | Страница перенаправления пользователя при успешном ответе | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| store_id | id партнера |
| payment_id | Идентификатор транзакции |
| token | Токен транзакции |
| url | Ссылка для привязки карты |
| status | Объект с данными о статусе операции |
| status.code | Код статуса операции |
| status.message | Сообщение статуса операции |
| status.trace_id | Идентификатор трассировки операции |
Получение деталей привязанной карты
Запрос:
curl --location 'https://apigw.atmos.uz/mps/pay/card/32' \
--header 'Authorization: Bearer <access-token>'
GET /mps/pay/card/32 HTTP/1.1
Host: apigw.atmos.uz
Authorization: Bearer <access-token>
Response example:
{
"payload": {
"card": {
"id": 928,
"status": true,
"approved": true,
"masked_pan": "427831********5430",
"masked_card_holder": "TEST",
"card_type": "VISA",
"date_created": "2024-11-21 10:58:12",
"date_updated": "2024-11-21 10:58:12",
"verified_state": "FAILED",
"status_3ds": "FAILED",
"card_region": "ONUS",
"store_id": 1
},
"card_id": 928
},
"status": {
"code": 0,
"message": "Success",
"trace_id": "65dd6c72a94bfe3856d7f821e8ac37eb"
}
}
HTTP Request
GET https://apigw.atmos.uz/mps/pay/card/32
Возвращает данные по ранее привязанной к сервису карте
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| id | Идентификатор карты | да |
Параметры ответа
| название | описание |
|---|---|
| payload | Объект с данными |
| card | Объект с данными о карте |
| card.id | Идентификатор карты |
| card.status | Статус привязки карты |
| card.masked_pan | Замаскированный номер карты |
| card.masked_card_holder | Замаскированное имя владельца карты |
| card.card_type | Тип карты |
| card.date_created | Дата создания привязки карты |
| card.date_updated | Дата обновления привязки карты |
| card.verified_state | Состояние верификации карты |
| card.status_3ds | Статус 3DS |
| card.card_region | Регион регистрации карты |
| card.store_id | ID партнера |
| card_id | ID карты в системе |
| status | Объект с данными о статусе операции |
| status.code | Код статуса операции |
| status.message | Сообщение статуса операции |
| status.trace_id | Идентификатор трассировки операции |
Создание драфта транзакции (bind)
Запрос:
curl -X POST https://apigw.atmos.uz/mps/pay/transaction/pre-create \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{
"amount": 10000,
"ext_id": "{{$randomUUID}}",
"store_id": 3,
"ofd_items": [],
"account": "i-203451",
"invoice_id": "00023213"
}'
POST /mps/pay/transaction/pre-create HTTP/1.1
Host: apigw.atmos.uz
Content-Type: application/json
Authorization: Bearer <access-token>
{
"amount": 10000,
"ext_id": "{{$randomUUID}}",
"store_id": 3,
"ofd_items": [],
"account": "i-203451",
"invoice_id": "00023213"
}
Response example:
{
"payload": {
"id": 898,
"status": 0,
"type": "DEFAULT",
"amount": 10000,
"api_id": 1,
"external_id": "9f7ab26c-9ddd-47bf-b5ee-c7e04714f162",
"date_created": "2024-11-20 16:12:38",
"date_updated": "2024-11-20 16:12:38",
"ofd_redirect_uri": "https://ofd.atmos.uz/api/ofd/bVYxRGo5cjQxOFN4RlRpZjRST3hFdz09",
"store_id": 3,
"upper_commission": 0,
"lower_commission": 0
},
"status": {
"code": 0,
"message": "Success",
"trace_id": "673dc426d9e792630a9dec5bb25603a8"
}
}
HTTP Request
POST https://apigw.atmos.uz/mps/pay/transaction/pre-create
Создание драфта(черновика) транзакции для последующего списания с привязанной карты
Параметры запроса
| Название | Описание | Обязательность |
|---|---|---|
| amount | Сумма транзакции (в тиинах) | Да |
| ext_id | Уникальный идентификатор запроса | Да |
| store_id | Идентификатор партнера | Да |
| ofd_items | Список ОФД объектов | Да |
| account | ID операции на стороне клиента | Да |
| invoice_id | Номер счёта | Да |
Параметры ответа
| Название поля | Описание |
|---|---|
| id | Уникальный идентификатор транзакции |
| status | Статус транзакции |
| type | Тип транзакции |
| amount | Сумма транзакции (в тиинах) |
| api_id | Идентификатор API |
| external_id | Внешний идентификатор транзакции |
| date_created | Дата создания транзакции |
| date_updated | Дата последнего обновления транзакции |
| ofd_redirect_uri | Ссылка для перенаправления OFD |
| store_id | Идентификатор партнера |
| upper_commission | Верхняя комиссия |
| lower_commission | Нижняя комиссия |
| code | Код статуса ответа |
| message | Сообщение статуса ответа |
| trace_id | Уникальный идентификатор запроса |
Создание транзакции из драфта (bind)
Запрос:
curl -X POST https://apigw.atmos.uz/mps/pay/transaction/create/bind \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{
"card_id": 855,
"amount": 1000,
"client_ip_addr": "192.168.200.201",
"transaction_id": 883
}'
POST /mps/pay/transaction/create/bind HTTP/1.1
Host: apigw.atmos.uz
Content-Type: application/json
Authorization: Bearer <access-token>
{
"card_id": 855,
"amount": 1000,
"client_ip_addr": "192.168.200.201",
"transaction_id": 883
}
Response example:
{
"payload": {
"id": 735,
"status": 1,
"rrn": "420810227278",
"type": "DEFAULT",
"amount": 10000,
"card": {
"id": 923,
"status": true,
"masked_pan": "419525********1540",
"masked_card_holder": "NAME TEST",
"card_type": "VISA",
"date_created": "2024-11-20 16:20:19",
"date_updated": "2024-11-20 16:20:19",
"verified_state": "PENDING",
"card_region": "DOMESTIC"
},
"api_id": 1,
"card_id": 923,
"external_id": "fce222d7-2f5a-4052-9170-b68c30bd9890",
"mps_ext_id": "BhOEry3oY7G5hHtNTFABHiCLsfQ=",
"status_ps": "Approved",
"result_code": "Approved",
"app_code": "249138",
"masked_pan": "419525********1540",
"client_ip_addr": "192.168.200.01",
"date_created": "2024-11-20 16:20:19",
"date_updated": "2024-11-20 16:20:19",
"redirect_uri": "https://ecomm.kapital24.uz:2443/ecomm2/ClientHandler?trans_id=BhOEry3oY7G5hHtNTFABHiCLsfQ%3D",
"ofd_redirect_uri": "https://ofd.atmos.uz/api/ofd/blBlR3p1RmVlS0pQSHY4QjRlM1k3UT09",
"store_id": 3,
"upper_commission": 100,
"lower_commission": 0,
"ofd_commission_uri": "https://ofd.atmos.uz/api/ofd/SDRxWDc3ejc0cmZYQmlDT3BGMVFmQT09"
},
"status": {
"code": 0,
"message": "Success",
"trace_id": "673dc5f3080d8074fd3a272cb3d0c365"
}
}
HTTP Request
POST https://apigw.atmos.uz/mps/pay/transaction/create/bind
Создание транзакции из драфта(черновика) и привязка к ней карты для платежа
Параметры запроса
| Название поля | Описание | Обязательное |
|---|---|---|
| card_id | Идентификатор карты, с которой будет выполнена транзакция | Да |
| amount | Сумма транзакции (в тиинах) | Да |
| client_ip_addr | IP-адрес клиента, инициировавшего транзакцию | Да |
| transaction_id | Идентификатор транзакции, с которым будет связана операция | Да |
Параметры ответа
| Название поля | Описание |
|---|---|
| id | Уникальный идентификатор транзакции |
| status | Статус транзакции |
| rrn | Номер ссылки на запрос (Retrieval Reference Number) |
| type | Тип транзакции |
| amount | Сумма транзакции |
| card.id | Уникальный идентификатор карты |
| card.status | Статус карты (true/false) |
| card.masked_pan | Маскированный номер карты |
| card.masked_card_holder | Маскированное имя владельца карты |
| card.card_type | Тип карты |
| api_id | Идентификатор API |
| card_id | Идентификатор карты |
| external_id | Внешний идентификатор транзакции |
| mps_ext_id | Внешний идентификатор платформы MPS |
| status_ps | Статус на стороне процессинга |
| result_code | Код результата транзакции |
| app_code | Код приложения, связанного с транзакцией |
| masked_pan | Маскированный номер карты |
| client_ip_addr | IP-адрес клиента |
| date_created | Дата и время создания транзакции |
| date_updated | Дата и время обновления транзакции |
| redirect_uri | URI для перенаправления после транзакции |
| ofd_redirect_uri | URI для перенаправления в систему OFD |
| store_id | Идентификатор партнера |
| upper_commission | Верхняя комиссия |
| lower_commission | Нижняя комиссия |
| ofd_commission_uri | URI для комиссии OFD |
Подтверждение транзакции (bind)
Запрос:
curl -X POST https://apigw.atmos.uz/mps/pay/transaction/apply \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{
"transaction_id": 59
}'
POST https://apigw.atmos.uz/mps/pay/transaction/apply HTTP/1.1
Host: apigw.atmos.uz
Content-Type: application/json
Authorization: Bearer <access-token>
{
"transaction_id": 59
}
Response example:
{
"payload": {
"id": 735,
"status": 4,
"rrn": "420810227278",
"type": "DEFAULT",
"amount": 10000,
"card": {
"id": 923,
"status": true,
"masked_pan": "419525********1540",
"masked_card_holder": "NAME TEST",
"card_type": "VISA",
"date_created": "2024-11-20 16:20:19",
"date_updated": "2024-11-20 16:20:19",
"verified_state": "VERIFIED",
"card_region": "DOMESTIC"
},
"api_id": 1,
"card_id": 923,
"external_id": "fce222d7-2f5a-4052-9170-b68c30bd9890",
"mps_ext_id": "BhOEry3oY7G5hHtNTFABHiCLsfQ=",
"status_ps": "Approved",
"result_code": "Approved",
"app_code": "249138",
"masked_pan": "419525********1540",
"client_ip_addr": "192.168.200.01",
"date_created": "2024-11-20 16:20:19",
"date_updated": "2024-11-20 16:20:19",
"ofd_redirect_uri": "https://ofd.atmos.uz/api/ofd/blBlR3p1RmVlS0pQSHY4QjRlM1k3UT09",
"store_id": 3,
"upper_commission": 100,
"lower_commission": 0,
"ofd_commission_uri": "https://ofd.atmos.uz/api/ofd/SDRxWDc3ejc0cmZYQmlDT3BGMVFmQT09"
},
"status": {
"code": 0,
"message": "Success",
"trace_id": "673dc5f3080d8074fd3a272cb3d0c365"
}
}
HTTP Request
POST https://apigw.atmos.uz/mps/pay/transaction/apply
Подтверждение созданной и подтвержденной ранее транзакции
Параметры запроса
| Название поля | Описание | Обязательность |
|---|---|---|
| transaction_id | Идентификатор созданной транзакции | да |
Параметры ответа
| Название | Описание |
|---|---|
| id | Идентификатор транзакции |
| status | Статус транзакции |
| rrn | Референсный номер транзакции |
| amount | Сумма транзакции |
| card.id | Идентификатор карты |
| card.status | Статус карты |
| card.masked_pan | Маскированный номер карты |
| card.masked_card_holder | Маскированное имя владельца карты |
| card.card_type | Тип карты |
| card.date_created | Дата создания карты |
| card.date_updated | Дата обновления карты |
| card.verified_state | Состояние верификации карты |
| card.card_region | Регион карты |
| api_id | Идентификатор API |
| card_id | Идентификатор карты |
| external_id | Внешний идентификатор |
| mps_ext_id | Идентификатор в системе MPS |
| status_ps | Статус платежной системы |
| result_code | Код результата |
| app_code | Код приложения |
| masked_pan | Маскированный номер карты |
| client_ip_addr | IP-адрес клиента |
| date_created | Дата создания транзакции |
| date_updated | Дата обновления транзакции |
| ofd_redirect_uri | URI для OFD редиректа |
| store_id | Идентификатор партнера |
| upper_commission | Верхняя комиссия |
| lower_commission | Нижняя комиссия |
| ofd_commission_uri | URI для комиссии OFD |
| status | Объект со статусом запроса |
| code | Код статуса (0 - успешный запрос) |
| message | Сообщение статуса |
| trace_id | Идентификатор трассировки запроса |
Оплаты (МПС)
Выставление счета (МПС)
Запрос:
curl -X POST 'https://apigw.atmos.uz/checkout/invoice/create' \
--header 'Authorization: Bearer <access-token>' \
--header 'Content-Type: application/json' \
--data '{
"request_id": "1231312312",
"store_id": 3,
"expiration_time": 10,
"expiration_date": "2024-07-11T11:12:12",
"account": "DFSDF",
"amount": 100000,
"success_url": "https://atmos.uz",
"items": [
{
"items_id": "1",
"name": "book 1",
"amount": 50000,
"quantity": 3,
"details": {
"name": "some key",
"values": "some value"
}
},
{
"items_id": "2",
"name": "service",
"amount": 50000,
"details": {
"name": "some key 2",
"values": "some value 2"
}
}
]
}'
POST https://apigw.atmos.uz/checkout/invoice/create HTTP/1.1
Host: https://apigw.atmos.uz
Authorization: Bearer <access-token>
Content-Type: application/json
{
"request_id": "1231312312",
"store_id": 3,
"expiration_time": 10,
"expiration_date": "2024-07-11T11:12:12",
"account": "DFSDF",
"amount": 100000,
"success_url": "https://atmos.uz",
"items": [
{
"items_id": "1",
"name": "book 1",
"amount": 50000,
"quantity": 3,
"details": {
"name": "some key",
"values": "some value"
}
},
{
"items_id": "2",
"name": "service",
"amount": 50000,
"details": {
"name": "some key 2",
"values": "some value 2"
}
}
]
}
Response example:
{
"store_id": 3,
"payment_id": 272,
"token": "9Y53Bh_hFirZgxxFqBTwtA==",
"url": "https://checkout.atmos.uz/ru/invoice?id=9Y53Bh_hFirZgxxFqBTwtA==", # ссылка инвойса для открытия в браузере
"status": {
"code": "OK",
"description": "Success"
}
}
HTTP Request
POST https://apigw.atmos.uz/checkout/invoice/create
Создает платеж в системе с оплатой через веб-интерфейс (платежная страница). URL платежной страницы будет передан в ответе сервера.
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| request_id | Уникальный идентификатор запроса | да |
| store_id | Идентификатор партнера | да |
| expiration_time | Время до истечения инвойса в минутах | нет |
| expiration_date | Дата и время истечения инвойса в формате YYYY-MM-DDTHH:MM:SS | нет |
| account | Партнерский идентификатор платежа | да |
| amount | Сумма (тийины) | да |
| success_url | Ссылка для редиректа при успешной оплате | да |
| items | Список товаров или услуг | да |
| items[].items_id | Идентификатор товара или услуги | да |
| items[].name | Наименование товара или услуги | да |
| items[].amount | Сумма для товара или услуги (тийины) | да |
| items[].quantity | Количество товара или услуги (если применимо) | нет |
| items[].details | Детали товара или услуги | нет |
| items[].details.name | Название ключа детали товара или услуги | нет |
| items[].details.values | Значение ключа детали товара или услуги | нет |
Параметры ответа
| Параметр | Описание |
|---|---|
| store_id | Идентификатор партнера |
| payment_id | Идентификатор платежа |
| token | Токен инвойса |
| url | Ссылка на инвойс для открытия в браузере |
| status | Статус ответа |
| status.code | Код статуса |
| status.description | Описание статуса |
Создание транзакции (МПС)
Запрос:
curl --location 'https://apigw.atmos.uz/mps/pay/transaction/create' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <access-token>' \
--data-raw '{
"pan": "4278310021875430",
"expiry": "2508",
"amount": 10000,
"transaction_id": 1,
"card_name": "TEST",
"cvc2": "680",
"client_ip_addr": "192.168.200.01",
"ext_id": "64bedd41-f21b-4298-aa88-1206107670b8"
}'
POST /mps/pay/transaction/create HTTP/1.1
Host: apigw.atmos.uz
apikey: <api-key>
Authorization: Bearer <access-token>
Content-Type: application/json
{
"pan": "4278310021875430",
"expiry": "2508",
"amount": 10000,
"transaction_id": 1,
"card_name": "TEST",
"cvc2": "680",
"client_ip_addr": "192.168.200.01",
"ext_id": "64bedd41-f21b-4298-aa88-1206107670b8"
}
Response example:
{
"payload": {
"id": 735,
"status": 1,
"rrn": "420810227278",
"type": "DEFAULT",
"amount": 10000,
"card": {
"id": 929,
"status": true,
"masked_pan": "419525********1540",
"masked_card_holder": "ANDREY PAK",
"card_type": "VISA",
"date_created": "2024-11-21 16:00:15",
"date_updated": "2024-11-21 16:00:15",
"verified_state": "PENDING",
"card_region": "DOMESTIC"
},
"api_id": 1,
"card_id": 929,
"external_id": "fce222d7-2f5a-4052-9170-b68c30bd9890",
"mps_ext_id": "EueYPCDKlXDhyE9chwPzPcHO89s=",
"status_ps": "Approved",
"result_code": "Approved",
"app_code": "249138",
"masked_pan": "419525********1540",
"client_ip_addr": "192.168.200.01",
"date_created": "2024-11-21 16:00:15",
"date_updated": "2024-11-21 16:00:15",
"redirect_uri": "https://ecomm.kapital24.uz:2443/ecomm2/ClientHandler?trans_id=EueYPCDKlXDhyE9chwPzPcHO89s%3D",
"ofd_redirect_uri": "https://ofd.atmos.uz/api/ofd/blBlR3p1RmVlS0pQSHY4QjRlM1k3UT09",
"store_id": 3,
"upper_commission": 100,
"lower_commission": 0,
"ofd_commission_uri": "https://ofd.atmos.uz/api/ofd/SDRxWDc3ejc0cmZYQmlDT3BGMVFmQT09"
},
"status": {
"code": 0,
"message": "Success",
"trace_id": "673f12bff4d74919c7fcd40ef4dd24ce"
}
}
HTTP Request
POST https://apigw.atmos.uz/mps/pay/transaction/create
Создает транзакцию в системе, которая в дальнейшем подлежит подтверждению
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| transaction_id | ID драфта транзакции | да |
| pan | Номер карты | да |
| expiry | Срок действия карты в формате MMYY | да |
| amount | Сумма транзакции в тиинах | да |
| card_name | Название карты | да |
| cvc2 | Код безопасности карты (CVC2/CVV2) | да |
| client_ip_addr | IP-адрес клиента | да |
| ext_id | Уникальный идентификатор (UUID) транзакции, сгенерированный на стороне клиента | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| payload | Объект с данными о транзакции |
| payload.id | Идентификатор транзакции |
| payload.status | Статус транзакции |
| payload.rrn | Номер ссылки возврата транзакции |
| payload.type | Тип транзакции |
| payload.amount | Сумма транзакции в валюте |
| payload.card | Объект с данными о карте |
| payload.card.id | Идентификатор карты |
| payload.card.status | Статус карты |
| payload.card.masked_pan | Маскированный номер карты |
| payload.card.masked_card_holder | Маскированное имя владельца карты |
| payload.card.card_type | Тип карты (например, VISA) |
| payload.card.date_created | Дата создания карты |
| payload.card.date_updated | Дата обновления карты |
| payload.card.verified_state | Статус верификации карты |
| payload.card.card_region | Регион карты |
| payload.api_id | ID API |
| payload.card_id | Идентификатор карты |
| payload.external_id | Внешний ID транзакции |
| payload.mps_ext_id | MPS внешний ID транзакции |
| payload.status_ps | Статус PS |
| payload.result_code | Код результата |
| payload.app_code | Параметры процессинга |
| payload.masked_pan | Маскированный номер карты |
| payload.client_ip_addr | IP-адрес клиента |
| payload.date_created | Дата создания транзакции |
| payload.date_updated | Дата обновления транзакции |
| payload.redirect_uri | Ссылка для перенаправления клиента после 3DS |
| payload.ofd_redirect_uri | Ссылка для перенаправления в OFD |
| payload.store_id | ID партнера |
| payload.upper_commission | Верхняя комиссия |
| payload.lower_commission | Нижняя комиссия |
| payload.ofd_commission_uri | Ссылка чека фискализации |
| status | Объект с данными о статусе операции |
| status.code | Код статуса операции |
| status.message | Сообщение статуса операции |
| status.trace_id | Идентификатор трассировки операции |
Создание рекуррентного платежа (МПС)
Запрос:
curl --location 'https://apigw.atmos.uz/mps/pay/transaction/create/template' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <access-token>' \
--data-raw '{
"card_id": 1,
"amount": 1000,
"client_ip_addr": "192.168.200.201",
"ext_id": "12d649ad-38ac-44c5-8f10-3700bfda5efe"
}'
POST /mps/pay/transaction/create/template HTTP/1.1
Host: apigw.atmos.uz
apikey: <api-key>
Authorization: Bearer <access-token>
Content-Type: application/json
{
"card_id": 1,
"amount": 1000,
"client_ip_addr": "192.168.200.201",
"ext_id": "12d649ad-38ac-44c5-8f10-3700bfda5efe"
}
Response example:
{
"payload": {
"id": 110,
"status": 1,
"type": "TEMPLATE",
"api_id": 1,
"card_id": 36,
"external_id": "c4cea503-4838-440e-aac2-4509e1319f4e",
"mps_ext_id": "I7cQTxAUXz0LPy75q09sldnOzTk=",
"status_ps": "Approved",
"status_3ds": "AUTHENTICATED",
"result_code": "Approved",
"masked_pan": "427831********5430",
"client_ip_addr": "192.168.200.01",
"date_created": "2024-02-26 17:13:05",
"date_updated": "2024-02-26 17:13:05",
"redirect_uri": null
},
"status": {
"code": 0,
"message": "Success",
"trace_id": "65dc805134eb63b90d2e048d1d4fb38a"
}
}
HTTP Request
POST https://apigw.atmos.uz/mps/pay/transaction/create/template
Метод создает регулярный платеж в системе. Для успешного создания платежа, передаваемая в запросе карта должна быть ранее привязана к системе, и проведена 3DS верификация при добавлении. Статус 3DS верификации можно проверить методом /card/{id}
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| card_id | Идентификатор карты | да |
| amount | Сумма регулярного платежа в тиинах | да |
| client_ip_addr | IP-адрес клиента | да |
| ext_id | Уникальный идентификатор (UUID) транзакции, сгенерированный на стороне клиента | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| payload | Объект с данными о регулярном платеже |
| id | Идентификатор регулярного платежа |
| status | Статус регулярного платежа |
| type | Тип регулярного платежа |
| api_id | ID API |
| card_id | Идентификатор карты |
| external_id | Внешний ID регулярного платежа |
| mps_ext_id | MPS внешний ID регулярного платежа |
| status_ps | Статус PS регулярного платежа |
| status_3ds | Статус 3DS регулярного платежа |
| result_code | Код результата регулярного платежа |
| masked_pan | Маскированный номер карты |
| client_ip_addr | IP-адрес клиента |
| date_created | Дата создания регулярного платежа |
| date_updated | Дата обновления регулярного платежа |
| redirect_uri | Ссылка для перенаправления клиента после 3DS |
| status | Объект с данными о статусе операции |
| code | Код статуса операции |
| message | Сообщение статуса операции |
| trace_id | Идентификатор трассировки операции |
Получение деталей транзакции (МПС)
Запрос:
curl --location 'https://apigw.atmos.uz/mps/pay/transaction/get/52' \
--header 'Authorization: Bearer <access-token>'
GET /mps/pay/transaction/get/52 HTTP/1.1
Host: apigw.atmos.uz
apikey: <api-key>
Authorization: Bearer <access-token>
Content-Type: application/json
Response example:
{
"payload": {
"id": 235,
"status": 6,
"rrn": "417310203285",
"type": "DEFAULT",
"amount": 100000,
"api_id": 2,
"card_id": 220,
"external_id": "checkout_32157",
"mps_ext_id": "JEpQ9xa98OhSPPHLRIExPZBlufQ=",
"status_ps": "Accepted (for reversal)",
"result_code": "Accepted",
"app_code": "999284",
"masked_pan": "419525********1783",
"client_ip_addr": "10.228.1.26",
"date_created": "2024-06-21 05:38:25",
"date_updated": "2024-06-21 05:38:57",
"redirect_uri": "https://ecomm.kapital24.uz:2443/ecomm2/ClientHandler?trans_id=JEpQ9xa98OhSPPHLRIExPZBlufQ%3D",
"ofd_redirect_uri": "https://ofd.atmos.uz/api/ofd/bjhMWnRWaDNxb2NWMHRGL2hLMXlYQT09",
"store_id": 3,
"upper_commission": 0,
"lower_commission": 0
},
"status": {
"code": 0,
"message": "Success",
"trace_id": "673f1773cdc429d9cdb5bc0b0d982291"
}
}
HTTP Request
GET https://apigw.atmos.uz/mps/pay/transaction/get/${id}
Возвращает имеющуюся в системе детализацию по запрошенной транзакции
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| transaction_id | Идентификатор транзакции | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| payload | Объект с данными о транзакции |
| payload.id | Идентификатор транзакции |
| payload.status | Статус транзакции |
| payload.rrn | Номер ссылки возврата транзакции |
| payload.type | Тип транзакции |
| payload.amount | Сумма транзакции в валюте |
| payload.api_id | ID API |
| payload.card_id | Идентификатор карты |
| payload.external_id | Внешний ID транзакции |
| payload.mps_ext_id | MPS внешний ID транзакции |
| payload.status_ps | Статус PS |
| payload.result_code | Код результата |
| payload.app_code | Код авторизации |
| payload.masked_pan | Маскированный номер карты |
| payload.client_ip_addr | IP-адрес клиента |
| payload.date_created | Дата создания транзакции |
| payload.date_updated | Дата обновления транзакции |
| payload.redirect_uri | Ссылка для перенаправления клиента после 3DS |
| payload.ofd_redirect_uri | Ссылка для перенаправления в OFD |
| payload.store_id | ID партнера |
| payload.upper_commission | Верхняя комиссия |
| payload.lower_commission | Нижняя комиссия |
| status | Объект с данными о статусе операции |
| status.code | Код статуса операции |
| status.message | Сообщение статуса операции |
| status.trace_id | Идентификатор трассировки операции |
Получение деталей транзакции по внешнему идентификатору (МПС)
Запрос:
curl -X POST \
https://apigw.atmos.uz/mps/pay/get/ext_id \
-H 'Content-Type: application/json' \
-d '{
"ext_id": "<ext-id>"
}'
POST /mps/pay/get/ext_id HTTP/1.1
Host: apigw.atmos.uz
Content-Type: application/json
{
"ext_id": "<ext-id>"
}
Response example:
{
"payload": {
"id": 131,
"status": 1,
"type": "DEFAULT",
"amount": 10000,
"card": {
"id": 55,
"status": true,
"masked_pan": "427831********9999",
"masked_card_holder": "TEST",
"card_type": "VISA",
"date_created": "2024-03-18 05:27:54",
"date_updated": "2024-03-18 05:27:54",
"verified_state": "PENDING",
"card_region": "ONUS"
},
"api_id": 1,
"card_id": 55,
"external_id": "f6d7c050-1927-43d6-a828-6a22235d6f32",
"mps_ext_id": "E0ZwTIl60PFsSbOz1o8yCwcXEn8=",
"status_ps": "Approved",
"result_code": "Approved",
"masked_pan": "427831********5430",
"client_ip_addr": "192.168.200.01",
"date_created": "2024-03-18 05:27:54",
"date_updated": "2024-03-18 05:27:54"
},
"status": {
"code": 0,
"message": "Success",
"trace_id": "66029622c951aa197d8196bd89d65308"
}
}
HTTP Request
POST https://apigw.atmos.uz/mps/pay/get/ext_id
возвращает данные транзакции по ее внешнему ключу
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| ext_id | Внешний идентификатор транзакции | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| payload | Объект с данными о транзакции |
| payload.id | Идентификатор транзакции |
| payload.status | Статус транзакции |
| payload.type | Тип транзакции |
| payload.amount | Сумма транзакции в валюте |
| payload.card | Объект с данными о карте |
| payload.card.id | Идентификатор карты |
| payload.card.status | Статус карты |
| payload.card.masked_pan | Маскированный номер карты |
| payload.card.masked_card_holder | Маскированное имя владельца карты |
| payload.card.card_type | Тип карты |
| payload.card.date_created | Дата создания карты |
| payload.card.date_updated | Дата обновления карты |
| payload.card.verified_state | Состояние верификации карты |
| payload.card.card_region | Регион карты |
| payload.api_id | ID API |
| payload.card_id | Идентификатор карты |
| payload.external_id | Внешний ID транзакции |
| payload.mps_ext_id | MPS внешний ID транзакции |
| payload.status_ps | Статус PS |
| payload.result_code | Код результата |
| payload.client_ip_addr | IP-адрес клиента |
| payload.date_created | Дата создания транзакции |
| payload.date_updated | Дата обновления транзакции |
| status | Объект с данными о статусе операции |
| status.code | Код статуса операции |
| status.message | Сообщение статуса операции |
| status.trace_id | Идентификатор трассировки операции |
Холдирование (МПС)
Создание операции холдирования (МПС)
Запрос:
curl -X POST "https://apigw.atmos.uz/mps-extend/uklon/hold" \
-H "Content-Type: application/json" \
-d '{
"ext_id": "uklon_001",
"amount": 12000,
"store_id": 100002,
"ofd_items": [
{
"items_id": "1",
"ofd_code": "03402004012000000",
"name": "105 UMUMIY TOZALASH 1000 ML",
"amount": 6000,
"quantity": 1
},
{
"items_id": "1",
"ofd_code": "10105001001000000",
"name": "Yetkazib berish",
"amount": 6000,
"quantity": 1
}
],
"account": "user_account",
"invoice_id": "INV-00001",
"card_id": 947,
"client_ip_addr": "192.168.1.1"
}'
POST /mps-extend/uklon/hold HTTP/1.1
Host: apigw.atmos.uz
Content-Type: application/json
{
"ext_id": "uklon_001",
"amount": 12000,
"store_id": 100002,
"ofd_items": [
{
"items_id": "1",
"ofd_code": "03402004012000000",
"name": "105 UMUMIY TOZALASH 1000 ML",
"amount": 6000,
"quantity": 1
},
{
"items_id": "1",
"ofd_code": "10105001001000000",
"name": "Yetkazib berish",
"amount": 6000,
"quantity": 1
}
],
"account": "user_account",
"invoice_id": "INV-00001",
"card_id": 947,
"client_ip_addr": "192.168.1.1"
}
Response example:
{
"payload": {
"id": 925,
"status": 4,
"rrn": "435206074577",
"type": "TEMPLATE",
"amount": 12000,
"card": {
"id": 947,
"status": true,
"approved": true,
"masked_pan": "419525********11111",
"masked_card_holder": "NAME LASTNAME",
"card_type": "VISA",
"date_created": "2024-12-16 12:21:43",
"date_updated": "2024-12-16 12:21:43",
"verified_state": "VERIFIED",
"status_3ds": "AUTHENTICATED",
"card_region": "DOMESTIC",
"store_id": 000002
},
"card_id": 947,
"external_id": "PARTNER_001",
"mps_ext_id": "TrZZ5RRDVRr4GY5FBub5Pjubix8=",
"status_ps": "Approved",
"status_3ds": "AUTHENTICATED",
"result_code": "Approved",
"masked_pan": "419525********9556",
"client_ip_addr": "192.168.1.1",
"date_created": "2024-12-17 06:42:43",
"date_updated": "2024-12-17 11:42:43",
"ofd_redirect_uri": "https://ofd.atmos.uz/api/ofd/T1VXWkVMejFYQVhvS3dNVHNXV1kwZz00",
"store_id": 100002,
"upper_commission": 0,
"lower_commission": 0
},
"status": {
"code": 0,
"message": "Success",
"trace_id": "67611d6344179f211d0ed71bf666e71c"
}
}
Создание операции холдирования средств на карте клиента, в рамках системы МПС
HTTP Request
POST https://apigw.atmos.uz/mps-extend/uklon/hold
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| ext_id | Внешний идентификатор | да |
| amount | Сумма транзакции | да |
| store_id | Идентификатор партнера | да |
| ofd_items.items_id | Идентификатор товара в списке OFD | да |
| ofd_items.ofd_code | Код товара в списке OFD | да |
| ofd_items.name | Наименование товара в списке OFD | да |
| ofd_items.amount | Сумма товара в списке OFD | да |
| ofd_items.quantity | Количество товара в списке OFD | да |
| account | Внутренний идентификатор | да |
| invoice_id | Идентификатор счета | да |
| card_id | Идентификатор карты | да |
| client_ip_addr | IP-адрес клиента | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| code | Код статуса операции |
| description | Описание статуса ответа |
| payload.id | Идентификатор транзакции |
| payload.status | Статус транзакции |
| payload.rrn | Номер транзакции |
| payload.type | Тип транзакции |
| payload.amount | Сумма транзакции |
| payload.card.id | Идентификатор карты |
| payload.card.status | Статус карты |
| payload.card.approved | Статус одобрения карты |
| payload.card.masked_pan | Маскированный номер карты |
| payload.card.masked_card_holder | Маскированное имя владельца карты |
| payload.card.card_type | Тип карты |
| payload.card.date_created | Дата создания карты |
| payload.card.date_updated | Дата последнего обновления карты |
| payload.card.verified_state | Состояние верификации карты |
| payload.card.status_3ds | Статус 3DS проверки карты |
| payload.card.card_region | Регион карты |
| payload.card.store_id | Идентификатор партнера |
| payload.card_id | Идентификатор карты (совпадает с payload.card.id) |
| payload.external_id | Внешний идентификатор |
| payload.mps_ext_id | Внешний идентификатор транзакции |
| payload.status_ps | Статус платежа |
| payload.status_3ds | Статус 3DS транзакции |
| payload.result_code | Результат платежа |
| payload.masked_pan | Маскированный номер карты (совпадает с payload.card.masked_pan) |
| payload.client_ip_addr | IP-адрес клиента |
| payload.date_created | Дата создания транзакции |
| payload.date_updated | Дата последнего обновления транзакции |
| payload.ofd_redirect_uri | URI для перенаправления |
| payload.store_id | Идентификатор партнера (совпадает с payload.card.store_id и payload.store_id) |
| payload.upper_commission | Верхняя комиссия |
| payload.lower_commission | Нижняя комиссия |
| status.trace_id | Идентификатор отслеживания запроса |
Списание холдированной суммы (МПС)
Запрос:
curl -X POST "https://apigw.atmos.uz/mps-extend/uklon/apply" \
-H "Content-Type: application/json" \
-d '{
"transaction_id": 925
}'
POST /mps-extend/uklon/apply HTTP/1.1
Host: apigw.atmos.uz
Content-Type: application/json
{
"transaction_id": 925
}
Response example:
{
"payload": {
"id": 925,
"status": 4,
"rrn": "435206074577",
"type": "TEMPLATE",
"amount": 12000,
"card": {
"id": 947,
"status": true,
"approved": true,
"masked_pan": "419525********1111",
"masked_card_holder": "NAME LASTNAME",
"card_type": "VISA",
"date_created": "2024-12-16 12:21:43",
"date_updated": "2024-12-16 12:21:43",
"verified_state": "VERIFIED",
"status_3ds": "AUTHENTICATED",
"card_region": "DOMESTIC",
"store_id": 100002
},
"card_id": 947,
"external_id": "uklon_001",
"mps_ext_id": "TrZZ5RRDVRr4GY5FBub5Pjubix8=",
"status_ps": "Approved",
"status_3ds": "AUTHENTICATED",
"result_code": "Approved",
"masked_pan": "419525********9556",
"client_ip_addr": "192.168.1.1",
"date_created": "2024-12-17 06:42:43",
"date_updated": "2024-12-17 06:42:43",
"redirect_uri": "https://ecomm.kapital24.uz:2443/ecomm2/ClientHandler?trans_id=TrZZ5RRDVRr4GY5FBub5Pjubix8%30",
"ofd_redirect_uri": "https://ofd.atmos.uz/api/ofd/T1VXWkVMejFYQVhvS3dNVHNXV1kwZz00",
"store_id": 100002,
"upper_commission": 0,
"lower_commission": 0
},
"status": {
"code": 0,
"message": "Success",
"trace_id": "67611e3b6b932e56690f31668951dbf2"
}
}
Выполняет списание денежных средств на основе ранее захолдированной суммы
HTTP Request
POST https://apigw.atmos.uz/mps-extend/uklon/apply
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| transaction_id | Идентификатор транзакции | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| code | Код статуса операции |
| description | Описание статуса ответа |
| payload.id | Идентификатор транзакции |
| payload.status | Статус транзакции |
| payload.rrn | Номер транзакции |
| payload.type | Тип транзакции |
| payload.amount | Сумма транзакции |
| payload.card.id | Идентификатор карты |
| payload.card.status | Статус карты |
| payload.card.approved | Статус одобрения карты |
| payload.card.masked_pan | Маскированный номер карты |
| payload.card.masked_card_holder | Маскированное имя владельца карты |
| payload.card.card_type | Тип карты |
| payload.card.date_created | Дата создания карты |
| payload.card.date_updated | Дата последнего обновления карты |
| payload.card.verified_state | Состояние верификации карты |
| payload.card.status_3ds | Статус 3DS проверки карты |
| payload.card.card_region | Регион карты |
| payload.card.store_id | Идентификатор партнера |
| payload.card_id | Идентификатор карты (совпадает с payload.card.id) |
| payload.external_id | Внешний идентификатор |
| payload.mps_ext_id | Внешний идентификатор транзакции |
| payload.status_ps | Статус платежа |
| payload.status_3ds | Статус 3DS транзакции |
| payload.result_code | Результат платежа |
| payload.masked_pan | Маскированный номер карты (совпадает с payload.card.masked_pan) |
| payload.client_ip_addr | IP-адрес клиента |
| payload.date_created | Дата создания транзакции |
| payload.date_updated | Дата последнего обновления транзакции |
| payload.redirect_uri | URI для перенаправления клиента |
| payload.ofd_redirect_uri | URI для перенаправления в систему OFD |
| payload.store_id | Идентификатор партнера (совпадает с payload.card.store_id и payload.store_id) |
| payload.upper_commission | Верхняя комиссия |
| payload.lower_commission | Нижняя комиссия |
| status.trace_id | Идентификатор отслеживания запроса |
Отмена операции холдирования (МПС)
Запрос:
curl -X POST "https://apigw.atmos.uz/mps-extend/uklon/cancel" \
-H "Content-Type: application/json" \
-d '{
"store_id": 100002,
"transaction_id": 925
}'
POST /mps-extend/uklon/cancel HTTP/1.1
Host: apigw.atmos.uz
Content-Type: application/json
{
"store_id": 100002,
"transaction_id": 925
}
Response example:
{
"status": {
"code": 0,
"message": "Success",
"trace_id": "67611fd176ffefc6b963f36dbe32e582"
}
}
Отменяет созданную ранее операцию холдирования
HTTP Request
POST https://apigw.atmos.uz/mps-extend/uklon/cancel
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| store_id | Идентификатор партнера | да |
| transaction_id | Идентификатор транзакции | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| code | Код статуса операции |
| description | Описание статуса ответа |
| status.code | Код статуса ответа (например, 0 - успешный запрос) |
| status.message | Описание статуса ответа (например, Success) |
| status.trace_id | Идентификатор отслеживания запроса |
Возврат средств по завершенной операции холдирования (МПС)
Запрос:
curl -X POST "https://apigw.atmos.uz/mps-extend/uklon/return" \
-H "Content-Type: application/json" \
-d '{
"transaction_id": 923
}'
POST /mps-extend/uklon/return HTTP/1.1
Host: apigw.atmos.uz
Content-Type: application/json
{
"transaction_id": 923
}
Response example:
{
"payload": {
"id": 923,
"status": 7,
"rrn": "000206071000",
"type": "TEMPLATE",
"amount": 10000,
"card_id": 947,
"external_id": "store_1",
"mps_ext_id": "AYhQoiCyvfwBOJLqEj24w0ioLHU0",
"status_ps": "Approved",
"status_3ds": "AUTHENTICATED",
"result_code": "Approved",
"masked_pan": "419525********1111",
"client_ip_addr": "192.168.1.1",
"date_created": "2024-12-17 06:17:17",
"date_updated": "2024-12-17 12:12:17",
"redirect_uri": "https://ecomm.kapital24.uz:2443/ecomm2/ClientHandler?trans_id=AYhQoiCyvfwBOJLqEj24w0ioLHU%30",
"ofd_redirect_uri": "https://ofd.atmos.uz/api/ofd/blMxbUNIUEZ0WTNNWGFDVC9VVGQ1dz00",
"upper_commission": 0,
"lower_commission": 0
},
"status": {
"code": 0,
"message": "Success",
"trace_id": "676124513032520bff53bc5309ac8488"
}
}
Выполняет возврат средств, списанных ранее на основе операции холдирования
HTTP Request
POST https://apigw.atmos.uz/mps-extend/uklon/return
Параметры запроса
| Параметр | Описание | Обязательность |
|---|---|---|
| transaction_id | Идентификатор транзакции | да |
Параметры ответа
| Параметр | Описание |
|---|---|
| code | Код статуса операции |
| description | Описание статуса ответа |
| payload.id | Идентификатор транзакции |
| payload.status | Статус транзакции |
| payload.rrn | Номер транзакции |
| payload.type | Тип транзакции |
| payload.amount | Сумма транзакции |
| payload.card_id | Идентификатор карты |
| payload.external_id | Внешний идентификатор |
| payload.mps_ext_id | Внешний идентификатор транзакции |
| payload.status_ps | Статус платежа |
| payload.status_3ds | Статус 3DS транзакции |
| payload.result_code | Результат платежа |
| payload.masked_pan | Маскированный номер карты |
| payload.client_ip_addr | IP-адрес клиента |
| payload.date_created | Дата создания транзакции |
| payload.date_updated | Дата последнего обновления транзакции |
| payload.redirect_uri | URI для перенаправления клиента |
| payload.ofd_redirect_uri | URI для перенаправления в систему OFD |
| payload.upper_commission | Верхняя комиссия |
| payload.lower_commission | Нижняя комиссия |
| status.trace_id | Идентификатор отслеживания запроса |
Системные статусы и ошибки
В случае ошибок ATMOS API возвращает общепринятые статусы, которые приведены в таблице ниже:
| Статус ответа | Значение |
|---|---|
| 400 | Bad Request -- Запрос содержит ошибку. |
| 401 | Unauthorized -- Вы не авторизованы в системе. |
| 403 | Forbidden -- Доступ запрещен. |
| 404 | Not Found -- Удовлетворяющих результатов не найдено. |
| 405 | Method Not Allowed -- Метода не существует. |
| 429 | Too Many Requests -- Слишком много запросов. |
| 500 | Internal Server Error -- На стороне сервера произошла ошибка. Попробуйте позже. |
| 503 | Service Unavailable -- Сервис временно недоступен. |
Ошибки при совершении транзакций
| Код ошибки | Описание ошибки |
|---|---|
| STPIMS-ERR-001 | Внутренняя ошибка |
| STPIMS-ERR-003 | Неправильный партнер |
| STPIMS-ERR-004 | Карта не найдена |
| STPIMS-ERR-005 | Карта не подключена к номеру |
| STPIMS-ERR-006 | Требуемые параметры не найдены |
| STPIMS-ERR-007 | Неправильный формат параметра |
| STPIMS-ERR-008 | Карта не зарегистрирована |
| STPIMS-ERR-009 | Неправильные параметры |
| STPIMS-ERR-010 | Учетная запись не существует |
| STPIMS-ERR-011 | Неправильные опции для платежа |
| STPIMS-ERR-012 | Неправильный id транзакции |
| STPIMS-ERR-013 | Неправильные данные пользователя |
| STPIMS-ERR-014 | Неправильная попытка входа |
| STPIMS-ERR-015 | Неправильная регистрация |
| STPIMS-ERR-016 | Неправильный платеж |
| STPIMS-ERR-017 | Неактивный партнер |
| STPIMS-ERR-021 | Неправильный номер телефона |
| STPIMS-ERR-022 | Мобильный оператор не работает |
| STPIMS-ERR-023 | Сервис не найден |
| STPIMS-ERR-024 | Нет соединения с банком |
| STPIMS-ERR-025 | Банк не найден |
| STPIMS-ERR-026 | Попробуйте позже |
| STPIMS-ERR-027 | Соединитесь с администратором |
| STPIMS-ERR-028 | Отказ в соединении с банком |
| STPIMS-ERR-029 | Незарегистрированный банк |
| STPIMS-ERR-030 | Карта не найдена в банке |
| STPIMS-ERR-031 | Превышен лимит запросов |
| STPIMS-ERR-032 | Агент не найден |
| STPIMS-ERR-033 | Телефонный номер не соответствует |
| STPIMS-ERR-034 | Транзакция не прошла |
| STPIMS-ERR-037 | Не найден ID магазина |
| STPIMS-ERR-039 | Неверная сумма для платежа |
| STPIMS-ERR-042 | Не разрешенная сумма платежа |
| STPIMS-ERR-043 | Банковская Карта не найдена |
| STPIMS-ERR-044 | Магазин с текущим ID не найден |
| STPIMS-ERR-048 | Номер уже зарегистрирован |
| STPIMS-ERR-050 | Карта не может быть зарегистрирована |
| STPIMS-ERR-051 | Информация не найдена |
| STPIMS-ERR-053 | Мобильный префикс не найден |
| STPIMS-ERR-054 | Больше двух мобильных обновлений |
| STPIMS-ERR-055 | Номера не найдены |
| STPIMS-ERR-056 | Проблема при авторизации |
| STPIMS-ERR-057 | Недостаточно средств |
| STPIMS-ERR-058 | Карта заблокирована |
| STPIMS-ERR-060 | Не зарегистрированный пользователь |
| STPIMS-ERR-061 | Запрашиваемая транзакция не найдена |
| STPIMS-ERR-062 | Неправильный запрос |
| STPIMS-ERR-064 | Оплата отменена |
| STPIMS-ERR-065 | Оплата в процессе |
| STPIMS-ERR-066 | Вы недавно оплатили на этот лицевой счет, попробуйте позже |
| STPIMS-ERR-067 | Срок действия вашей карты истек. Просим обратиться в банк. |
| STPIMS-ERR-068 | Свяжитесь с эмитентом. Просим обратиться в банк. |
| STPIMS-ERR-069 | Обнаружена подозрительная карта. Просим обратиться в банк. |
| STPIMS-ERR-070 | Отказано в транзакции. Просим обратиться в банк. |
| STPIMS-ERR-072 | Ваши операции запрещены. Просим обратиться в банк. |
| STPIMS-ERR-073 | Ваша карта является утерянной. Просим обратиться в банк. |
| STPIMS-ERR-074 | Что-то не так с вашей картой. Просим обратиться в банк. |
| STPIMS-ERR-075 | Что-то не так с вашей картой. Просим обратиться в банк. |
| STPIMS-ERR-076 | Карта недействительна. Просим обратиться в банк. |
| STPIMS-ERR-077 | Что-то не так с вашей картой. Просим обратиться в банк. |
| STPIMS-ERR-078 | Что-то не так с вашей картой. Просим обратиться в банк. |
| STPIMS-ERR-079 | Ваша карта заблокирована (не активированная). Просим обратиться в банк. |
| STPIMS-ERR-080 | Превышено количество попыток ввода PIN кода. Просим обратиться в банк. |
| STPIMS-ERR-081 | Принудительная смена PIN-кода. Просим обратиться в банк. |
| STPIMS-ERR-082 | Ваша карта заблокирована по причине задолженности по кредиту. Просим обратиться в банк. |
| STPIMS-ERR-083 | Виртуальная карта не активирована |
| STPIMS-ERR-084 | По данной карте доступны только PIN-транзакции |
| STPIMS-ERR-085 | Ваша карта не персонифицирована. Просим обратиться в банк. |
| STPIMS-ERR-086 | Что-то не так с вашей картой. Просим обратиться в банк. |
| STPIMS-ERR-087 | Временно заблокировано пользователем |
| STPIMS-ERR-088 | Данная карта заблокирована пользователем. Просим обратиться в банк. |
| STPIMS-ERR-089 | Не подключено SMS-информирование. Просим подключить SMS-информирование |
| STPIMS-ERR-090 | Карта с данным номером не найдена. Неверно указана дата истечения срока вашей карты. |
| STPIMS-ERR-092 | Транзакция закрыта |
| STPIMS-ERR-093 | Ошибка в системе биллинга поставщика |
| STPIMS-ERR-094 | Нет связи с ЕОПЦ |
| STPIMS-ERR-095 | Пользователь заблокирован |
| STPIMS-ERR-097 | Карта существует |
| STPIMS-ERR-098 | OTP код указан неверно |
| STPIMS-ERR-099 | Данные EPOS не указаны |
| STPIMS-ERR-100 | Запрашиваемая транзакция ранее была отменена |
| STPIMS-ERR-101 | Транзакция не отменилась |
| STPIMS-ERR-102 | СМС не отправилось, скорее всего СМС шлюз не доступен |
| STPIMS-ERR-103 | Терминал не найден |
| STPIMS-ERR-104 | P2P переводы отключены для данного банка |
| STPIMS-ERR-105 | Пользователь и карта не взаимосвязанны |
| STPIMS-ERR-106 | Некорректный формат СМС |
| STPIMS-ERR-107 | Рассрочка / Автоплатеж / Кредит не найден |
| STPIMS-ERR-108 | Некорретные данные платежа |
| STPIMS-ERR-109 | Данные EPOS некорректы |
| STPIMS-ERR-111 | Карты отправителя и получателя не должны быть идентичными |
| STPIMS-ERR-112 | Недостаточно средств на балансе карты для проведения платежа |
| STPIMS-ERR-113 | Платеж закрыт |
| STPIMS-ERR-114 | Платеж закрыт |
| STPIMS-ERR-116 | Ошибка при получении информации по карте |
| STPIMS-ERR-117 | Неправильный номер карты |
| STPIMS-ERR-118 | Статус платежа неизвестен |
| STPIMS-ERR-120 | Оплата временно невозможна |
| STPIMS-ERR-121 | Перевод в обработке |
| STPIMS-ERR-124 | Ключ сессии пользователя не создан |
| STPIMS-ERR-125 | Сессия пользователя не удалена |
| STPIMS-ERR-127 | У партнера не добавлено ни одной карты, либо карта неактивна |
| STPIMS-ERR-128 | Указанный номер счета не найден в указанной транзакции |
| STPIMS-ERR-130 | При создании планировщика необходимо указать карту для списания |
| STPIMS-ERR-134 | Не указана карта отправителя |
| STPIMS-ERR-135 | Не указана карта получателя |
| STPIMS-ERR-136 | Переводы с использованием корпоративных карт запрещены |
| STPIMS-ERR-137 | Переводы с использованием корпоративных карт запрещены |
| STPIMS-ERR-138 | Ежемесячный лимит превышен для p2p |
| STPIMS-ERR-139 | Одноразовый лимит превышен для p2p |
| STPIMS-ERR-140 | Одноразовый лимит превышен для p2p |
| STPIMS-ERR-142 | Холдирование не подтверждено |
| STPIMS-ERR-143 | Холдирование не снято |
| STPIMS-ERR-144 | Время холдирования истекло |
| INFO-201 | Код подтверждения отправлен на номер СМС-информирования |
| INFO-202 | Платеж в обработке |
Системные ошибки (МПС)
| Код | Описание | Комментарий |
|---|---|---|
| 0 | Успех | Операция завершилась успешно |
| -1 | Внутренняя ошибка | Обратитесь к администратору, произошла системная ошибка |
| -20 | Терминал не найден | Терминал не найден или не зарегистрирован. Обратитесь к администратору |
| -11 | Транзакция находится в неопределенном состоянии | Транзакция не может быть продолжена. Зависит от выполняемой операции и состояния транзакции |
| -12 | Транзакция не найден | Транзакция не найдена по заданному идентификатору |
| -100 | В процессинге произошла ошибка | В процессинге произошла ошибка |
| -200 | Карта не найдена | Карта не найдена |
| -201 | Карта неверифицирована | Карта не прошла 3DS верификацию |
Системные статусы (МПС)
| Статус | Описание |
|---|---|
| 1 | Транзакция создана |
| 2 | Ожидание статуса создания транзакции |
| 3 | Ожидание статуса подтверждения транзакции |
| 4 | Подтверждение транзакции |
| 5 | Транзакция завершилась неуспешно |
| 6 | Отмена транзакции завершилась успешно |
| 7 | Возврат транзакции завершился успешно |
| 8 | Ожидание статуса отмены транзакции |
| 9 | Ожидание статуса возврата транзакции |
Состояния 3DS верификации (МПС)
| Статус | Описание |
|---|---|
| PENDING | Ожидание 3DS верификации карты |
| VERIFIED | 3DS верификация прошла успешно |
| FAILED | 3DS верификация завершилась неуспешно |
Справочник статусов и типов (МПС - Привязка карт)
Коды ошибок
| Код | Название | Описание |
|---|---|---|
| 0 | OK | Успешный запрос |
| -1 | ERROR | Произошла системная ошибка |
| -2 | UNDEFINED | Неопределенная ошибка |
| -100 | PROCESSING_ERROR | Ошибка при обработке запроса |
| -10 | TRANSACTION_UNIQUENESS_ERROR | Транзакция уже существует |
| -11 | TRANSACTION_INVALID_STATE_ERROR | Транзакция в неверном состоянии |
| -12 | TRANSACTION_NOT_FOUND | Транзакция не найдена |
| -15 | TRANSACTION_NOT_CANCELLED | Невозможно отменить транзакцию, попробуйте позже |
| -203 | TRANSACTION_DECLINED | Транзакция отклонена платежным провайдером |
| -300 | INSUFFICIENT_FUNDS | Транзакция отклонена из-за недостаточности средств |
| -13 | COMMISSION_ERROR | Ошибка при расчете комиссии |
| -200 | CARD_NOT_FOUND | Карта не найдена |
| -201 | CARD_NOT_VERIFIED | Ожидается 3D-авторизация карты |
| -202 | CARD_NOT_VALID | Карта не является действительной |
| -204 | CARD_BIND_NOT_VALID | Привязка карты не активна |
| -20 | TERMINAL_NOT_FOUND | Терминал не найден |
| -21 | TERMINAL_CONFIGURATION_ERROR | Ошибка конфигурации терминала |
| -350 | STORE_NOT_FOUND | Магазин не найден по идентификатору |
| -400 | API_KEY_NOT_FOUND | API-ключ не найден |
Статусы транзакций (status)
| Код | Статус | Финальный |
|---|---|---|
| 0 | NEW | нет |
| 1 | OPEN | нет |
| 2 | PENDING_OPEN | нет |
| 3 | PENDING_CONFIRM | нет |
| 4 | SUCCESS | да |
| 5 | FAILED | да |
| 6 | CANCELLED | да |
| 7 | REVERTED | да |
| 8 | PENDING_CANCELLED | да |
| 9 | PENDING_REVERTED | да |
Признак финальный - нет означает, что транзакция в обработке, и по прошествии времени нужно перезапросить статус
Статусы верификации карт (verified_state)
| Статус |
|---|
| OPEN |
| PENDING |
| VERIFIED |
| FAILED |
Типы процессинговых транзакций (card_type)
| Тип |
|---|
| VISA |
| MASTERCARD |
Песочница
Для тестирования и интеграции с API рекомендуется использование тестовых платежных данных. Все операции, проводимые с приведенными картами имеют демонстративный характер, и не подразумевают списание настоящих денежных средств.
Тестовые карты:
PAN:
9860090101014364Expiry:02/28PAN:
9860090101893213Expiry:02/28PAN:
9860090101842392Expiry:02/28PAN:
9860090101469915Expiry:02/28
Тестовые карты для отладки ошибок:
- PAN:
8600492986215602Expiry:03/20- истек срок действия карты
Callback API
Callback API - механизм согласования с мерчантом проводимых транзакций. При проведении каждой транзакции система ATMOS обращается в биллинговую систему мерчанта, и передает ей данные платежа в формате JSON. Только после получения успешного статуса со стороны мерчанта сумма будет списана.
Для Поставщика услуг в системе ATMOS предоставляется api_key для проверки входящих сообщений.
Отправляемые данные
Callback API отправляет в систему поставщика следующие данные:
| Параметр | Значение |
|---|---|
| store_id | ID мерчанта |
| transaction_id | ID транзакции |
| transaction_time | время оплаты |
| amount | сумма оплаты |
| invoice | идентификатор оплаченного инвойса |
| sign | уникальная цифровая подпись |
{
"status": 1,
"message": "Успешно"
}
{
"status": 0,
"message": "Инвойс с номером 123 отсутствует в системе"
}
Примеры ответа биллинга поставщика(мерчанта)
Callback API подтверждает оплату только в том случае, если ответ от биллинга мерчанта имеет значение параметра status 1 и код ответа 200. Примеры ответов приведены в области сбоку
| Параметр | Значение |
|---|---|
| status | статус ответа |
| message | текстовое сообщение(детали статуса) |
Последовательность действий
Следуя изложенной информации, можно пошагово описать приницип работы механизма Callback API следующим образом:
- На стороне ATMOS формируется платеж и запускается процесс оплаты;
- Перед подтверждением оплаты система ATMOS обращается к биллингу мерчанта, отправляя данные платежа(см. отправляемые данные);
- Мерчант подтверждает или отклоняет оплату (см. примеры ответа биллинга поставщика(мерчанта))
- Транзакция завершена
Альтернативные виды оплаты
HTML-виджет
Оплата через виджет - решение для упрощенной интеграции с платежным сервисом ATMOS. Платежный виджет предоставляет возможность принимать оплаты на стороне сайта мерчанта, через сгенерированный специальный виджет оплаты. Виджет оплаты создается через конструктор, с указанием необходимых параметров, которые будут приведены ниже.
Инструкция по установке виджета на сайт
Встраиваемый код:
<!-- тег head -->
<script src="https://cdn.pays.uz/checkout/js/v1.0.1/test-checkout.js">
</script>
<!-- тег head -->
<div id="parent-frame">
<script th:inline="javascript">
/*<![CDATA[*/
paymo_open_widget({
parent_id: "parent-frame", // id html-элемента для встраивания виджета
store_id: 0, // уникальный id вашего store
account: "abc", // идентификатор платежа
terminal_id: 0, // id терминала(если есть)
success_redirect: "url", // адрес перенаправления после успешной оплаты
fail_redirect: "url", // адрес перенаправления после неудачной оплаты
version: "1.0.0", // версия виджета
amount: 500000, //сумма платежа в тиинах
details: "string", // детали платежа (строка)
lang:"ru", // язык виджета (en, ru, uz)
key: // ключ авторизации,
theme: "blue" // Цвет виджета
});
/*]]>*/
</script>
<div/>
Встройте на Вашу страницу html-тег
<script src="url"></script>. В атрибуте src тега script укажите url получения скрипта:- на время тестирования:
http://cdn.pays.uz/checkout/js/v1.0.1/test-checkout.js - на принятие реальных оплат:
https://cdn.pays.uz/checkout/js/v1.0.1/checkout.js
- на время тестирования:
Встройте в html разметку Вашего сайта приведенный в боковой панели код;
Укажите параметры, необходимые для работы виджета;
Виджет готов к использованию.
Параметры виджета
| Параметр | Описание | Обязательность |
|---|---|---|
| parent_id | id html-элемента для встраивания виджета | да |
| store_id | id вашего store | да |
| account | идентификатор платежа(прозизв.строка) | да |
| terminal_id | id терминала(если есть) | нет |
| success_redirect | url адрес перенаправления после успешной оплаты | да |
| fail_redirect | url адрес перенаправления при неудачной оплате | да |
| version | версия виджета | нет |
| amount | сумма платежа в тиинах | да |
| details | детали платежа (прозизв.строка) | нет |
| lang | язык виджета (en, ru, uz) | нет |
| key | ключ авторизации | да |
| theme | цветовое оформление виджета | нет |
Платежная страница
Платежная страница - наиболее удобное решение для мобильных приложений, поддерживающих webview. Представляет из себя безопасную оплату на стороне ATMOS.
Для оплаты создания через платежную страницу требутся:
- вызвать метод
/merchant/pay/createи создать драфт транзакции для оплаты; - перейти на страницу оплаты, с указанием следующих параметров:
- storeId - уникальный id вашего store;
- transactionId - id созданной ранее транзакции;
- redirectLink - url для перенаправления после оплаты(необязательно).
В итоге, сгенерированная ссылка должна иметь подобный вид:
https://test-checkout.pays.uz/invoice/get?storeId=1111&transactionId=222222&redirectLink=http://site.com
Тестовая страница(песочница): http://test-checkout.pays.uz/invoice/get
Платежная страница(production): https://checkout.pays.uz/invoice/get