API для платежных терминалов: відмінності між версіями

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
Немає опису редагування
 
(Не показано 10 проміжних версій цього користувача)
Рядок 17: Рядок 17:
==Подписывание данных==
==Подписывание данных==


Вместе с данными, терминал должен прислать в параметре signature строку, которая вычисляется по следующей формуле:
Вместе с данными, терминал должен прислать в параметре '''signature''' строку, которая вычисляется по следующей формуле:
1) необходимо отсортировать по именам все посылаемые параметры и объединить символом '|' (вертикальная чарта)
* необходимо отсортировать по именам все посылаемые параметры и объединить символом '|' (вертикальная черта): параметр|значение|параметр|значение
2) к полученной строке добавить символ '|' и пароль к API NoDeny
* к полученной строке добавить символ '|' и пароль к API NoDeny
3) получить mdp5 хеш для полученной строки
* получить md5 хеш от полученной строки


Например, терминал посылает на  API следующие данные:
Например, терминал посылает на  API следующие данные:
Рядок 27: Рядок 27:
command = info
command = info
account = 5982
account = 5982
<pre>
</pre>


После сортировки и конкатенации получаем строку: '''account|5982|command|info'''
После сортировки и конкатенации получаем строку: '''account|5982|command|info'''
Рядок 39: Рядок 39:
<pre>
<pre>
$signature = Digest::MD5->new->add($string.'|'.$api_password)->hexdigest;
$signature = Digest::MD5->new->add($string.'|'.$api_password)->hexdigest;
</pre>
Пример на bash:
<pre>
echo -n 'account|5982|command|info|hardpassword' | md5sum
</pre>
</pre>


Рядок 47: Рядок 52:
</source>
</source>


==Получение информации об абоненте==
<pre>
command = info
account = персональный платежный код абонента
</pre>
==Создать платеж==
<pre>
command = pay
account = персональный платежный код абонента
amount = денежная сумма
order_id = уникальный id платежа
terminal = идентификатор терминала (необязательный параметр)
</pre>
amount - число с плавающей запятой, разделитель точка, 2 знака после запятой.
При посылке запроса с тем же order_id, который был послан ранее, платеж не создается, но при этом возвращается error = 0.
==Попросить NoDeny залогировать информацию==
<pre>
command = message
message = какой-либо текст
terminal = идентификатор терминала (необязательный параметр)
</pre>
Это можно использовать, например, для регистрации какого-либо события не связанного с завершением пополнения счета. Скажем, клиент ввел свой логин, получил информацию, вставил поддельную купюру или забыл получить сдачу
==Ограничения==
* В данных запрещен символ '|' (вертикальная черта)
* В параметре order_id и terminal не рекомендуется использовать символ двоеточия
==Коды ошибок==


{| class="wikitable"
{| class="wikitable"
|+Коды ошибок
|-
|-
|1
|1

Поточна версія на 10:13, 23 вересня 2020

Общая информация

API запросы выполняются по http(s)-протоколу, в ответ приходит json. В ключе error - код ошибки (0 - отсутствие ошибки)

Тестировать API можно с консоли, например:

curl 'https://app.nodeny-plus.com.ua/cgi-bin/api.pl'

Опрос урла без каких-либо параметров должен возвращать result = 0:

   {"error":0}

Это можно использовать для тестирования доступности и работоспособности API

Подписывание данных

Вместе с данными, терминал должен прислать в параметре signature строку, которая вычисляется по следующей формуле:

  • необходимо отсортировать по именам все посылаемые параметры и объединить символом '|' (вертикальная черта): параметр|значение|параметр|значение
  • к полученной строке добавить символ '|' и пароль к API NoDeny
  • получить md5 хеш от полученной строки

Например, терминал посылает на API следующие данные:

command = info
account = 5982

После сортировки и конкатенации получаем строку: account|5982|command|info

После добавления к полученной строке |пароль_от_api получаем account|5982|command|info|пароль_от_api

Далее применяем алгоритм md5 и получаем результат: 3eb6d78df0be8d54e170b15d596c7706

Пример на языке perl:

$signature = Digest::MD5->new->add($string.'|'.$api_password)->hexdigest;

Пример на bash:

echo -n 'account|5982|command|info|hardpassword' | md5sum

Итоговый запрос будет следующим:

https://app.nodeny-plus.com.ua/cgi-bin/api.pl?command=info&account=5982&signature=3eb6d78df0be8d54e170b15d596c7706

Получение информации об абоненте

command = info
account = персональный платежный код абонента

Создать платеж

command = pay
account = персональный платежный код абонента
amount = денежная сумма
order_id = уникальный id платежа
terminal = идентификатор терминала (необязательный параметр)

amount - число с плавающей запятой, разделитель точка, 2 знака после запятой.

При посылке запроса с тем же order_id, который был послан ранее, платеж не создается, но при этом возвращается error = 0.


Попросить NoDeny залогировать информацию

command = message
message = какой-либо текст
terminal = идентификатор терминала (необязательный параметр)

Это можно использовать, например, для регистрации какого-либо события не связанного с завершением пополнения счета. Скажем, клиент ввел свой логин, получил информацию, вставил поддельную купюру или забыл получить сдачу

Ограничения

  • В данных запрещен символ '|' (вертикальная черта)
  • В параметре order_id и terminal не рекомендуется использовать символ двоеточия

Коды ошибок

1 Проблема на стороне NoDeny. Возможно следует повторить запрос через время
2 API NoDeny отключено
10 Со стороны терминала присланы некорректные данные. Если терминал пошлет эти же самые данные - будет возвращена ошибка
11 Аккаунт в NoDeny не найден
12 Не задана команда
13 Неверно задана денежная сумма
14 Неверный order id