Дисклеймер
Через 20 минут с момента генерации QR кода в случае если QR коду не присвоился финальный статус (PAID, REJECTED), то QR код будет отменен и не сможет быть оплачен и транзакция будет помечена как отказанная (REJECTED)
1. Генерация токена
Request
TEST URL POST https://test-epay-oauth.epayment.kz/oauth2/token PROD URL POST https://epay-oauth.homebank.kz/oauth2/token
Body: form-data
grant_type: "client_credentials" client_id: "CLIENTID" client_secret: "CLIENTSECRET" scope: "webapi usermanagement email_send verification statement statistics payment" terminal: "TERMINALID" invoiceID: "invoiceID" amount: "100" currency: KZT
Входящие параметры
grant_type | Тип запроса, который указывает, что используется клиентская аутентификация. Значение: client_credentials, обязательно |
client_id | Ваш уникальный идентификатор клиента. Замените your client id на ваш реальный идентификатор, обязательно |
client_secret | Секретный ключ вашего клиента. Замените your client secret на ваш реальный секрет, обязательно |
scope | Область доступа, необходимая для выполнения операции. Для платежей укажите: payment, обязательно |
terminal | Идентификатор терминала в формате UUID. Замените your terminal id(uuid) на ваш реальный идентификатор терминала, обязательно |
invoiceID | Уникальный идентификатор счета, связанного с платежом. Замените your invoice id на ваш реальный идентификатор счета, обязательно |
amount | Сумма, которую необходимо обработать. Замените your amount на вашу реальную сумму, обязательно |
currency | Валюта платежа. Укажите: KZT (тенге), обязательно |
Response
{
"access_token": "access token",
"expires_in": "1200",
"refresh_token": "",
"scope": "payment",
"token_type": "Bearer"
}
Данные ответа:
access_token | Токен доступа, который вы будете использовать для авторизации в дальнейших запросах. Тип: строка |
expires_in | Время жизни токена в секундах. В данном случае: 1200 (20 минут) |
refresh_token | Токен обновления, который может использоваться для получения нового токена доступа. В данном случае пустой |
scope | Область доступа, которая была запрошена. Здесь: payment |
token_type | Тип токена, который будет использоваться для авторизации. Обычно: Bearer |
2. Генерация QR
Request
TEST URL POST https://test-epay-api.epayment.kz/payment/qr/generate PROD URL POST https://epay-api.homebank.kz/payment/qr/generate Authorization: заголовок Bearer с токеном доступа, полученным на предыдущем этапе. Payload: Тип payload: JSON
Body: form-data
{
"accountId": "your account id",
"payerEmail": "payer@mail.com",
"payerPhone": "87777777777",
"postLink": "https://example.com/postlink",
"failurePostLink": "https://example.com/failurepostlink",
"description": "payment purpose",
"data": "",
"language": "ru"
}
Входящие параметры
accountId | Уникальный идентификатор вашего аккаунта. Замените your account id на ваш реальный идентификатор (можете придумать любое значение- строка), опционально |
payerEmail | Электронная почта плательщика. Укажите реальный адрес, например: payer@mail.com, опционально |
payerPhone | Номер телефона плательщика в формате строки. Укажите реальный номер, например: 87777777777, опционально |
postLink | URL для обратного вызова после успешной оплаты. Замените https://example.com/postlink на ваш реальный адрес, обязательно |
failurePostLink | URL для обратного вызова в случае неудачной оплаты. Замените https://example.com/failurepostlink на ваш реальный адрес, обязательно |
description | Цель платежа. Укажите текст, описывающий, за что производится оплата, например: payment purpose, опционально |
data | Дополнительные данные, которые можно передать вместе с запросом. В данном случае оставьте пустым, если не требуется, опционально |
description | Язык, на котором будет отображаться информация. Например: ru для русского |
Response
{
"qrcode": "qr code",
"homebankLink": "homebank deeplink",
"onlinebankLink": "online bank deeplink",
"status": "NEW",
"billNumber": 123456
}
Данные ответа:
qrcode | Сгенерированный QR-код для оплаты. Тип: строка |
homebankLink | Deeplink для перехода в мобильное приложение Homebank. Тип: строка |
onlinebankLink | Deeplink для перехода в онлайн-банк. Тип: строка |
status | Текущий статус запроса на генерацию QR-кода. Здесь: NEW |
billNumber | Уникальный номер счета, связанного с транзакцией. Тип: целое число |
Возможные коды ошибок
- код ошибки – 217. HTTP код – 400:
Параметр terminal не передан при генерации токена
- код ошибки – 218. HTTP код – 400:
Параметр invoiceID не передан при генерации токена
- код ошибки – 563. HTTP код – 400:
Ошибка получения данных о терминале через terminal id переданный в токене
- код ошибки – 219. HTTP код – 400:
Параметр pay_qr_local отключен на терминале
- код ошибки – 1531. HTTP код – 400:
Ошибка парсинга структуры переданной в payload
- код ошибки – 220. HTTP код – 400:
Ошибка при генерации QR
3. Получение статуса платежа
Request
TEST URL GET https://test-epay-api.epayment.kz/qr PROD URL GET https://epay-api.homebank.kz/qr Authorization: заголовок Bearer с токеном доступа, , использованным при генерации QR. Payload: Пустой.
Response
{
"qrcode": "00020101021227400012KZ.HALYKBANK0108HSBKKZKX02089830130028660011477859186730120KZ8160101310001554340208983013000301N0501006010520447845303398540420005802KZ5907KINO.KZ6006ALMATY62380111477859186730803191101204074000842363046CA2",
"status": "NEW",
"reference": "",
"cardId": "",
"cardType": "",
"cardMask": "",
"trType": "LOCALQR",
"secure3D": false,
"openwayId": "",
"issuer": "HSBKKZKX",
"issuerBankCountry": "KZ",
"fee": 0,
"amount": 2000,
"currency": "KZT",
"paymentChannel": "",
"errDescription": "",
"retCode": ""
}
Данные ответа:
qrcode | Строка, представляющая QR-код |
status | Текущий статус QR-платежа. Возможные значения: NEW – статус при генерации QR-кода; SCANNED – статус при сканировании в приложении Halyk Super App; BLOCKED – статус при проведении оплаты, средства заблокированы; PAID или REJECTED – статус при успешном платеже или ошибке платежа; |
reference | Ссылка на дополнительную информацию (если доступно) |
cardId | Идентификатор карты (если применимо) |
cardType | Тип карты (если применимо) |
cardMask | Маска карты (если применимо) |
trType | Тип транзакции. В данном случае: LOCALQR |
secure3D | Указывает, требуется ли 3D Secure для данной транзакции. Значение: false |
openwayId | Идентификатор маршрута (если применимо) |
issuer | Идентификатор эмитента карты |
issuerBankCountry | Страна банка-эмитента. Например: KZ |
fee | Комиссия за транзакцию. Значение: 0 |
amount | Сумма платежа. Например: 2000 |
currency | Валюта платежа. Например: KZT |
paymentChannel | Канал оплаты (если применимо) |
errDescription | Описание ошибки (если применимо) |
retCode | Код возврата платежа (если применимо) |
Возврат QR платежа
1. Генерация токена
TEST URL POST https://test-epay-oauth.epayment.kz/oauth2/token PROD URL POST https://epay-oauth.homebank.kz/oauth2/token
Body: form-data
grant_type: "client_credentials" client_id: "CLIENTID" client_secret: "CLIENTSECRET" scope: "webapi usermanagement email_send verification statement statistics payment" terminal: "TERMINALID" invoiceID: "invoiceID" amount: "100" currency: KZT
Входящие параметры
grant_type | Тип запроса, который указывает, что используется клиентская аутентификация. Значение: client_credentials, обязательно |
client_id | Ваш уникальный идентификатор клиента. Замените your client id на ваш реальный идентификатор, обязательно |
client_secret | Секретный ключ вашего клиента. Замените your client secret на ваш реальный секрет, обязательно |
scope | Область доступа, необходимая для выполнения операции. Для платежей укажите: payment, обязательно |
Response
{
"access_token": "access token",
"expires_in": "1200",
"refresh_token": "",
"scope": "payment",
"token_type": "Bearer"
}
Данные ответа:
access_token | Токен доступа, который вы будете использовать для авторизации в дальнейших запросах. Тип: строка |
expires_in | Время жизни токена в секундах. В данном случае: 1200 (20 минут) |
refresh_token | Токен обновления, который может использоваться для получения нового токена доступа. В данном случае пустой |
scope | Область доступа, необходимая для выполнения операции. Для платежей укажите: payment |
token_type | Тип токена, который будет использоваться для авторизации. Обычно: Bearer |
2. Проведение возврата
Подробнее: https://epayment.kz/docs/vozvrat-chastichnyi-vozvrat
TEST URL POST https://test-epay-api.epayment.kz/operations/:id/refund PROD URL POST https://epay-api.homebank.kz/operation/:id/refund Id указанный в URL это id транзакции который вы получили ранее в postlink после удачной оплаты или при запросе статуса транзакции.
Body: form-data
{
"amount": 100,
"purpose": "refund purpose"
}
Входящие параметры
amount | Сумма возврата, в случае если сумма не будет передана, то запрос будет идентифицироваться как полный возврат, опционально |
payerEmail | Причина возврата платежа, опционально |
Response
{
"code": 3225,
"externalID": "",
"message": "in progress"
}
Данные ответа:
code | Код ответа |
message | Сообщение с информацией о статусе возврата |
Дополнительно: При отправке запроса на возврат, возврат лишь инициируется, но не проводится сразу. В ответе на успешный запрос на возврат вы получите сообщение “in_progress”, статус возврата можно получить через check status.
Описание check status QR платежа
https://epayment.kz/docs/check-status-payment
Получение информации о платеже или возврате происходит точно также как в документации, за исключением одного поля в ответе. В объекте transaction для QR’ных транзакций будет отдаваться дополнительное поле “paymentType”: “QR”.