Если Вы не можете использовать библиотеку libwebtopay, то ниже вы найдёте подробную спецификацию отправляемых и получаемых данных.

Если это возможно (на Вашем сервере есть PHP с необходимой версией), мы настоятельно рекомендуем использовать библиотеку libwebtopay для генерации запросов и обработки обратных вызовов.

Структура запроса данных

Данные формы посылайте методом POST по адресу: https://www.paysera.com/pay/

Всегда отправляются 2 поля: data и sign.

Создание полей из параметров

  1. Все параметры объединяются в строку URL-encoded. Например:
    array('param1' => 'abc', 'param2' => 'Some string with symbols %=&')
    'param1=abc&param2=Some+string+with+symbols+%25%3D%26'
    
    На языке PHP это делается с помощью функции http_build_query
  2. Полученная строка кодируется кодировкой base64. Например:
    'param1=abc&param2=Some+string+with+symbols+%25%3D%26'
    'cGFyYW0xPWFiYyZwYXJhbTI9U29tZStzdHJpbmcrd2l0aCtzeW1ib2xzKyUyNSUzRCUyNg=='
    
    На языке PHP это делается с помощью функции base64_encode
  3. В полученной закодированной строке символы «/» заменяются на «_», символы «+» на «-». Мы получаем кодировку, похожую на base64, которую безопасно пересылать через URL без дальнейшей обработки. Например:
    'MViDYlV7V0iHR2w2OkJjRFFpY11hizJDhk+EZjl/'
    'MViDYlV7V0iHR2w2OkJjRFFpY11hizJDhk-EZjl_'
    
    На языке PHP это делается с помощью функции str_replace или strtr.
  4. Строка окончательного результата подписывается – создается параметр sign. Алгоритм для создания параметра sign:
    sign = md5(data + password)
    Здесь md5 криптографическая хеш-функция, data - кодированные параметры, password - ваш пароль проекта.

Доступные параметры

Параметр Длина Обязателен Описание
projectid 11 Да Уникальный номер проекта. Оплаты могут производиться только в рамках утверждённого проекта.
orderid 40 Да Номер заказа из Вашей системы.
accepturl 255 Да Полный Интернет адрес (URL), куда направляется клиент после оплаты.
cancelurl 255 Да Полный Интернет адрес (URL), куда направляется клиент после нажатия линка вернуться в магазин.
callbackurl 255 Да Полный Интернет адрес (URL), на который продавцу передаётся информация об осуществленном платеже.

Скрипт должен вернуть текст "OK". Только тогда наша система сможет зафиксировать факт успешного информирования об оплате.

Если ответа "OK" нет, то сообщение отправляется 4 раза (сразу после получения, спустя час, спустя три часа и спустя сутки).
version 9 Да Номер версии спецификации (API) платежной системы Paysera.
lang 3 Нет Можно указать язык пользователя (ISO 639-2/B: LIT, RUS, ENG и. т. п.). Если Paysera не поддерживает данного языка, язык будет выбран либо по IP адресу посетителя, либо по умолчанию будет использоваться англ. язык.
amount 11 Нет Сумма (в центах), которую должен оплатить клиент.
currency 3 Нет Валюта (напр. USD, EUR и. т. п.), в которой вы предпочитаете получать платежи клиента. Если указанная валюта не может быть принята посредством выбранного метода оплаты, система автоматически конвертирует сумму в поддерживаемую валюту по курсу текущего дня. В ответе на Ваш сайт будут переданы payamount и paycurrency.
payment 20 Нет Способ оплаты. Если указан, платеж будет осуществлен с помощью указанного способа оплаты. Если не указан, плательщику будет немедленно предоставлена таблица с доступными способами оплаты. Вы можете получить способы оплаты в реальном времени используя библиотеку WebToPay.
country 2 Нет Страна плательщика (LT, EE, LV, GB, PL, DE). Указав страну, плательщику сразу же предоставляются те способы оплаты, которые возможны в данной стране. Если страна не указана, система по IP адресу посетителя установит его страну. Плательщику предоставляется возможность поменять страну.
paytext 255* Нет Реквизиты платежа, которые видны при переводе. Не указав реквизитов, по умолчанию используется следующий текст:
Оплата за товары и услуги (за нр. [order_nr]) ([site_name]).

Если реквизиты платежа указаны, необходимо внести следующие переменные, которые в конечном тексте назначения будут заменены соответствующими значениями:

  • [order_nr] - номер заказа.
  • [site_name] или [owner_name] - адрес сайта или название предприятия.

