API hutkoВерсия 1.0

Параметри запиту

Параметр version необхідно передавати зі значенням 1.0.1

Параметр Тип Опис Приклад переданого мерчантом значення
order_id string(1024) Ідентифікатор замовлення, що призначається мерчантом.

обов’язковий
ID1234
merchant_id integer(12) Унікальний ідентифікатор мерчанта. Видається торговцю після реєстрації.

обов’язковий
1
order_desc string(1024) Опис замовлення. Передається мерчантом завжди в кодуванні UTF-8

обов’язковий
Придбати квиток на поїзд № 1234 Київ – Львів
signature string(40) Підпис замовлення. Слугує для перевірки цілісності та автентичності запиту від мерчанта на стороні сервера платіжного шлюзу. Алгоритм формування підпису див. Формування підпису запиту і відповіді

обов’язковий
1773cf135bd89656131134b98637894dad42f808
amount integer(12) Сума замовлення в копійках / центах без роздільників

обов’язковий
1020 (USD) — означає 10 доларів 20 центів
currency string(3) Валюта замовлення. Допустимі значення:
UAH — українська гривня
USD — долар США
EUR — євро
GBP — фунт стерлінгів обов’язковий

CZK — чеська крона
USD
version string(10) Версія протоколу.

Значення за замовчуванням: 1.0.1
Версія 1.0 – застаріла
1.0.1
response_url string(2048) URL сторінки мерчанта, на яку буде перенаправлений клієнт у браузері після завершення оплати

Значення за замовчуванням: https://pay.hutko.org/checkout/responsepage
http://site.com/responseurl
server_callback_url string(2048) URL сторінки мерчанта, на яку буде надіслано відповідь про результат оплати через сервер-сервер з’єднання. Детальніше про серверні колбеки див. п. Отримання Callback
http://site.com/callbackurl
payment_systems string(1024) Список платіжних систем, доступних клієнту при виборі способу оплати на сторінці hutko. Системи повинні бути розділені комою або крапкою з комою.
Допустимі значення: див. Підтримувані платіжні системи

За замовчуванням: береться з налаштувань мерчанта
card
payment_method string(1024) Платіжний метод, який необхідно відобразити платнику на платіжній сторінці за замовчуванням. Наприклад monobank_ua

За замовчуванням: береться з налаштувань мерчанта
card
default_payment_system string(25) Платіжна система, яка першою відобразиться платнику на платіжній сторінці.
Допустимі значення: див. Підтримувані платіжні системи
card
lifetime integer(9) Час життя замовлення в секундах. Після закінчення цього часу, замовленню буде присвоєно статус ‘expired’ якщо клієнт його не оплатив

Значення за замовчуванням: 36000
Максимально-допустиме значення: 69120000
600
merchant_data string(2048) Будь-який довільний набір даних, який мерчант хоче отримати назад у відповіді на response_url та/або server_callback_url, а також у звітах  
preauth string(1) Параметр застосовується тільки при оплаті карткою Visa/MasterCard
N — сума списується з картки клієнта відразу і відшкодовується на рахунок мерчанта відповідно до регламенту зарахування.
Y — сума блокується на картці клієнта і не списується доти, доки мерчант не надішле запит capture для підтвердження списання

Значення за замовчуванням: N
N
sender_email string(254) Email платника  
delayed string(1) Ознака відкладеного платежу.
Y — дозволити клієнту оплатити платіж пізніше в межах ліміту часу, зазначеного в параметрі lifetime. Торговець повинен бути готовим до отримання декількох колбеків і редиректів з результатом оплати для одного і того ж платежу. Клієнту буде дозволено повторити спробу оплати одного і того ж order_id, якщо попередня спроба була не успішна
N — у разі спроби оплатити платіж з одним і тим самим order_id повторно клієнт отримуватиме помилку з проханням перейти на сайт торговця і створити платіж заново. У цьому випадку буде тільки один колбек на server_callback_url

Значення за замовчуванням: Y
 
lang string(2) Мова платіжної сторінки. Доступні значення:
uk — українська
ru — російська
en — англійська
lv — латиська
fr — французька
cs — чеська
ro — румунська
it — італійська
sk — словацька
pl — польська
es — іспанська
hu — угорська
de — німецька
 
