Дисклеймер

Через 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, опционально
postLinkURL для обратного вызова после успешной оплаты. Замените https://example.com/postlink на ваш реальный адрес, обязательно
failurePostLinkURL для обратного вызова в случае неудачной оплаты. Замените 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-код для оплаты. Тип: строка
homebankLinkDeeplink для перехода в мобильное приложение Homebank. Тип: строка
onlinebankLinkDeeplink для перехода в онлайн-банк. Тип: строка
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”.