Не указав этих переменных, будет использоваться текст реквизитов по умолчанию.

Пример реквизитов платежа:

Оплата за товары в заказе [order_nr] на сайте [site_name].
p_firstname 255 Нет Имя покупателя. Желательно для большинства методов оплаты. Обязательно для некоторых методов оплаты.
p_lastname 255 Нет Фамилия покупателя. Желательна для большинства методов оплаты. Обязательна для некоторых методов оплаты.
p_email 255 Нет Адрес эл. почты клиента обязателен. Если адрес не будет получен, клиент получит запрос его указать. На этот адрес эл. почты клиент будет получать сообщения от Paysera о статусе оплаты.
p_street 255 Нет Адрес покупателя, на который будут отправляться товары (напр. Mėnulio 7 - 7). Желателен. Обязателен для некоторых методов оплаты.
p_city 255 Нет Город покупателя, в который будут отправляться товары (напр. Vilnius). Желателен. Обязателен для некоторых методов оплаты.
p_state 20 Нет Код штата покупателя (обязателен только при покупке в США). Желателен. Обязателен для некоторых методов оплаты.
p_zip 20 Нет Почтовый код покупателя. Почтовые коды Литвы можно найти здесь. Желателен. Обязателен для некоторых методов оплаты.
p_countrycode 2 Нет Код страны покупателя. Коды стран можно найти здесь. Желателен. Обязателен для некоторых методов оплаты.
only_payments 0 Нет Показывать разделенный запятыми список способов оплаты.
disallow_payments 0 Нет Не показывать разделенного запятыми списка способов оплаты.
test 1 Нет Параметр, при наличии которого можно тестировать соединение. Оплата не производится и результат возвращается сразу, как будто бы оплата была произведена. Для того, чтобы протестировать, необходимо активировать режим теста возле выбранного проекта. Путь: "Управление проектами" -> "Услуга сбора платежей" (возле конкретного проекта) -> "Разрешить тестовую оплату" (отметить).
time_limit 19 Нет Параметр, при наличии которого можно тестировать соединение. Датa предоставляется в форматe "yyyy-mm-dd HH:MM:SS". Минимальное значение - за 15 минут от текущего времени, максимальное - 3 дня. Примечание: работает только с определенными способами оплаты.
personcode 255 Нет Этот параметр можно использовать для идентификации пользователя. Если идентификационный номер пользователя передается, вместе с callback Paysera вернет параметр personcodestatus, который укажет совпадает ли личный код пользователя с переданным.
developerid 11 Нет В случае, если Вы в нашей системе отмечены как разработчик (developer), Вы должны в своем установленном проекте (проектах) передавать этот параметр. Значение параметра - Ваш уникальный номер пользователя.

* Окончательная длина может варьироваться в зависимости от спецификации типа оплаты

Структура информирования об оплате

Paysera отправляет ответ по указанному Вами callbackurl адресу. К указанному Вами callbackurl адресу добавляются дополнительные GET параметры, список которых размещён ниже.

  • data - закодированные параметры из системы Paysera. Используется тот же алгоритм кодирования данных, как и при создании запроса для макро-платежей. Для получения параметров надо выполнить 3 действия:
    1. Изменить символы «-» на «+», «_» на «/».
    2. Декодировать строку с использованием кодировки base64.
    3. Получить массив параметров из декодированной строки, которая является строкой URL зашифрованных параметров.
    Пример на языке PHP:
    $params = array();
    parse_str(base64_decode(strtr($_GET['data'], array('-' => '+', '_' => '/'))), $params);
    //use $params
  • ss1 - подпись параметра data без использования схемы закрытых – открытых ключей. Алгоритм подписи:
    ss1 = md5(data + password)
  • ss2 - SHA-1 подпись параметрa data, с использованием схемы закрытых – открытых ключей. Открытый ключ Paysera, который используется для создания этой подписи, можно найти в https://www.paysera.com/download/public.key

Когда Вы получите обратный вызов, перед подтверждением заказа Вы обязаны проверить, по крайней мере, одну подпись. Если есть возможность, всегда (также) проверьте подпись более высокой безопасности ss2.

Закодированные параметры