product_id string(1024) Ідентифікатор оплачуваного товару/послуги  
required_rectoken string(1) Прапор, що вказує на необхідність повертати токен картки – токен, за яким можна списувати кошти з картки без подальшої участі клієнта

Значення за замовчуванням: N
Y
verification string(1) Y – буде зроблено автоматичний реверс платежу системою hutko, якщо платіж успішний

Значення за замовчуванням: N
Y
verification_type string(25) amount – на карті блокується зазначена сума без додаткових перевірок
code – на картці блокується зазначена сума, з випадковим 4-х символьним кодом, який клієнт повинен ввести для завершення верифікації

Значення за замовчуванням: amount
Y
rectoken string(40) Токен картки, за яким можна списувати кошти з картки без подальшої участі клієнта
544d3f86237886b6404d8b000f6a7d71c45410b7
receiver_rectoken string(40) Токен картки, за яким можна кредитувати картку, не передаючи повний номер картки
544d3f86237886b6404d8b000f6a7d71c45410b7
design_id integer(6) ID дизайну, налаштованого в мерчант-порталі
123
subscription string(1) Y – активувати регулярні платежі (за календарем)
N – значення за замовчуванням, деактивувати регулярні платежі
Y/N
subscription_callback_url string(2048) URL сторінки мерчанта, на яку буде надіслано відповідь про результат запланованої оплати через сервер-сервер з’єднання  

Параметри фінальної відповіді

Параметр Тип Опис Приклад відповіді
order_id string(1024) Ідентифікатор замовлення. Призначається мерчантом.  
merchant_id integer(12) Унікальний ідентифікатор мерчанта. Видається торговцю після реєстрації. 1
amount integer(12) Сума замовлення в копійках / центах без роздільників 1020 (USD) — означає 10 доларів 20 центів
currency string(3) Валюта замовлення. Допустимі значення:
UAH — українська гривня
USD — долар США
GBP — фунт стерлінгів
EUR — євро
 
order_status string(50) Статус обробки замовлення. Може містити такі значення:
created — замовлення було створено, але клієнт ще не ввів платіжні реквізити; необхідно продовжувати опитувати статус замовлення
processing — замовлення все ще перебуває в процесі обробки платіжним шлюзом; необхідно продовжувати опитувати статус замовлення
declined — замовлення відхилено платіжним шлюзом hutko, зовнішньою платіжною системою або банком-еквайром
approved — замовлення успішно здійснене, кошти заблоковані на рахунку платника і незабаром будуть зараховані мерчанту; мерчант може надавати послугу або “відвантажувати” товар
expired — час життя замовлення, зазначений у параметрі lifetime, минув.
reversed — раніше успішна транзакція була повністю скасована. У такому разі параметр reversal_amount буде еквівалентний actual_amount
 
response_status string(50) Статус обробки запиту. Якщо виникла помилка під час валідації переданих параметрів, то повертається failure, інакше success  
signature string(40) Підпис замовлення. Слугує для перевірки мерчантом цілісності та автентичності відповіді від сервера платіжного шлюзу. Алгоритм формування підпису див. у Формування підпису запиту та відповіді
1773cf135bd89656131134b98637894dad42f808
tran_type string(50) Допустимі значення:
purchase — покупка
reverse — скасування / повернення
 
sender_cell_phone string(16) Мобільний телефон платника  
sender_account string(50) Номер рахунку платника   
masked_card string(19) Маскований номер картки 444444XXXXXX5555
card_bin integer(6) Бін картки – зазвичай перші 6 цифр номера картки 444444
card_type string(50) Допустимі значення:
VISA, MasterCard
 
rrn string(50) У загальному випадку не унікальний ідентифікатор транзакції, присвоєний банком-еквайром.  
approval_code string(6) У загальному випадку не унікальні код авторизації, присвоєний банком-емітентом  
response_code integer(4) Код відхилення замовлення. Допустимі коди див. у Коди відмов.  
response_description string(1024) Опис коду відхилення замовлення. Див. Коди відмов.  
reversal_amount integer(12) Сума всіх реверсів за цим замовленням  
settlement_amount integer(12) Сума відшкодованих коштів за цим мерчантом  
settlement_currency string(3) Валюта відшкодування мерчанту  
order_time string(19) Дата створення замовлення у форматі ДД.ММ.РРРР гг:хх:сс 21.12.2014 11:21:30
settlement_date string(10) Дата відшкодування на рахунок продавця у форматі ДД.ММ.РРРР 21.12.2014
eci integer(2) Ecommerce Indicator – параметр, що вказує на те, чи була 3DS-автентифікація власника картки чи ні. Допустимі значення:
5 — було проведено повну автентифікацію кардхолдера
6 — мерчант підтримує 3D Secure, але банк-емітент не підтримує
7 — ні мерчант ні банк-емітент не підтримують 3D Secure
 
