Здесь показаны различия между двумя версиями данной страницы.
| Both sides previous revision Предыдущая версия Следущая версия | Предыдущая версия | ||
| api-for-pay-form [2015/10/19 09:54] admin | api-for-pay-form [2015/10/19 11:25] (текущий) admin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====== API платежной формы ====== | ====== API платежной формы ====== | ||
| - | |||
| ===== Общее описание ===== | ===== Общее описание ===== | ||
| - | |||
| Взаимодействие с платежным агрегатором Onpay возможно без перенаправления плательщика на платежную форму. | Взаимодействие с платежным агрегатором Onpay возможно без перенаправления плательщика на платежную форму. | ||
| Строка 8: | Строка 6: | ||
| 1) **Запрос на получение информации о платежной форме** (курсы обмена, комиссии, списки платежных интерфейсов, получение локализации ключей...) | 1) **Запрос на получение информации о платежной форме** (курсы обмена, комиссии, списки платежных интерфейсов, получение локализации ключей...) | ||
| - | GET запрос отправляется в формате JSON на url идентичный адресу платежной формы - https://secure.onpay.ru/pay/merchant_login | + | **GET запрос** отправляется в формате JSON на url идентичный адресу платежной формы - https://secure.onpay.ru/pay/merchant_login | 
| 2) **Запрос на создание платежного ордера**. Ответом является инструкция для дальнейшего перенаправления плательщика для оплаты или показа инструкции. | 2) **Запрос на создание платежного ордера**. Ответом является инструкция для дальнейшего перенаправления плательщика для оплаты или показа инструкции. | ||
| - | POST запрос отправялется в формате json на url - https://secure.onpay.ru/pay | + | **POST запрос** отправялется в формате JSON на url - https://secure.onpay.ru/pay | 
| Шаг получения информации является НЕобязательным для создания платежного ордера. Но он необходим для получения свежих данных, в том числе о курсах обмена. Сайт магазина может делать его раз в сутки, либо после получения ошибки об изменении курса обмена, либо при изменении настроек платежных систем в своем кабинете. | Шаг получения информации является НЕобязательным для создания платежного ордера. Но он необходим для получения свежих данных, в том числе о курсах обмена. Сайт магазина может делать его раз в сутки, либо после получения ошибки об изменении курса обмена, либо при изменении настроек платежных систем в своем кабинете. | ||
| ===== Получение информации о платежной форме ===== | ===== Получение информации о платежной форме ===== | ||
| - | + | Для получения информации следует отправить **GET запрос** в формате JSON на URL " https://secure.onpay.ru/pay/merchant_login", где merchant_login - идентификатор сайта.\\ | |
| - | Для получения информации следует отправить GET запрос в формате JSON на URL " https://secure.onpay.ru/pay/merchant_login", где merchant_login - идентификатор сайта. | + | |
| В ответ будет получен JSON следующего формата: | В ответ будет получен JSON следующего формата: | ||
| - | ''{ | + | { | 
| "paysystem_interfaces":{...}, | "paysystem_interfaces":{...}, | ||
| "paysystems":{...}, | "paysystems":{...}, | ||
| Строка 25: | Строка 22: | ||
| "phone_codes":{...}, | "phone_codes":{...}, | ||
| "locales":{...} | "locales":{...} | ||
| - | }'' | + | } | 
| в случае ошибки вида: | в случае ошибки вида: | ||
| - | ''{ | + | { | 
| "errors":{"key":["text1","text2",...]}, | "errors":{"key":["text1","text2",...]}, | ||
| - | }'' | + | } | 
| - | + | где key - ключ ошибки, значение которого массив текстовых описаний ошибок(может быть одно или несколько - text1, text2...).\\ | |
| - | где key - ключ ошибки, значение которого массив текстовых описаний ошибок(может быть одно или несколько). | + | От сервера Onpay придет JSON с ответом (успешный или с ошибкой).\\ | 
| + | \\ | ||
| Пример ответа с ошибкой: | Пример ответа с ошибкой: | ||
| - | ''{ | + | { | 
| "errors": { | "errors": { | ||
| "recipient": [ | "recipient": [ | ||
| - | "Для использования API платежной формы необходимо обратится в техническую поддержку Onpay для активации данного функционала для магазина" | + | "Для использования API платежной формы необходимо обратиться в техническую поддержку Onpay для активации данного функционала для магазина" | 
| ] | ] | ||
| } | } | ||
| - | }'' | + | } | 
| Пример полного успешного ответа см. в разделе "Пример расчета параметров" | Пример полного успешного ответа см. в разделе "Пример расчета параметров" | ||
| ==== Описание параметров ==== | ==== Описание параметров ==== | ||
| - | |||
| === paysystem_interfaces === | === paysystem_interfaces === | ||
| - | + | Значением является hash, ключами которого являются названия доступных и включенных интерфейсов оплаты (данные значения нужны для использования в запросе на создание ордера для параметра "interface_ticker")\\ | |
| - | Значением является hash, ключами которого являются названия доступных и включенных интерфейсов оплаты(данные значения для использования в запросе на создание ордера как "interface_ticker") | + | Значениями ключей-интерфейсов является также хеш, содержащий 2 ключа:\\ | 
| - | Значениями ключей-интерфейсов является также хеш, содержащий 2 ключа: | + | "**paysystem**" - 3-буквенный код платежной системы (к нему привязаны комиссии, курсы, а также список дополнительных полей подлежащих заполнению пользователем - вся эта информация находится в соответствующих справочниках)\\ | 
| - | "paysystem" - для определения комиссий и курсов обмена, а также списка дополнительных полей, | + | "**logo**" - урл логотипа для интерфейса. | 
| - | "logo" - урл логотипа для интерфейса. | + | |
| Пример:  | Пример:  | ||
| - | ''"paysystem_interfaces":{ | + | "paysystem_interfaces": | 
| + | { | ||
| "SBR":{ | "SBR":{ | ||
| "paysystem":"BBR", | "paysystem":"BBR", | ||
| "logo":"/assets/payment_systems/logo/SBR.png" | "logo":"/assets/payment_systems/logo/SBR.png" | ||
| } | } | ||
| - | }'' | + | } | 
| === paysystems === | === paysystems === | ||
| - | + | Значением является hash, содержащий следующие ключи:\\ | |
| - | Значением является hash, содержащий следующие ключи: | + | "**min**" - сумма минимального платежа через данный способ в единицах данной системы\\ | 
| - | "min" - сумма минимального платежа через данный способ в единицах данной системы | + | "**max**" - сумма максимального платежа через данный способ в единицах данной системы\\ | 
| - | "max" - сумма максимального платежа через данный способ в единицах данной системы | + | "**currency_code**" - 3-ех символьный код валюты (для отображения плательщику, если необходимо)\\ | 
| - | "currency_code" - 3-ех символьный код валюты (для отображения плательщику, если необходимо) | + | "**convert_to**" - платежная система, в которую будет осуществлена автоконвертация, если не указана валюта в которую должен быть сконвертирован платеж. НЕ во все системы можно зачислять средства, поэтому в качестве значения поля "ticker" в запросе на создание ордера необходимо использовать только значения из данного поля, а не любую из платежных систем.\\ | 
| - | "convert_to" - платежная система, в которую будет осуществлена автоконвертация, если не указана валюта в которую должен быть сконвертирован платеж. НЕ во все системы можно зачислять средства, поэтому в качестве значения поля "ticker" в запросе на создание ордера необходимо использовать только значения из данного поля, а не любую из платежных систем. | + | "**commissions**" - комиссии платежной системы, содержит 3 параметра:\\ | 
| - | "commissions" - комиссии платежной системы, содержит 3 параметра: pip - процентная комиссия, pif - фиксированная комиссия, mci - минимальная комиссия. | + | **pip** - процентная комиссия,\\ | 
| - | "exchange_rates" - курсы обмена, представленные в виде хеша вида: {"USD":0.01597,"RUR":1.0}. Такая запись означает, что одна единица в данной платежной системе может быть обменяна на 0.01597 единиц в валюте USD или на 1.0 в валюте RUR. | + | **pif** - фиксированная комиссия,\\ | 
| + | **mci** - минимальная комиссия.\\ | ||
| + | "**exchange_rates**" - курсы обмена, представленные в виде хеша вида: {"USD":0.01597,"RUR":1.0}. Такая запись означает, что одна единица в данной платежной системе может быть обменяна на 0.01597 единиц в валюте USD или на 1.0 в валюте RUR.\\ | ||
| Пример: | Пример: | ||
| - | ''  "BBR":{ | + | "BBR":{ | 
| "min":100.0, | "min":100.0, | ||
| "max":150000.0, | "max":150000.0, | ||
| Строка 88: | Строка 86: | ||
| } | } | ||
| } | } | ||
| - | '' | + | |
| === additional_params === | === additional_params === | ||
| - | |||
| Значением является hash, ключи которого - именование платежной системы | Значением является hash, ключи которого - именование платежной системы | ||
| Пример: | Пример: | ||
| - | + | "BBR": | |
| - | ''"BBR":{ | + | { | 
| - | "data":[ | + | "data": | 
| - | {"name":"first_name","regexp":"^[A-ZА-Яa-zа-яёЁ\\-\\s']{2,30}$","label":"pay_form_add_p_label.first_name","message":"pay_form_add_p_message.first_name"}, | + | [ | 
| - | {"name":"middle_name","regexp":"^[A-ZА-Яa-zа-яёЁ\\-\\s']{2,30}$","label":"pay_form_add_p_label.middle_name","message":"pay_form_add_p_message.middle_name"}, | + | {"name":"first_name","regexp":"^[A-ZА-Яa-zа-яёЁ\\-\\s'] | 
| - | {"name":"last_name","regexp":"^[A-ZА-Яa-zа-яёЁ\\-\\s']{2,30}$","label":"pay_form_add_p_label.last_name","message":"pay_form_add_p_message.last_name"}, | + | {2,30}$","label":"pay_form_add_p_label.first_name","message":"pay_form_add_p_message.first_name"}, | 
| - | {"name":"address","regexp":"^[a-zA-Z\\s'0-9,\\-А-Яа-яЁё,\\d\\/\\\\.\\,\"]{4,250}$","label":"pay_form_add_p_label.address","message":"pay_form_add_p_message.address"} | + | {"name":"middle_name","regexp":"^[A-ZА-Яa-zа-яёЁ\\-\\s'] | 
| + | {2,30}$","label":"pay_form_add_p_label.middle_name","message":"pay_form_add_p_message.middle_name"}, | ||
| + | {"name":"last_name","regexp":"^[A-ZА-Яa-zа-яёЁ\\-\\s'] | ||
| + | {2,30}$","label":"pay_form_add_p_label.last_name","message":"pay_form_add_p_message.last_name"}, | ||
| + | {"name":"address","regexp":"^[a-zA-Z\\s'0-9,\\-А-Яа-яЁё,\\d\\/\\\\.\\,\"] | ||
| + | {4,250}$","label":"pay_form_add_p_label.address","message":"pay_form_add_p_message.address"} | ||
| ], | ], | ||
| "SBR":[] | "SBR":[] | ||
| - | }'' | + | } | 
| - | Значением может быть null или hash | + | Значением может быть null или hash:\\ | 
| - | Если null - значит для данной платежной системы нет дополнительных полей. | + | **Если null** - значит для данной платежной системы нет дополнительных полей.\\ | 
| - | Если hash - значит в запросе на создание платежного ордера должны присутствовать перечисленные поля. | + | **Если hash** - значит в запросе на создание платежного ордера должны присутствовать перечисленные поля.\\ | 
| - | Список полей находится по ключу "data", кроме данного ключа могут присутствовать другие, а именно именования интерфейсов оплаты. | + | Список полей находится по ключу "**data**", кроме данного ключа могут присутствовать другие, а именно именования интерфейсов оплаты. | 
| - | + | ||
| - | Пример выше расшифровывается как: | + | |
| - | ''Для платежной системы BBR 4 дополнительных поля: first_name, middle_name, last_name, address. | + | |
| - | Следовательно для всех интерфейсов данной системы их необходимо передавать, за исключением платежного интерфейса "SBR" (передан отдельным ключом).'' | + | |
| + | Пример выше расшифровывается как:\\ | ||
| + | Для платежной системы BBR 4 дополнительных поля: first_name, middle_name, last_name, address.\\ | ||
| + | Следовательно для всех интерфейсов данной системы их необходимо передавать, за исключением платежного интерфейса "SBR" (передан отдельным ключом).\\ | ||
| + | \\ | ||
| Следует отметить, что у ключа интерфейса может быть свой вложенный ключ "data", в этом случае для данного интерфейса используются поля из вложенного hash-а (запись в том же формате) | Следует отметить, что у ключа интерфейса может быть свой вложенный ключ "data", в этом случае для данного интерфейса используются поля из вложенного hash-а (запись в том же формате) | ||
| Значение поля "data" - массив hash-ей, каждый из которых описывает одно дополнительное поле. | Значение поля "data" - массив hash-ей, каждый из которых описывает одно дополнительное поле. | ||
| - | hash описания может содержать следующие ключи: | + | hash описания может содержать следующие ключи:\\ | 
| - | *name* - название параметра, именно оно должно быть использовано при запросе на создание ордера. | + | **name** - название параметра, именно оно должно быть использовано при запросе на создание ордера.\\ | 
| - | *regexp* - regex для первичной валидации значения на стороне сайта магазина. | + | **regexp** - regex для первичной валидации значения на стороне сайта магазина.\\ | 
| - | *label* - ключ локализации (перевод брать из файлов локализации, см. в разделе "locales"), который должен быть использован для отображения плательщику названия поля. | + | **label** - ключ локализации (перевод брать из файлов локализации, см. в разделе "locales"), который должен быть использован для отображения плательщику названия поля.\\ | 
| - | *message* - ключ локализации (перевод брать из файлов локализации, см. в разделе "locales"), который должен быть использован для отображения ошибки плательщику при нарушении regex-а. | + | **message** - ключ локализации (перевод брать из файлов локализации, см. в разделе "locales"), который должен быть использован для отображения ошибки плательщику при нарушении regex-а.\\ | 
| - | *countries* - данный ключ, присутствует только у полей с name равным "user_phone", значение данного поля - список стран, с телефонов которых можно платить данным способом. (Полный список стран см. в разделе "phone_codes"). При выборе плательщиком данного способа список возможных кодов стран должен быть ограничен. | + | **countries** - данный ключ, присутствует только у полей с name равным "user_phone", значение данного поля - список стран, с телефонов которых можно платить данным способом. (Полный список стран см. в разделе "phone_codes"). При выборе плательщиком данного способа список возможных кодов стран должен быть ограничен.\\ | 
| - | *type* - данный ключ указывает тип дополнительного поля(если ключ отсутствует, то "input type='text'"). может принимать значение "checkbox", в данном случае поле regexp будет равно "true". Это означает что валидное значение параметра в запросе на создание ордера будет строка "true", а плательщику в форме должен отображаться checkbox. | + | **type** - данный ключ указывает тип дополнительного поля(если ключ отсутствует, то "input type='text'"). может принимать значение "checkbox", в данном случае поле regexp будет равно "true". Это означает что валидное значение параметра в запросе на создание ордера будет строка "true", а плательщику в форме должен отображаться checkbox.\\ | 
| - | *hint* - содержит ключ локализации подсказки к полю. Перевод должен быть отображен плательщику рядом с полем. (может быть пустым, в данном случае отображать не следует) | + | **hint** - содержит ключ локализации подсказки к полю. Перевод должен быть отображен плательщику рядом с полем. (может быть пустым, в данном случае отображать не следует) | 
| === phone_codes === | === phone_codes === | ||
| - | |||
| Значением является hash вида: | Значением является hash вида: | ||
| - | ''{ | + | { | 
| "ru":"+7", | "ru":"+7", | ||
| "ua":"+38", | "ua":"+38", | ||
| Строка 150: | Строка 151: | ||
| "tr":"+90", | "tr":"+90", | ||
| "na":"+"  | "na":"+"  | ||
| - | }'' | + | } | 
| - | + | ||
| где ключ - двухсимвольное наименование страны, значение - код телефона для данной страны. | где ключ - двухсимвольное наименование страны, значение - код телефона для данной страны. | ||
| Строка 159: | Строка 158: | ||
| === locales === | === locales === | ||
| - | |||
| значением является hash вида: | значением является hash вида: | ||
| - | ''{ | + | { | 
| "ru":"https://secure.onpay.ru/pay_app/i18n/ru.json", | "ru":"https://secure.onpay.ru/pay_app/i18n/ru.json", | ||
| "en":"https://secure.onpay.ru/pay_app/i18n/en.json"  | "en":"https://secure.onpay.ru/pay_app/i18n/en.json"  | ||
| - | }'' | + | } | 
| где ключ - двухсимвольное обозначение языка перевода, значение - url для получения файла локализации. | где ключ - двухсимвольное обозначение языка перевода, значение - url для получения файла локализации. | ||
| Строка 171: | Строка 168: | ||
| Пример: | Пример: | ||
| - | |||
| Если требуется отобразить ключ локализации "user_phone.errors.required" то нужно использовать значение из файла локализации | Если требуется отобразить ключ локализации "user_phone.errors.required" то нужно использовать значение из файла локализации | ||
| - | + | { "user_phone":{ | |
| - | '' | + | |
| - | { "user_phone":{ | + | |
| "errors":{ | "errors":{ | ||
| "required":"This field is required" | "required":"This field is required" | ||
| } | } | ||
| - | }'' | + | } | 
| ==== Пример расчета параметров ==== | ==== Пример расчета параметров ==== | ||
| - | |||
| - | |||
| === Пример полного ответа на запрос получения информации === | === Пример полного ответа на запрос получения информации === | ||
| - | + | { | |
| - | + | ||
| - | { | + | |
| "paysystem_interfaces":{ | "paysystem_interfaces":{ | ||
| "SBR":{ | "SBR":{ | ||
| Строка 279: | Строка 268: | ||
| "en":"https://secure.onpay.ru/pay_app/i18n/en.json" | "en":"https://secure.onpay.ru/pay_app/i18n/en.json" | ||
| } | } | ||
| - | } | + | } | 
| - | + | В данном случае сайт мерчанта должен отобразить плательщику 3 способа оплаты (из раздела "paysystem_interfaces"): "SBR", "BBR" и "USD" с логотипами, ссылки которых указаны в том же разделе.\\ | |
| - | + | Названия должны быть взяты из нужного файла локализации по ключам "paysystem_interface.SBR.name", "paysystem_interface.BBR.name", "paysystem_interface.USD.name". В качестве доп описания можно использовать ключи вида  "paysystem_interface.XXX.description".\\ | |
| - | В данном случае сайт мерчанта должен отобразить плательщику 3 способа оплаты (из раздела "paysystem_interfaces"): "SBR", "BBR" и "USD" с логотипами, ссылки которых указаны в том же разделе. | + | \\ | 
| - | Названия должны быть взяты из нужного файла локализации по ключам "paysystem_interface.SBR.name", "paysystem_interface.BBR.name", "paysystem_interface.USD.name". В качестве доп описания можно использовать ключи вида  "paysystem_interface.XXX.description". | + | Одно из значений "SBR", "BBR", "USD" должно быть использовано в качестве значения параметра "interface_ticker" в запросе на создание ордера.\\ | 
| - | + | \\ | |
| - | Одно из значений "SBR", "BBR", "USD" должно быть использовано в качестве значения параметра "interface_ticker" в запросе на создание ордера. | + | Из hash-а "paysystems" из полей "convert_to" получаем возможный список значений для поля "ticker" запроса на создание платежной формы. В нашем случае это "RUR" и "USD".\\ | 
| - | + | \\ | |
| - | Из hash-а "paysystems" из полей "convert_to" получаем возможный список значений для поля "ticker" запроса на создание платежной формы. В нашем случае это "RUR" и "USD". | + | Если плательщик выберет вариант "BBR" или "USD" то он также должен заполнить соответствующие дополнительные поля, для способа "SBR" их нет.\\ | 
| - | + | \\ | |
| - | Если плательщик выберет вариант "BBR" или "USD" то он также должен заполнить соответствующие дополнительные поля, для способа "SBR" их нет. | + | |
| Если магазину необходимо получить 100 USD (в запросе на создание платежного ордера поля ticker="USD", receive_amount=100.0), то он должен рассчитать сумму, которую должен заплатить плательщик через интерфейс оплаты. | Если магазину необходимо получить 100 USD (в запросе на создание платежного ордера поля ticker="USD", receive_amount=100.0), то он должен рассчитать сумму, которую должен заплатить плательщик через интерфейс оплаты. | ||
| === Пример расчета для интерфейса оплаты SBR === | === Пример расчета для интерфейса оплаты SBR === | ||
| + | **1) SBR принадлежит платежной системе BBR, значит для расчета суммы берем курсы обмена из этой платежной системы** | ||
| - | *1) SBR принадлжеит платежной системе BBR, значит для расчета суммы берем курсы обмена из этой платежной системы* | + | "exchange_rates": | 
| - | + | {"USD":0.01597,  | |
| - | ''"exchange_rates":{ | + | "RUR":1.0,} | 
| - | "USD":0.01597,  | + | |
| - | "RUR":1.0, | + | |
| - | }'' | + | |
| - | *2) Считаем сумму в BBR, которая должна поступить в систему Onpay для обмена на 100 USD* | + | **2) Считаем сумму в BBR, которая должна поступить в систему Onpay для обмена на 100 USD** | 
| сумма = 100 / 0.01597 = 6261.740763932373 | сумма = 100 / 0.01597 = 6261.740763932373 | ||
| - | *3) Считаем сумму в BBR, которая должна поступить от плательщика в платежную систему, чтобы в систему Onpay поступило 6261.740763932373 BBR* | + | **3) Считаем сумму в BBR, которая должна поступить от плательщика в платежную систему, чтобы в систему Onpay поступило 6261.740763932373 BBR* | 
| - | Используем комиссии платежной системы BBR | + | Используем комиссии платежной системы BBR** | 
| - | ''{ | + | { | 
| "pip":1.0, | "pip":1.0, | ||
| "pif":5.0, | "pif":5.0, | ||
| "mci":0.0 | "mci":0.0 | ||
| - | }'' | + | } | 
| сумма = (6261.740763932373 + pif) / (1 - (pip / 100)) (обратный расчет комиссии) = (6261.740763932373 + 5.0) / (1 - (1.0 / 100)) = 6330.041175689265 = 6330.04 (математическое округление до 2-ого знака) | сумма = (6261.740763932373 + pif) / (1 - (pip / 100)) (обратный расчет комиссии) = (6261.740763932373 + 5.0) / (1 - (1.0 / 100)) = 6330.041175689265 = 6330.04 (математическое округление до 2-ого знака) | ||
| - | *4) Проверяем минимальную комиссию* | + | **4) Проверяем минимальную комиссию** | 
| - | комиссия = 6330.04 - 6261.75 = 68.31 | + | комиссия = 6330.04 - 6261.75 = 68.31\\ | 
| - | если комиссия меньше чем mci, то делаем пересчет суммы как: | + | если комиссия меньше чем mci, то делаем пересчет суммы как:\\ | 
| - | сумма до обмена + mci (6261.75 + mci) | + | сумма до обмена + mci (6261.75 + mci)\\ | 
| - | в нашем случае это не требуется, так как рассчитанная комиссия больше чем значение минимальной. | + | в нашем случае это не требуется, так как рассчитанная комиссия больше чем значение минимальной.\\ | 
| - | *5) Проверяем сумму на ограничения платежного интерфейса* | + | **5) Проверяем сумму на ограничения платежного интерфейса** | 
| Берем ограничения от платежной системы BBR | Берем ограничения от платежной системы BBR | ||
| - | ''{ | + | { | 
| "min":100.0, | "min":100.0, | ||
| "max":150000.0 | "max":150000.0 | ||
| - | }'' | + | } | 
| значение 6330.04 находится в данном диапозоне, следовательно плательщик сможет оплатить через данный способ (в случае превышения лимита НЕ стоит предлагать плательщику платежный интерфейс. У разных интерфейсов разные ограничения) | значение 6330.04 находится в данном диапозоне, следовательно плательщик сможет оплатить через данный способ (в случае превышения лимита НЕ стоит предлагать плательщику платежный интерфейс. У разных интерфейсов разные ограничения) | ||
| - | *6) Результирующая сумма к оплате* | + | **6) Результирующая сумма к оплате** | 
| Для получения магазином 100 USD плательщик может заплатить 6330.04 BBR | Для получения магазином 100 USD плательщик может заплатить 6330.04 BBR | ||
| - | *7) Формируем данные для запроса на создание платежного ордера* | + | **7) Формируем данные для запроса на создание платежного ордера** | 
| - | ''{ | + | { | 
| "ticker":"USD", | "ticker":"USD", | ||
| "interface_ticker":"SBR", | "interface_ticker":"SBR", | ||
| "pay_amoun":6330.04, | "pay_amoun":6330.04, | ||
| "receive_amount":100.0 | "receive_amount":100.0 | ||
| - | }'' | + | } | 
| - | + | **8) Отображаем плательщику форму для ввода дополнительных полей** | |
| - | *8) Отображаем плательщику форму для ввода дополнительных полей* | + | В случае SBR - таковых нет.\\ | 
| - | В случае SBR - таковых нет. | + | в случае BBR:\\ | 
| - | в случае BBR: | + | { | 
| - | ''{ | + | "first_name":"Vladimir", | 
| - | "first_name":"Test", | + | "middle_name":"Ilyich", | 
| - | "middle_name":"Testovich", | + | "last_name","Lenin", | 
| - | "last_name","Testov", | + | "address":"Mausoleum" | 
| - | "address":"Address" | + | } | 
| - | }'' | + | |
| Другие обязательные поля смотреть в разделе *Создание ордера* | Другие обязательные поля смотреть в разделе *Создание ордера* | ||
| ===== Создание ордера ===== | ===== Создание ордера ===== | ||
| - | |||
| ==== Запрос ==== | ==== Запрос ==== | ||
| - | |||
| === Обязательные параметры === | === Обязательные параметры === | ||
| - | |||
| Для создания ордера необходимо отправить POST запрос на адрес https://secure.onpay.ru/pay в формате JSON со следующими обязательными параметрами: | Для создания ордера необходимо отправить POST запрос на адрес https://secure.onpay.ru/pay в формате JSON со следующими обязательными параметрами: | ||
| | Название | Тип | Значение и описание | | | Название | Тип | Значение и описание | | ||
| Строка 368: | Строка 347: | ||
| | interface_ticker | string | Название способа оплата (через который плательщик будет платить) | | | interface_ticker | string | Название способа оплата (через который плательщик будет платить) | | ||
| | recipient | string | идентификатор магазина | | | recipient | string | идентификатор магазина | | ||
| - | | pay_mode | string | тип платежа, fix, free или inv | | + | | pay_mode | string | тип платежа, fix или free | | 
| | pay_amount | float | сумма, которую должен заплатить плательщик способом interface_ticker (может быть пустым, в этом слечае будет рассчитано автоматически, в зависимости от receive_amount) | | | pay_amount | float | сумма, которую должен заплатить плательщик способом interface_ticker (может быть пустым, в этом слечае будет рассчитано автоматически, в зависимости от receive_amount) | | ||
| | receive_amount | float | сумма, которую должен будет получить магазин в валюте ticker | | | receive_amount | float | сумма, которую должен будет получить магазин в валюте ticker | | ||
| Строка 383: | Строка 362: | ||
| === Пример запроса === | === Пример запроса === | ||
| Пример запроса на создание ордера через системы BBR, которая имеет 4 дополнительных поля(first_name, last_name, middle_name, address): | Пример запроса на создание ордера через системы BBR, которая имеет 4 дополнительных поля(first_name, last_name, middle_name, address): | ||
| - | + | { | |
| - | + | ||
| - | { | + | |
| "user_email":"test@email.com", | "user_email":"test@email.com", | ||
| "pay_for":"test_pay_for", | "pay_for":"test_pay_for", | ||
| Строка 403: | Строка 380: | ||
| "number":"9001234567" | "number":"9001234567" | ||
| } | } | ||
| - | } | + | } | 
| - | Маски для первичной валидации и сообщения об ошибках для дополнительных полей можно получить при помощи запроса информации. | + | Маски для первичной валидации и сообщения об ошибках для дополнительных полей можно получить при помощи запроса информации.\\ | 
| - | + | Значениями поля "user_phone.code" может быть одно из значений кодов стран из запроса на получение информации. Для некоторых платежных интерфейсов список кодов ограничивается (см. в разделе *additional_params*)\\ | |
| - | Значениями поля "user_phone.code" может быть одно из значений кодов стран из запроса на получение информации. Для некоторых платежных интерфейсов список кодов ограничивается (см. в разделе *additional_params*) | + | |
| ==== Ответ ==== | ==== Ответ ==== | ||
| - | |||
| === Формат и общее описание === | === Формат и общее описание === | ||
| - | |||
| Сервер Onpay отвечает в формате JSON | Сервер Onpay отвечает в формате JSON | ||
| - | ''{ | + | { | 
| "redirect_to": {},  | "redirect_to": {},  | ||
| "po_psi_data_request": {}, | "po_psi_data_request": {}, | ||
| "errors": {} | "errors": {} | ||
| - | }'' | + | } | 
| - | + | Где одно или несколько из полей из **errors**, **redirect_to** или **po_psi_data_request** НЕ пустое(-ые). | |
| - | Где, одно из полей, errors, redirect_to или po_psi_data_request НЕ пустое(НЕ пустыми могут быть несколько полей). | + | |
| - | + | ||
| - | Алгоритм обработки ответа: | + | |
| - | Если НЕ пустое "errors" | + | |
| - | сайт магазина должен отобразить ошибки плательщику и переформировать данные для отправки(пример: в случае отсутствия обязательного поля - заполнить данное поле). (подробнее читать в разделе "errors") | + | |
| - | Иначе | + | |
| - | Если НЕ пустое "redirect_to" | + | |
| - | сайт магазина должен перенаправить плательщика на url, указанный в этом параметре. (подробнее читать в разделе "redirect_to") | + | |
| - | Иначе | + | |
| - | сайт магазина, должен сформировать форму из данных, содержащихся в поле "po_psi_data_request", и перенаправить пользователя сабмитом данной формы. (подробнее читать в разделе "po_psi_data_request") | + | |
| + | Алгоритм обработки ответа:\\ | ||
| + | **Если НЕ пустое "errors"** сайт магазина должен отобразить ошибки плательщику и переформировать данные для отправки (пример: в случае отсутствия обязательного поля - заполнить данное поле). Подробнее см. в разделе "errors")\\ | ||
| + | **Иначе** (ордер успешно создан, и мы смотрим на два остальных поля redirect_to или po_psi_data_request)\\ | ||
| + | \\ | ||
| + | **Если НЕ пустое "redirect_to"** сайт магазина должен перенаправить плательщика на url, указанный в этом параметре. (подробнее читать в разделе "redirect_to")\\ | ||
| + | **Иначе** сайт магазина, должен сформировать форму из данных, содержащихся в поле "po_psi_data_request", и перенаправить пользователя сабмитом данной формы. (подробнее читать в разделе "po_psi_data_request")\\ | ||
| + | Чем отличают **redirect_to** или **po_psi_data_request**.\\ | ||
| + | **redirect_to** используется, когда перенаправление покупателя нужно осуществить запросом типа GET\\ | ||
| + | **po_psi_data_request** используется, когда перенаправление покупателя нужно осуществить запросом типа POST\\. | ||
| + | Пример платежной системы с типом GET киви с выводом инструкции.\\ | ||
| + | Пример платежной системы с типом POST - UNR.\\ | ||
| + | Информацию о типе перенаправления (GET/POST) вы получите в ответ на запрос о создании ордера. | ||
| === errors === | === errors === | ||
| - | |||
| - | |||
| в качестве значения errors выступает hash. | в качестве значения errors выступает hash. | ||
| - | |||
| Примеры: | Примеры: | ||
| - | ''"errors": { | + | "errors": { | 
| "receive_amount": [ | "receive_amount": [ | ||
| - | "Ошибка в курсе обмена. Возможно курс обмена изменился. Пожалуйста, попробуйте продолжить операцию еще раз. <a href='http://wiki.onpay.ru/doku.php?id=oshibki#ошибки_платежной_формы' target='_blank'>Подробнее</a>" | + | "Ошибка в курсе обмена. Возможно курс обмена изменился. Пожалуйста, попробуйте продолжить операцию еще раз. | 
| + | <a href='http://wiki.onpay.ru/doku.php?id=oshibki#ошибки_платежной_формы' target='_blank'>Подробнее</a>" | ||
| ] | ] | ||
| - | }'' | + | } | 
| - | ''"errors": { | + | -- | 
| + | |||
| + | "errors": { | ||
| "first_name": [ | "first_name": [ | ||
| "pay_form_add_p_message.first_name" | "pay_form_add_p_message.first_name" | ||
| Строка 451: | Строка 427: | ||
| "pay_form_add_p_message.last_name" | "pay_form_add_p_message.last_name" | ||
| ] | ] | ||
| - | }'' | + | } | 
| - | + | ||
| - | + | ||
| - | Ключ ошибки - это поле, значение которого неверно. | + | |
| - | Значение - массив текстов ошибок. | + | |
| - | Иногда текст ошибки представлен в виде ключа для локализации, пример: "pay_form_add_p_message.first_name". В таких случаях перевод нужно брать из файлов локализации, url которых можно получить при помощи запроса получения информации. | + | |
| + | **Ключ ошибки** - это поле, значение которого неверно.\\ | ||
| + | **Значение** - массив текстов ошибок.\\ | ||
| + | Иногда текст ошибки представлен в виде ключа для локализации, пример: "pay_form_add_p_message.first_name". В таких случаях перевод нужно брать из файлов локализации, url которых можно получить при помощи запроса получения информации.\\ | ||
| + | \\ | ||
| Если присутствует ключ ошибки "system", значит допущена фатальная ошибке при запросе(примеры: неверный формат, пустой запрос) | Если присутствует ключ ошибки "system", значит допущена фатальная ошибке при запросе(примеры: неверный формат, пустой запрос) | ||
| === redirect_to === | === redirect_to === | ||
| в качестве значения redirect_to выступает hash вида | в качестве значения redirect_to выступает hash вида | ||
| - | ''{ | + | { | 
| "url": "https://secure.onpay.ru/1234567890/instruction", | "url": "https://secure.onpay.ru/1234567890/instruction", | ||
| "...": "..."  | "...": "..."  | ||
| - | }'' | + | } | 
| сайт магазина должен осуществить перенаправление плательщика GET запросом на URL, указанный как значение ключа "url". В ответе могут присутствовать другие ключи, они являются служебными и должны игнорироваться сайтом магазина. | сайт магазина должен осуществить перенаправление плательщика GET запросом на URL, указанный как значение ключа "url". В ответе могут присутствовать другие ключи, они являются служебными и должны игнорироваться сайтом магазина. | ||
| Строка 489: | Строка 463: | ||
| "order_id"="123" | "order_id"="123" | ||
| "sum"=103.09 | "sum"=103.09 | ||
| - | При этом сайт магазина должен передавать значения полей в неизменяемом виде(соблюдая типы данных и не применяя дополнительных функций(округление, изменение регистра)) | + | При этом сайт магазина должен передавать значения полей в неизменяемом виде (соблюдая типы данных и не применяя дополнительных функций(округление, изменение регистра)) | 
| - | hash кроме ключей route и data может содержать дополнительные ключи, сайт магазина должен игнорировать их. | + | Данный hash кроме ключей route и data может содержать дополнительные ключи, сайт магазина должен игнорировать их. |