Gateway API
Введение

Сервис G2G позволяет организовать прямое подключение мерчанта к FreedomPay без использования платежных страниц.

Внимание!
Для реализации подключения требуется наличие сертификата PCI DSS.

Формирование подписи

Любые сообщения (запросы и ответы) между FreedomPay и мерчантом подписываются. Для формирования подписи необходимо конкатенировать с разделителем ;

  1. имя вызываемого скрипта (от последнего / до конца или ?)
  2. все поля сообщения в алфавитном порядке, включая случайную строку pg_salt, состоящую из произвольного количества цифр и латинских букв, при этом:
  3. a. к вложенным тегам это правило применяется рекурсивно (только XML)
  4. b. поля с одинаковыми именами берутся в том порядке, в котором они присутствуют в сообщении
  5. и платежный пароль secret_key, который задается в настройках магазина и известен только мерчанту и FreedomPay.
От полученной в результате конкатенации строки необходимо вычислить md5 и добавить в запрос или ответ в качестве дополнительного параметра pg_sig. MD5 хэш записывается в виде шестнадцатеричной строки в нижнем регистре (32 символа).

Любая сторона может добавлять в запрос или ответ дополнительные параметры, не указанные в документации. Эти параметры также участвуют в вычислении подписи. Сообщение не подписывается, и соответственно поля pg_salt и pg_sig отсутствуют только в одном случае – когда FreedomPay не смог идентифицировать мерчанта и поэтому не знает его secret_key. В таком случае поле pg_error_code (числовой код ошибки) принимает значение 9998. Полный список возможных значений поля pg_error_code см. в разделе Справочник кодов ошибок.

Адрес основного сервера:
https://api.freedompay.uz

Адрес тестового сервера:
{{test_domain}}
Пример запроса с подписью:

curl --location --request POST 'https://api.freedompay.uz/init_payment.php' \
--form 'pg_order_id=23' \
--form 'pg_merchant_id={{paybox_merchant_id}}' \
--form 'pg_amount=25' \
--form 'pg_description=test' \
--form 'pg_salt=molbulak' \
--form 'pg_sig={{paybox_signature}}'
# Пример подписи:
'init_payment.php;25;test;{{paybox_merchant_id}};23;molbulak;{{secret_key}}'

Пример кода на PHP:

$pg_merchant_id = {{paybox_merchant_id}};
$secret_key = {{paybox_merchant_secret}};

$request = [
    'pg_merchant_id'=> $pg_merchant_id,
    'pg_order_id' => 1234,
    'pg_amount' => 100,
    'pg_payment_to' => 4405645000006150,
    'pg_description' => 'Описание платежа',
    'pg_post_link' => 'http://site.kz/post',
    'pg_salt' => 'some random string',
];

//generate a signature and add it to the array
ksort($request); //sort alphabetically
array_unshift($request, 'p2p2nonreg');
array_push($request, $secret_key);

$request['pg_sig'] = md5(implode(';', $request));

unset($request[0], $request[1]);

Диаграммы взаимодействия