fee integer(12) Комісія, утримана із суми замовлення платіжним шлюзом hutko  
payment_system string(50) Платіжна система, через яку було здійснено платіж. Список допустимих платіжних систем див. у Підтримувані платіжні системи Card
sender_email string(254) Email платника  
payment_id integer(19) Унікальний ідентифікатор платежу, присвоєний платіжним шлюзом hutko  
actual_amount integer(12) Фактична сума замовлення після конвертації валют та врахування комісій.  
actual_currency string(3) Фактична валюта замовлення, в якій відбулася авторизація суми на рахунку клієнта після конвертації валюти.  
product_id string(1024) Ідентифікатор оплачуваного товару / послуги  
merchant_data string(2048) Будь-який довільний набір даних, який мерчант передав у запиті  
verification_status string(50) Результат перевірки коду під час верифікації картки
Допустимі значення:
verified — картку успішно перевірено кодом
incorrect — введено неправильний код верифікації, але ще не вичерпано ліміт спроб
failed — вичерпано ліміт невдалих спроб введення коду перевірки
created — код перевірки створений, але не вводився клієнтом
 
rectoken string(40) Токен картки – токен, за яким можна списувати кошти з картки без подальшої участі клієнта
da39a3ee5e6b4b0d3255bfef95601890afd80709
rectoken_lifetime string(19) Час життя токена у форматі ДД.ММ.РРРР гг:хх:сс
01.01.2018 00:00:00
additional_info string(20480) Додаткові дані у форматі JSON
{
"bank_name": "Some bank in US country",
"bank_country": "US",
"bank_response_code": "decln_1000",
"card_product": "DEBIT",
"card_category": "CLASSIC",
"settlement_fee": 0.2,
"capture_status": "captured",
"client_fee": 0.3,
"ipaddress_v4": "8.8.8.8",
"capture_amount": 200,
"card_type": "VISA",
"reservation_data": null,
"bank_response_description": "General decline",
"transaction_id": 1058755083,
"timeend":"10.01.2018 11:21:30"
"card_number": "4444555566661111"
"payment_method": "apple" or "googlepay" or "card"
}

Параметри проміжної відповіді

Параметр Тип Опис Приклад значення, що повертається
response_status string(50) якщо не було помилки, завжди повертається success success
checkout_url string(20)48 URL сторінки, на яку мерчант має перенаправити клієнта для подальшого введення платіжних реквізитів
https://pay.hutko.org/checkout?token=e0a5d4f331806d1e2feb80353b4c44bf6751fc8c
payment_id integer(19) Унікальний ідентифікатор платежу, присвоєний платіжним шлюзом hutko  

Параметри відповіді в разі помилки

Параметр Тип Опис Приклад значення, що повертається
response_status string(50) завжди повертається failure failure
error_code integer(4) Код відхилення замовлення. Допустимі значення описані в Коди відмов.  
error_message string(1024) Опис коду відхилення замовлення. Див. Коди відмов.  

Формування підпису запиту і відповіді (параметр signature)

Підпис формується шляхом застосування функції SHA1 до рядка, що складається з пароля мерчанта і всіх параметрів, приконкатенованих до нього в алфавітному порядку та розділених символом вертикальної риски |

Приклад:

Запит від мерчанта:

{
  "request":{
    "order_id":"test123456",
    "order_desc":"test order",
    "currency":"USD",
    "amount":"125",
    "signature":"f0ee6288b9295d3b808bcd8d720211c7201245e1",
    "merchant_id":"1396424"
  }
}

рядок, використаний для формування підпису:

test|125|USD|1396424|test order|test123456

Якщо параметр порожній і не містить даних, то приєднувати вертикальну риску не потрібно.

Приклад коду перевірки підпису на сторінках, зазначених у параметрах response_url або server_callback_url, з використанням PHP SDK:

