========API 2.1========
======Общая информация======
API построено на REST архитектуре(кроме check и pay запросов). JSON возвращается в ответ на все запросы к API, в том числе и при возникновении ошибок. Имеет предсказуемые, ресурсо-ориентированные URL-адреса, использует HTTP-коды для передачи состояния ошибок, а также использует встроенные функции HTTP-аутентификации и методы GET, POST, PUT, DELETE.
Запросы отправляются на URL, указанный в личном кабинете в настройках магазина.
В личном кабинете также задается пароль для формирования подписи и тип API.
======Check======
====Запрос к мерчанту====
Для check запроса используются параметры:
^ Название ^ Тип ^ Описание ^
| type | string | Тип запроса (check) |
| pay_for | string | Номер заказа |
| amount | float | Сумма платежа в центах, если параметр mode = free, то будет передан 0 |
| way | string | Валюта платежа |
| mode | string | Тип платежа, fix или free |
| user_email | string | Email плтельщика |
| signature | string | Контрольная подпись, SHA1 от строки - "check;pay_for;amount;way;mode;secret_key" |
| additional_params.onpay_ap_xxx | string | Дополнительные параметры, переданные в платежной ссылке(см документацию по платежным ссылкам). Данных параметров в запросе НЕ будет, если они не были переданы в платежной ссылке. Алгоритм их формирования смотрите ниже |
* "check" в строке для контрольной подписи - фиксированное слово (5 букв), а не переменная
В случае наличия параметров additional_params.onpay_ap_xxx в запросе также обязательно будет присутствовать параметр additional_params.onpay_ap_signature. Значение которого есть SHA1 от строки, полученной как конкатенация значений всех доп параметров(отсортированных по названию параметра) + НЕпередаваемого параметра onpay_ap_key, значение которого равно API_KEY в настройках сайта в кабинете мерчанта.
Пример запроса:
При API_KEY = 'test'
{
"type":"check",
"pay_for":"55446",
"amount":500.0,
"way":"RUR",
"mode":"fix",
"user_email":"test@test.com",
"signature":"37eacbf65fa2982be8e2f82d1cb6aef23bf88aa0"
"additional_params":{
"onpay_ap_a1":"w",
"onpay_ap_z1":"q",
"onpay_ap_signature":"21ce6c2615c4b325ca406470b533e8ca76759dc4"
}
}
====Ответ мерчанта====
^ Название ^ Тип ^ Описание ^
| status | boolean | Статус ответа, true для подтверждения, false для отказа. |
| pay_for | string | Номер заказа |
| signature | string | Контрольная подпись, SHA1 от строки - "check;status;pay_for;secret_key" |
* "check" в строке для контрольной подписи - фиксированное слово (5 букв), а не переменная
* status в строке для контрольной подписи - строка ("true" или "false")
Пример:
{
"status":true,
"pay_for":"55446",
"signature":"f6f250cd7d29ac9947ed97ddaeebb7934849d21e"
}
======Pay======
====Запрос к мерчанту====
Для pay запроса используются параметры:
^ Название ^ Тип ^ Описание ^
| type | string | Тип запроса (pay) |
| signature | string | Контрольная подпись, SHA1 от строки - "pay;pay_for;payment.amount;payment.way;balance.amount;balance.way;secret_key", где pay - строковая константа "pay", ";" - символ "точка с запятой" |
| pay_for | string | Номер заказа |
| user.email | string | E-mail плательщика |
| user.phone | string | Телефон плательщика |
| user.note | string | Комментарий плательщика |
| payment.id | int | Номер платежа |
| payment.date_time | string | Дата создания платежа в формате "CCYY-MM-DDThh:mm:ssTZD" где TZD смещение часового пояса в формате [+-]hh:mm |
| payment.amount | float | Сумма платежа |
| payment.way | string | Валюта платежа |
| payment.rate | float | Курс обмена между валютами balance.way/payment.way |
| payment.release_at | string | Время зачисления платежа, для отложенных платежей строится аналогично payment.date_time, null если уже зачислен |
| balance.amount | float | Сумма, зачисляемая на баланс |
| balance.way | string | Валюта зачисления на баланс |
| order.from_amount | float | Сумма из ордера, которую должен был заплатить плательщик |
| order.from_way | string | Валюта из ордера, в которой должен был заплатить плательщик |
| order.to_amount | float | Сумма из ордера, которая должна была поступить на баланс магазина |
| order.to_way | string | Валюта из ордера, в которой должен был пополниться баланс магазина |
| additional_params.onpay_ap_xxx | string | Дополнительные параметры, переданные в платежной ссылке(см документацию по платежным ссылкам). Данных параметров в запросе НЕ будет, если они не были переданы в платежной ссылке. Алгоритм их формирования смотрите ниже |
* "pay" в строке для контрольной подписи - фиксированное слово (3 буквы), а не переменная
* при прямых платежах поля order.* отсутствуют
В случае наличия параметров additional_params.onpay_ap_xxx в запросе также обязательно будет присутствовать параметр additional_params.onpay_ap_signature. Значение которого есть SHA1 от строки, полученной как конкатенация значений всех доп параметров(отсортированных по названию параметра) + НЕпередаваемого параметра onpay_ap_key, значение которого равно API_KEY в настройках сайта в кабинете мерчанта.
Пример запроса:
При API_KEY = 'test'
{
"type":"pay",
"signature":"951e82110d1b796374ad3577f47e20a058c525dc",
"pay_for":"55446",
"user":{
"email":"mail@mail.ru",
"phone":"9631478946",
"note":""
},
"payment":{
"id":7121064,
"date_time":"2013-12-05T12:07:09+04:00",
"amount":102.0,
"way":"USD",
"rate":33.121445,
"release_at":null
},
"balance":{
"amount":3378.39,
"way":"RUR"
},
"order":{
"from_amount":102.0,
"from_way":"USD",
"to_amount":3378.39,
"to_way":"RUR"
}
"additional_params":{
"onpay_ap_a1":"w",
"onpay_ap_z1":"q",
"onpay_ap_signature":"21ce6c2615c4b325ca406470b533e8ca76759dc4"
}
}
====Ответ мерчанта====
^ Название ^ Тип ^ Описание ^
| status | boolean | Статус ответа, true для подтверждения, false для отказа(отказ не является отказом от платежа, а лишь информацией о том, что мерчант не знает о таком платеже, при этом у платежа проставится статус как "не было уведомления", и мерчант сможет активировать его вручную в личном кабинете, если такой платеж в действительности имеет место быть). |
| pay_for | string | Номер заказа |
| signature | string | Контрольная подпись, SHA1 от строки - "pay;status;pay_for;secret_key" |
| receipt | json | Содержит информацию о списке покупок в чеке |
| receipt.items | array | Список товаров в чеке |
| receipt.items.name | string | Название товара |
| receipt.items.price | float | Цена за единицу товара |
| receipt.items.quantity | float | Количество |
| receipt.sum | float | Сумма чека |
* "pay" в строке для контрольной подписи - фиксированное слово (3 буквы), а не переменная
* status в строке для контрольной подписи - строка ("true" или "false")
Пример:
{
"status":true,
"pay_for":"55446",
"signature":"a25de68f9516e91ce8782b11abcd5801d7af20f4"
"receipt": {
"items": [
{
"name": "product 1",
"price": 100.00,
"quantity": 2.8
},
{
"name": "product 2",
"price": 18.50,
"quantity": 4
},
{
"name": "product 3",
"price": 500.00,
"quantity": 1
}
],
"sum": 854.00
}
}
======Запросы от мерчанта к OnPay======
====Получить данные платежа====
адрес - json_interfaces/payments/:id, где id - номер платежа в системе OnPay
Используется для получения данных о прошедшем платеже. Используемые параметры:
^ Название ^ Тип ^ Описание ^
| login | string | Логин сайта |
| signature | string | Контрольная подпись, SHA1 от строки - "id;login;secret_key" |
Пример запроса:
{
"login":"onpay",
"signature":"1d15f90df20da53d7206e9f7db7d2c9d"
}
В ответ будет выдан JSON с данными:
^ Название ^ Тип ^ Описание |
| signature | string | Контрольная подпись, SHA1 от строки - "payment.id;payment.amount;payment.way;balance.amount;balance.way;secret_key" |
| user.email | string | E-mail плательщика |
| user.phone | string | Телефон плательщика |
| user.note | string | Комментарий плательщика |
| payment.id | int | Номер платежа |
| payment.date_time | string | Дата создания платежа в формате "CCYY-MM-DDThh:mm:ssTZD" где TZD смещение часового пояса в формате [+-]hh:mm |
| payment.amount | bigint | Сумма платежа |
| payment.way | string | Валюта платежа |
| payment.rate | bigint | Курс обмена между валютами balance.way/payment.way |
| payment.release_at | string | Время зачисления платежа, для отложенных платежей строиться аналогично payment.date_time, null если зачислен мгновенно |
| balance.amount | bigint | Сумма, зачисляемая на баланс |
| balance.way | string | Валюта зачисления на баланс |
Пример ответа:
{
"signature":"172de16ada92791b3753b3121d471f5c",
"user":{
"email":"mail@mail.ru",
"phone":"9631478946",
"note":""
},
"payment":{
"id":"7121064",
"date_time":"2013-12-05T12:07:09+04:00",
"amount":10200,
"way":"USD",
"rate":33121445,
"release_at":null
},
"balance":{
"amount":"3300",
"way":"RUR"
}
}
====Получить курс обмена====
адрес - json_interfaces/rates/:from/to/:to, где from и to - валюта из и валюта назначения соответственно
Используется для получения текущего курса валют
^ Название ^ Тип ^ Описание ^
| login | string | Логин сайта |
| signature | string | Контрольная подпись, SHA1 от строки - "login;from;to;secret_key" |
Пример запроса:
{
"login":"onpay",
"signature":"65ded5353c5ee48d0b7d48c591b8f430"
}
В ответ будет выдан JSON с данными:
^ Название ^ Тип ^ Описание ^
| from | string | Валюта из |
| to | string | Валюта назначения |
| rate | bigint | значение курса * 10e6 |
| signature | string | Контрольная подпись, SHA1 от строки - "from;to;rate;secret_key" |
Пример ответа:
{
"from":"USD",
"to":"RUR",
"rate":33121445
"signature":"4671aeaf49c792689533b00664a5c3ef"
}
====Вывод в Кабинеты Покупателей====
метод - POST
адрес - /json_interfaces/wop_payouts
Используется для осуществления перевода денег с баланса WOP магазина в адрес владельца Кабинета Покупателя wallet.onpay.ru. Используемые параметры:
^ Название ^ Тип ^ Описание ^
| login | string | Название сайта в системе Onpay. |
| amount | float | Сумма для вывода в кабинеты покупателей. |
| email | string | E-mail, на который зарегистрирован кабинет покупателя. |
| code | string | Код протекции. Необязательный параметр. |
| expiration | integer | Срок протекции в сутках. Необязательный параметр. Допустимое значение - целое число в интервале 1..30. В случае отсутствия параметра в запросе устанавливается срок протекции равный тридцати дням. По истечении срока протекции деньги возвращаются отправителю |
| phone | hash | ассоциативный массив (хэш). |
| phone.number | string | Телефон, на который зарегистрирован в кабинет покупателя. Допустимое значение - десять цифр без разделителей, первая цифра - 9 |
| phone.code | string | код страны для номера телефона. Допустимое значение - "7" |
| signature | string | Контрольная подпись, SHA1 от строки login;amount;email;secret_key в случае передачи в запросе e-mail и SHA1 от строки login;amount;phone_codephone_number;secret_key в случае передачи в запросе номера телефона. Во втором случае производится конкатенация phone_code и phone_number. |
В одном запросе могут быть переданы только хэш с номером телефона или E-mail.
Пример запроса с email:
{
"login":"merchant",
"amount":100.0,
"email":"payer@email.com",
"signature":"17679fdf8cbbf20e84d26c237d18c545e2cbf8fc"
}
Пример запроса с номером телефона:
{
"login":"merchant",
"amount":100.0,
"phone":{"code":"7","number":"9011234567"},
"signature":"0a6d90614c4ff1860fd71337c302d4b0b2d6c9ec"
}
Сумма вывода списывается с баланса сайта в WOP.
Ответ представляет собой JSON. Список параметров в случае успешного завершения операции:
^ Название ^ Тип ^ Описание ^
| payment_id | integer | ID исходящего платежа в системе onpay |
| signature | string | SHA1 от строки payment_id;login;secret_key |
Пример ответа:
{
"payment_id":1,
"signature":"8ef5b527eb99f3392cfa533d6221d78ceab5a7cd"
}
====Выставление счета в кабинет покупателя====
метод - POST
адрес - /json_interfaces/payment_orders
Используется для создания платежных ордеров и выставления счетов для владельцев кошельков wallet.onpay.ru.
Параметры запроса:
^ Название ^ Тип ^ Описание ^
| pay_for | string | Идентификатор ордера в магазине. Лимит - 100 символов |
| amount | float | Сумма платежного ордера |
| user_email | string | E-mail владельца кошелька. Лимит - 40 символов |
| user_phone | hash | Хэш (ассоциативный массив), содержащий телефон плательщика. Необязательный параметр |
| user_phone.code | string | Код страны телефона плательщика |
| user_phone.number | string | Номер телефона плательщика, состоящий из десяти цифр |
| note | string | Комментарий к платежному ордеру. Лимит - 255 символов. Необязательный параметр |
| login | string | Название сайта в системе Onpay |
| signature | string | Цифровая подпись, sha1 от строки login;user_email;pay_for;way;amount;secret_key |
Пример запроса:
{
"login":"merchant",
"amount":100.0,
"user_email":"payer@email.com",
"pay_for":"order",
"note":"order comment",
"user_phone":{"code":"7","number":"9011234567"},
"signature":"200375a39e12e850203581836549126dc4fd42bf"
}
Параметры ответа, возвращаемые в случае успешного создания ордера:
^ Название ^ Тип ^ Описание ^
| uniq_id | integer | Идентификатор платежного ордера, состоящий из девяти цифр, первая из которых 3 |
| signature | string | Цифровая подпись, sha1 от строки login;uniq_id;secret_key |
Пример ответа:
{
"uniq_id":312345678,
"signature":"e851693315a3d45ca460482f7a9ccb1b3b6022e4"
}
====Купоны====
Общий адрес интерфейса - json_interfaces/coupons/
===Создание Купона===
метод - POST\\
адрес - json_interfaces/coupons/
^ Название ^ Тип ^ Описание ^
| login | string | Логин сайта |
| code | string | Промо-код купона |
| paysystem | string | Тикер платежной системы |
| type | string | Тип купона - для величины в процентах percent, для постоянной суммы const |
| percent_off | bigint | Предоставляемая скидка, в процентах, используется только для типа percent (для const - 0) |
| max_amount | bigint | Ограничение сверху по предоставляемой сумме скидки, используется только для типа percent, указывается в центах. 0 для купона без ограничения (для const - 0) |
| value | bigint | Величина скидки, используется только для типа const, указывается в центах (для percent - 0) |
| min_amount | bigint | Ограничение снизу, купон может использоваться только для платежей выше указанной суммы, указывается в центах, используется только для типа const (для percent - 0) |
| max_redemptions | int | Ограничение сверху по количеству использований |
| expired_at | string | Дата истечения скидочной акции в формате "CCYY-MM-DDThh:mm:ssTZD" где TZD смещение часового пояса в формате [+-]hh:mm |
| announced | boolean | Если true, то сервис Onpay будет распространять купон |
| signature | string | Контрольная подпись, SHA1 от строки - "login;paysystem;code;type;percent_off;max_amount;value;min_amount;max_redemptions;expired_at;announced;secret_key" |
Пример запроса для процентной скидки:
{
"login":"onpay",
"code":"1",
"paysystem":"RUR",
"type":"percent",
"percent_off":10,
"max_amount":100000,
"value":0,
"min_amount":0,
"max_redemptions":1,
"expired_at":"2013-12-05T12:07:09+04:00",
"announced":true,
"signature":"1d15f90df20da53d7206e9f7db7d2c9d"
}
Пример запроса для постоянной скидки:
{
"login":"onpay",
"code":"1",
"paysystem":"WMR",
"type":"const",
"percent_off":0,
"max_amount":0,
"value":10000,
"min_amount":100000,
"max_redemptions":1,
"expired_at":"2013-12-05T12:07:09+04:00",
"announced":true,
"signature":"d41d8cd98f00b204e9800998ecf8427e"
}
В ответ будет выдан JSON с данными:
^ Название ^ Тип ^ Описание ^
| code | string | Промо-код купона |
| type | string | Тип купона - для величины в процентах percent, для постоянной суммы const |
| percent_off | bigint | Предоставляемая скидка, в процентах, только для типа percent (для const - 0) |
| max_amount | bigint | Ограничение сверху по предоставляемой сумме скидки, только для типа percent. 0 для купона без ограничения (для const - 0) |
| value | bigint | Величина скидки, только для типа const, указывается в центах (для percent - 0) |
| min_amount | bigint | Ограничение снизу, купон может использоваться только для платежей выше указанной суммы, только для типа const (для percent - 0) |
| max_redemptions | int | Ограничение сверху по количеству использований |
| expired_at | string | Дата истечения скидочной акции в формате "CCYY-MM-DDThh:mm:ssTZD" где TZD смещение часового пояса в формате [+-]hh:mm |
| redemptions_count | int | Количество использований |
| state | string | Текущее состояние, new для купона с не исчерпанным лимитом использований, complete для использованного максимально допустимое кол-во раз, expired для купона с истекшим временем действия и не исчерпанным лимитом использований, deleted для удаленного купона |
| announced | boolean | Если true, то сервис Onpay будет распространять купон |
| signature | string | Контрольная подпись, SHA1 от строки - "code;type;redemptions_count;state;secret_key" |
Пример ответа для процентной скидки:
{
"code":"1",
"paysystem":"RUR",
"type":"const",
"percent_off":10.0,
"max_amount":100000,
"value":0.0,
"min_amount":0,
"max_redemptions":1,
"expired_at":"2013-12-05T12:07:09+04:00",
"redemptions_count":0,
"state":"new",
"announced":true,
"signature":"172de16ada92791b3753b3121d471f5c"
}
Пример ответа для постоянной скидки:
{
"code":"1",
"paysystem":"WMR",
"type":"const",
"percent_off":0.0,
"max_amount":0,
"value":10000.0,
"min_amount":100000,
"max_redemptions":1,
"expired_at":"2013-12-05T12:07:09+04:00",
"redemptions_count":0,
"state":"new",
"announced":true,
"signature":"172de16ada92791b3753b3121d471f5c"
}
===Получение купона===
метод - GET\\
адрес - json_interfaces/coupons/:code, где code - уникальный код купона
Используется для просмотра текущего состояния купона.
^ Название ^ Тип ^ Описание ^
| login | string | Логин сайта |
| signature | string | Контрольная подпись, SHA1 от строки - "login;code;get;secret_key" |
* "get" в строке для контрольной подписи - фиксированное слово (3 буквы), а не переменная
Пример запроса:
{
"login":"onpay",
"signature":"1d15f90df20da53d7206e9f7db7d2c9d"
}
Ответ будет аналогичен как и у запроса для создания купона.
===Удаление купона===
метод - DELETE\\
адрес - json_interfaces/coupons/:code, где code - уникальный код купона
Используется для отключения купона до истечения его срока годности или исчерпания количества использований.
^ Название ^ Тип ^ Описание ^
| login | string | Логин сайта |
| signature | string | Контрольная подпись, SHA1 от строки - "login;code;delete;secret_key" |
* "delete" в строке для контрольной подписи - фиксированное слово (6 букв), а не переменная
Пример запроса:
{
"login":"onpay",
"signature":"1d15f90df20da53d7206e9f7db7d2c9d"
}
Ответ будет аналогичен как и у запроса для создания купона.
======Ошибки======
В любом ответе могут присутствовать данные об ошибке, они записываются в конец сообщения в следующем формате:
^ Название ^ Тип ^ Описание ^
| params | string | Перечисляются все ошибочные параметры |
| params.code | string | Код ошибки |
| params.message | string | Текст ошибки |
| params.name | string | Название параметра |
| type | string | Тип ошибки |
| message | string | Текст сообщения |
JSON вида:
{
"error":{
"params":[
{
"code":"required",
"message":"Description cannot be blank.",
"name":"description"
}
],
"type":"invalid_param_error",
"message":"Invalid data parameters"
}
}
В случае возникновения ошибки общего характера, не привязанной к определенному параметру(пример - внутренняя ошибка сервера, недоступность БД), ключ 'params' можно не передавать
Тогда JSON будет вида:
{
"error":{
"type":"invalid_param_error",
"message":"Invalid data parameters"
}
}
======Примечания======
1) Разделителем целой и дробной части типа float является символ "." (точка).\\
Следующие числа будут выглядеть следующим образом:\\
123 -> 123.0\\
123.0 -> 123.0\\
123.00 -> 123.0\\
123.001 -> 123.0\\
В этом же представлении числа должны быть использованы при подсчете подписи.
2) Методы запросов:
^ Запрос ^ метод ^
| check | POST |
| pay | POST |
| state | GET |
| rate | GET |
| Создание купона | POST |
| Получение купона | GET |
| Удаление купона | DELETE |