Параметр Описание
projectid Уникальный номер проекта. Оплаты могут производиться только в рамках утверждённого проекта.
orderid Номер заказа из Вашей системы.
lang Можно указать язык пользователя (ISO 639-2/B: LIT, RUS, ENG и. т. п.). Если Paysera не поддерживает данного языка, язык будет выбран либо по IP адресу посетителя, либо по умолчанию будет использоваться англ. язык.
amount Сумма (в центах), которую должен оплатить клиент.
currency Валюта (напр. USD, EUR и. т. п.), в которой вы предпочитаете получать платежи клиента. Если указанная валюта не может быть принята посредством выбранного метода оплаты, система автоматически конвертирует сумму в поддерживаемую валюту по курсу текущего дня. В ответе на Ваш сайт будут переданы payamount и paycurrency.
payment Способ оплаты. Если указан, платеж будет осуществлен с помощью указанного способа оплаты. Если не указан, плательщику будет немедленно предоставлена таблица с доступными способами оплаты. Вы можете получить способы оплаты в реальном времени используя библиотеку WebToPay.
country Страна плательщика (LT, EE, LV, GB, PL, DE). Указав страну, плательщику сразу же предоставляются те способы оплаты, которые возможны в данной стране. Если страна не указана, система по IP адресу посетителя установит его страну. Плательщику предоставляется возможность поменять страну.
paytext Реквизиты платежа, которые видны при переводе.
name Имя плательщика, полученное из платежной системы. Отправляется только если система его предоставляет.
surename Фамилия плательщика, полученная из системы оплаты. Отправляется только если система ее предоставляет.
status Статус оплаты:
  • 0 - оплата не произведена
  • 1 - оплата успешна
  • 2 - платежное поручение принято, но оплата еще не произведена (этот статус не гарантирует осуществления платежа)
  • 3 - дополнительная информация о платеже
test Параметр, при наличии которого можно тестировать соединение. Оплата не производится и результат возвращается сразу, как будто бы оплата была произведена. Для того, чтобы протестировать, необходимо активировать режим теста возле выбранного проекта. Путь: "Управление проектами" -> "Услуга сбора платежей" (возле конкретного проекта) -> "Разрешить тестовую оплату" (отметить).
payment_country Страна способа оплаты. Если способ оплаты доступен в нескольких странах (международный) – параметр не отправляется. Страна предоставляется в двузначном формате (ISO 3166-1 alpha-2), напр.: LT, PL, RU, EE.
payer_ip_country Страна плательщика, которая определяется по адресу IP плательщика. Страна предоставляется в двузначном формате (ISO 3166-1 alpha-2), напр.: LT, PL, RU, EE.
payer_country Страна плательщика, которая определяется по стране способа оплаты, а если способ оплаты международный – по адресу IP плательщика. Страна предоставляется в двузначном формате (ISO 3166-1 alpha-2), напр.: LT, PL, RU, EE.
p_email Адрес эл. почты клиента обязателен. Если адрес не будет получен, клиент получит запрос его указать. На этот адрес эл. почты клиент будет получать сообщения от Paysera о статусе оплаты.
requestid Это число запросa который мы получаем, когда человек нажимает на банк и который мы представляем в ссылку в поле "callbackurl".
payamount Сумма (в центах), которую перевели. Может отличаться от указанной, если была конвертирована в другую валюту.
paycurrency Валюта переведённого платежа (напр. USD, EUR и. т. п.). Может отличаться от той, которую вы запрашивали, если та валюта принята посредством выбранного метода оплаты.
version Номер версии спецификации (API) платежной системы Paysera.
account Номер счета, из которого был осуществлен платеж.
personcodestatus Если вы указали параметр personcode при выполнении запроса, этот параметр указывает, совпадает ли переданный личный код с реальным кодом. Значение:
  • 0 – личный код пока неизвестен;
  • 1 – личный код совпадает;
  • 2 – личный код не совпадает;
  • 3 – личный код неизвестен.
Если личный код неизвестен во время callback, будет произведен еще один callback с параметром status установленным на 3, как только личный код станет известным.

Всегда проверяйте состояние оплаты – только status 1 означает успешное завершение платежа. Кроме того, убедитесь, не предоставлена ли еще услуга за этот платеж (по параметру orderid), не осуществляется ли платеж с целью тестирования (по параметру status), а также проверьте, соответствуют ли переданные сумма и валюта значениям, сохраненным в Вашем заказе.

Информация об оплате в accepturl

Точно те же параметры, как и в обратном вызове, передаются на указанный Вами accepturl, на который перенаправляется пользователь. Почти всегда на данный момент платеж еще не выполнен, и параметр status, возможно, будет 2. Обязательно проверьте, чтобы услга за один платеж не была бы предоставлена дважды – если пользователь обновит страницу, ваша система опять получит информацию об оплате.