<?php
function getSignature( $merchant_id , $password , $params = array() ){
 $params['merchant_id'] = $merchant_id;
 $params = array_filter($params,'strlen');
 ksort($params);
 $params = array_values($params);
 array_unshift( $params , $password );
 $params = join('|',$params);
 return(sha1($params));
}

Допоміжний файл із прикладами функцій для роботи з підписом Signature.php

 
namespace Ipsp;
/**
 * Class Signature
 * @package Ipsp
 */
class Signature {
    /**
     * @var
     */
    private static $password;
    /**
     * @var
     */
    private static $merchant;

    /**
     * Set merchant password
     * @param String $password
     * @return mixed
     */
    public static function password($password){
        self::$password = $password;
    }
    /**
     * Set merchant id
     * @param String $merchant
     * @return mixed
     */
    public static function merchant( $merchant ){
        self::$merchant = $merchant;
    }
    /**
     * Generate request params signature
     * @param array $params
     * @return string
     */
    public static function generate(Array $params){
        $params['merchant_id'] = self::$merchant;
        $params = array_filter($params,'strlen');
        ksort($params);
        $params = array_values($params);
        array_unshift( $params , self::$password );
        $params = join('|',$params);
        return(sha1($params));
    }

    /**
     * Sign params with signature
     * @param array $params
     * @return array
     */
    public static function sign(Array $params){
        if(array_key_exists('signature',$params)) return $params;
        $params['signature'] = self::generate($params);
        return $params;
    }
    /**
     * Clean array params
     * @param array $data
     * @return array
     */
    public static function clean(Array $data){
        if( array_key_exists('response_signature_string',$data) )
            unset( $data['response_signature_string'] );
        unset( $data['signature'] );
        return $data;
    }
    /**
     * Check response params signature
     * @param array $response
     * @return bool
     */
    public static function check(Array $response){
        if(!array_key_exists('signature',$response)) return FALSE;
        $signature = $response['signature'];
        $response  = self::clean($response);
        return $signature == self::generate($response);
    }
}

Перевірка підпису за допомогою класу Signature

 
require_once 'Signature.php';
# import Signature class from namespace 
use Ipsp\Signature;
# setup merchant id and password
Signature::merchant(1396424);
Signature::password('test');
if(Signature::check($response)){
    echo 'signature is valid. Now we can complete purchase';
} else{
    echo 'bad signature throw error'
}

Розв’язання проблем із генерацією та валідацією параметра signature

Існує дві типові ситуації, коли виникає помилка перевірки параметра signature. 

  1. Якщо запит на купівлю / рекурентний платіж / реверс / статусу або будь-який інший запит із параметром signature надіслано на API hutko, і повернулася відповідь: Invalid signature.
  2. Якщо від сервера hutko на server_callback_url або response_url, повернулася POST-відповідь, але під час спроби сформувати підпис і порівняти його з параметром signature з POST-відповіді підписи, не збігаються

Розглянемо обидва випадки:

  1. Якщо запит відправлено на API hutko, і відповідь повернулася у вигляді “Invalid signature signature: `6bd069be8a6e2f2bbe176df00ba63cc681ca38aa`; response_signature_string: `**********|125|USD|1396424|demo order 789|Demo123456`”, виконайте такі перевірки:
    • переконайтесь, що ви використовували коректний пароль із технічних налаштувань мерчанта в мерчант-порталі:
    • якщо запит містить кириличні або інші нелатинські літери, то його відправлено в кодуванні UTF-8
    • переконайтеся, що параметр зі значенням 0 не приводиться вашою мовою програмування до порожнього значення
    • залогуйте в програмному коді рядок, до якого ви застосовуєте SHA1 під час формування параметра signature. Порівняйте його з рядком, який повернувся в тексті помилки (відзначено червоним кольором): “Invalid signature signature: `6bd069be8a6e2f2bbe176df00ba63cc681ca38aa`; response_signature_string: `**********|125|USD|1396424|demo order 789|Demo123456`“. Врахуйте, що в тексті помилки фраза-пароль мерчанта буде замаскована знаком *
    • перевірте, чи передаєте ви в запиті до API порожні параметри. Якщо так, то в самому рядку, який бере участь у підписі, символ роздільник || для кожного такого порожнього параметра включати не потрібно
    • якщо ви розробляєте мовою програмування PHP, скористайтеся прикладом функції getSignature:
      <?php
      function getSignature( $merchant_id , $password , $params = array() ){
       $params['merchant_id'] = $merchant_id;
       $params = array_filter($params,'strlen');
       ksort($params);
       $params = array_values($params);
       array_unshift( $params , $password );
       $params = join('|',$params);
       return(sha1($params));
      }
    • переконайтеся, що результат функції SHA1 приведений до нижнього регістру. Правильно: 6bd069be8a6e2f2bbe176df00ba63cc681ca38aa. Неправильно: 6BD069BE8A6E2F2BBE176DF00BA63CC681CA38AA
    • переконайтеся, що параметр signature не включений вами в розрахунок підпису
    • переконайтеся, що якщо ви використовуєте точку API /api/recurring , то вами в підпис включено тільки необхідні параметри 
  2. Якщо від сервера hutko на сторінки, зазначені в параметрах server_callback_url або response_url повернулася POST відповідь, але при спробі сформувати підпис і порівняти його з параметром signature в POST відповіді, підписи не збігаються

Приклад відповіді від hutko (JSON):

{
 "rrn": "429417347068",
 "masked_card": "444455XXXXXX6666",
 "sender_cell_phone": "",
 "response_signature_string": "**********|3324000|UAH|3324000|027440|444455|VISA|UAH|444455XXXXXX6666|1396424|
  14#1500639628|approved|21.07.2017 15:20:27|51247263|card|success|0|429417347068|test@taskombank.ua|0|purchase",
 "response_status": "success",
 "sender_account": "",
 "fee": "",
 "rectoken_lifetime": "",
 "reversal_amount": "0",
 "settlement_amount": "0",
 "actual_amount": "3324000",
 "order_status": "approved",
 "response_description": "",
 "verification_status": "",
 "order_time": "21.07.2017 15:20:27",
 "actual_currency": "UAH",
 "order_id": "14#1500639628",
 "parent_order_id": "",
 "merchant_data": "",
 "tran_type": "purchase",
 "eci": "",
 "settlement_date": "",
 "payment_system": "card",
 "rectoken": "",
 "approval_code": "027440",
 "merchant_id": 1396424,
 "settlement_currency": "",
 "payment_id": 51247263,
 "product_id": "",
 "currency": "UAH",
 "card_bin": 444455,
 "response_code": "",
 "card_type": "VISA",
 "amount": "3324000",
 "sender_email": "test@taskombank.eu",
 "signature": "47bdcaf61b99edd31e3ec7913225a14d2ce07575"
}

Щоб діагностувати причину розбіжності підпису, виконайте такі дії:

  • переконайтеся, що параметр зі значенням 0 не приводиться вашою мовою програмування до порожнього значення
  • переконайтеся, що параметри response_signature_string і signature не включені вами в розрахунок підпису (параметр response_signature_string повертається, лише якщо мерчант перебуває у тестовому режимі, та містить підказку, як було сформовано підпис у відповідь)
  • якщо запит містить кириличні або інші нелатинські літери, то його відправлено в кодуванні UTF-8
  • залогуйте в програмному коді рядок, до якого ви застосовуєте SHA1 під час формування параметра signature. Порівняйте його з рядком, який повернувся в параметрі response_signature_string
  • перевірте, чи повернулися у відповіді порожні параметри. Якщо так, то в самому рядку, який бере участь у підписі, символ роздільник | для кожного такого порожнього параметра вмикати не потрібно
  • якщо ви розробляєте мовою програмування PHP, скористайтеся функцією getSignature:
    <?php
    function getSignature( $merchant_id , $password , $params = array() ){
     $params['merchant_id'] = $merchant_id;
     $params = array_filter($params,'strlen');
     ksort($params);
     $params = array_values($params);
     array_unshift( $params , $password );
     $params = join('|',$params);
     return(sha1($params));
    }
  • переконайтеся, що результат функції SHA1 приведений до нижнього регістру. Правильно: 6bd069be8a6e2f2bbe176df00ba63cc681ca38aa. Неправильно: 6BD069BE8A6E2F2BBE176DF00BA63CC681CA38AA

Формування запиту

Запити на сервер hutko можна надсилати 2-ма способами

  1. Схема взаємодії A (з перенаправленням користувача на платіжну сторінку) через надсилання HTML форми на URL https://pay.hutko.org/api/checkout/redirect/
  2. Схема взаємодії B (з попереднім host-to-host запитом для отримання url платіжної сторінки) через надсилання HTML форми на URL https://pay.hutko.org/api/checkout/url/

Схема взаємодії B API підтримує такі текстові формати запитів: HTML FORM, XML, JSON. Цей варіант зручно використовувати для:

  • формування запиту з сайту мерчанта в браузері клієнта через AJAX
  • формування запиту від мерчант-сервера.
  • виставлення рахунків / інвойсів клієнту на пошту, в месенджері, в соціальних мережах

У контексті запиту завжди повертається відповідь у тому ж форматі, що й запит. Тобто якщо запит був у форматі JSON, то і відповідь повернеться у форматі JSON. Відповідь на такий запит є проміжною і містить URL, на який необхідно перенаправити клієнта для введення реквізитів платежу.

Надсилання запиту за схемою взаємодії A не передбачає проміжної відповіді в контексті запиту. Фінальна відповідь буде повернута на URL мерчанта, вказаний у параметрах response_url і server_callback_url.

Приклад для схеми взаємодії A

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <form name="tocheckout" method="POST" action="https://pay.hutko.org/api/checkout/redirect/">
      <input type="text" name="server_callback_url" value="https://site.com/callback/">
      <input type="text" name="response_url" value="https://site.com/responsepage/">
      <input type="text" name="order_id" value="test4207135583">
      <input type="text" name="order_desc" value="Test payment">
      <input type="text" name="currency" value="UAH">
      <input type="text" name="amount" value="100">
      <input type="text" name="signature" value="1773cf135bd89656131134b98637894dad42f808">
      <input type="text" name="merchant_id" value="1">
      <input type="submit">
    </form>
  </body>
</html>

Приклад host-to-host для схеми взаємодії B (JSON)

Content Type: application/json

Запит

{
  "request": {
    "response_url": "https://pay.hutko.org/responsepage/",
    "order_id": "test8037875286",
    "order_desc": "Test payment",
    "currency": "UAH",
    "amount": "100",
    "signature": "07bc309047a56275f8d89ae222e2af0ceb94fe79",
    "merchant_id": "1"
  }
}

Нормальна проміжна відповідь

{
  "response":{
    "response_status":"success",
    "checkout_url":"https://pay.hutko.org/checkout?token=afcb21aef707b1fea2565b66bac7dc41d7833390"
  }
}

Відповідь у разі помилки

{
  "response":{
  "response_status":"failure",
  "error_message":"Parameter `amount` is mandatory",
  "error_code":"1008"
  }
}

Приклад host-to-host для схеми взаємодії B (XML)

Content Type: application/xml

Запит

<?xml version="1.0" encoding="UTF-8"?>
<request>
  <response_url>https://pay.hutko.org/responsepage/</response_url>
  <order_id>test622138965</order_id>
  <order_desc>Test payment</order_desc>
  <currency>UAH</currency>
  <amount>100</amount>
  <signature>fad685643ed5375d6d08c27f4f600e848549b0c5</signature>
  <merchant_id>1</merchant_id>
</request>

Нормальна проміжна відповідь

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <response_status>success</response_status>
  <checkout_url>https://pay.hutko.org/checkout?token=6c67efad5fd68921f58836cabc2a3d27c5f02b23</checkout_url>
</response>

Відповідь у разі помилки

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <response_status>failure</response_status>
  <error_message>Parameter `amount` is mandatory</error_message>
  <error_code>1008</error_code>
</response>

Приклад host-to-host для схеми взаємодії B (HTML form)

Content Type: application/x-www-form-urlencoded

Запит

response_url=https://pay.hutko.org/responsepage/&order_id=test3600040034
&order_desc=Test payment&currency=UAH&amount=100&merchant_id=1
&signature=ea326b841f9a1e2e90fb392392d3ed6255a6698d

Нормальна проміжна відповідь

response_status=success&checkout_url=http%3A%2F%2Flocalhost%2Fcheckout%3Ftoken%3D643f3cea682e066f142099a76b0fa9d1613969dc

Відповідь у разі помилки

response_status=failure&error_message=Parameter%20%60amount%60%20is%20mandatory&error_code=1008

Хочу приймати платежі з Hutko!