Интеграция с PayU Russia

Дата публикации:

Недавно к нам зашел один интересный ecommerce проект. Дело происходило на российском рынке, и этот момент привел нас к одной интересной задаче. Заказчик решил произвести интеграцию сайта с сервисом PayU. Для тех, кто не знает, речь идет о международной процессинговой компании, предоставляющей систему интернет-эквайринга для приема электронных платежей.

Казалось бы, что может быть проще? Бери и делай. Но как показала практика, при интеграции с российской версией PayU возникает множество проблем. Что это за проблемы и как мы с ними боролись — рассказывает отдел электронной коммерции JetRuby Agency.

1. Отсутствие готовых решений на Ruby on Rails

Первый пошел. Оказывается, все доступные в интернете рельсовые гемы для подключения эквайринга от PayU, не работают с российской версией сервиса. Она, правда, тоже располагает готовыми решениями. Но основная их масса основана на PHP, а это нам не подходит.

В сухом остатке образовалась необходимость писать собственный сервис интеграции с PayU Russia. Ни много — ни мало. Большая часть описанных в этой статье сложностей является следствием отсутствия готового решения. Как говорится — пляшем от печки.

2. Особенности отправки данных

При создании платежа нам нужно делать POST-запрос, передавая хеш данных в PayU. Проблема же заключается в том, что стандартный рельсовый метод передачи данных Net::HTTP.post_form(URI.parse(<URL>), send_params) не работает — их приходится отправлять напрямую из формы (<form>…). Пример рабочей формы.

В итоге процесс приобретает следующую конфигурацию:

  • Пользователь нажимает «Оформить заказ»;
  • Его редиректит на страницу магазина с формой (ее поля скрыты), при этом на страницу приходит оповещение «Перенаправляем на страницу оплаты»;
  • Форма автоматически сабмитится;
  • Пользователь оказывается на странице оплаты PayU.

love-1

Обратите внимание: для всего этого нам понадобятся ID сайта в системе PayU и секретный ключ. Их мы получаем в панели управления.

love-2

Ниже представлен код сервиса для формирования хеша данных и расчета контрольной суммы.

3. Проверка IPN-роута

Для уведомления магазина о статусе совершенного платежа (IPN) система PayU использует POST запрос на роут, указанный в панели управления.

pirog

Но тут есть одно “но”. Чтобы сохранить роут в настройках, PayU Russia делает GET запрос на этот же роут. А в процессе работы к нему отправляются только POST запросы. Как быть? Проверять тип запроса и возвращать «true» для тестирующих GET-запросов от PayU, при этом не выполняя для GET больше никакой логики.

4. Ответ на IPN-уведомление

После проведения платежа в магазин поступает IPN-уведомление от PayU об успешном зачислении средств. В ответ на него PayU ожидает получить сообщение определенного формата. При отсутствии корректного ответа, система начнет отправлять повторные IPN-запросы с этим платежом на ваш роут с интервалом в несколько минут. И так в течение нескольких дней.

Пример ответа:

render plain: «<epayment>#{current_time}|#{checksum}</epayment>»

Где checksum — хеш, рассчитанный с помощью HMAC из определенной строки и секретного ключа магазина. Строка рассчитывается из полей IPN-запроса IPN_PID[0], IPN_PNAME[0] и IPN_DATE, а также current_time.

А вот код расчета checksum и ответа сайта на IPN:

5. Прочее

  • В PayU нет нормальной песочницы. Если вы не на продакшене, то сделать возврат платежа (refund) просто не получится. Вы даже не сможете протестировать реальные оплаты. Во-первых, потому что результат каждого платежа, возвращаемый на BACK_REF, получит статус «ошибка». А во-вторых, менеджеры PayU не согласны включать стейджинги в «боевой» режим. Таким образом, проведение полноценного тестирования возможно только на продакшене.
  • Оплату картой для вашего сайта ни за что не включат в «боевой» режим, пока на нем не будет достаточно юридической информации (ОГРН/ИНН/КПП/факт. адрес юр. лица и пр.), а также информации о безопасности платежа и логотипов систем оплаты. Полный список необходимых ограничений, тексты и ассеты платежных сервисов всегда можно уточнить у менеджеров PayU.
  • Наконец, вам будет полезно узнать тестовые креды для первоначальной работы в development. Официальная документация их не содержит. Ловите:

MERCHANT: «demo2»

secret key: «demosecret_old»

  • Если вы работаете в режиме development, то для перенаправления в магазин после проведения платежа удобно использовать ngrok. И передавать его IP в настройке BACK_REF. Далее BACK_REF отправляется в PayU вместе с хешем данных для проведения платежа.

Вывод

Итогом напряженной и плодотворной работы стала интеграция сайта с PayU Russia — возможность автоматического подтверждения платежей и списания средств с карты в режиме онлайн. Если у вас остались вопросы, связывайтесь с нами через форму обратной связи или оставляйте комментарии под статьей. И не переключайтесь: самые интересные кейсы всегда впереди.

Мы Крым Диджитал

С 2015 года мы предоставляем полный цикл услуг мобильной и веб-разработки клиентам из различных отраслей и разных стран.

Подпишись
на наши новости

Контакты пресс-службы

+ 7 (926) 118-80-32

WhatsApp, Viber, Telegram

Давайте обсудим Ваш проект

или свяжитесь с нами по почте projects@crimeadigital.ru

Нажимая кнопку «Отправить», вы даете согласие на обработку персональных данных

Прошел день карьеры в СевГУ

Резидент технопарка, компания Крым Диджитал, приняла участие в Дне Карьеры в СевГУ, который прошел 17 мая. Мероприятие длилось 3 часа. Компанией заинтересовались  более 35 студентов, которым была важна информация о прохождении практики, бесплатные курсы Академии и вакансии, не требующие опыта работы. Руководитель разработки компании выступил с презентацией и ответил на все вопросы, которые так волнуют студентов — как начать свою карьеру в ИТ? Есть ли возможность совмещать учебу с работой? Кем я смогу стать? Как понять, кем я хочу работать? И многие другие.

Резидент технопарка, компания Крым Диджитал, приняла участие в Дне Карьеры в СевГУ, который прошел 17 мая.

Мероприятие длилось 3 часа. Компанией заинтересовались  более 35 студентов, которым была важна информация о прохождении практики, бесплатные курсы Академии и вакансии, не требующие опыта работы.

Руководитель разработки компании выступил с презентацией и ответил на все вопросы, которые так волнуют студентов - как начать свою карьеру в ИТ?

Есть ли возможность совмещать учебу с работой?

Кем я смогу стать?

Как понять, кем я хочу работать?

И многие другие.

Завершен набор студентов на летнюю практику

Крым Диджитал завершила набор студентов на летнюю практику. В июле придут 14 человек. Это студенты второго и третьего курсов кафедр Программная инженерия, Информатика и вычислительная техника, Информационные системы и технологии и Управление в технических системах. Все ребята будут ходить в офис и будут заняты реальным проектом, который они должны реализовать до конца практики. Каждый выбрал для себя то направление, в котором хотел бы развиваться — front-end и back-end-разработка, дизайн. Руководить практикой будет Head of Engineering.
Крым Диджитал завершила набор студентов на летнюю практику. В июле придут 14 человек. Это студенты второго и третьего курсов кафедр Программная инженерия, Информатика и вычислительная техника, Информационные системы и технологии и Управление в технических системах. Все ребята будут ходить в офис и будут заняты реальным проектом, который они должны реализовать до конца практики. Каждый выбрал для себя то направление, в котором хотел бы развиваться - front-end и back-end-разработка, дизайн. Руководить практикой будет Head of Engineering.

Крым Диджитал приняла участие в стратегической сессии

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня. Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства. Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Руководители Крым Диджитал приняли участие в стратегической сессии, которая прошла на базе СевГУ 10 июня.

Вместе с Правительством Севастополя, Институтом информационных технологий и управления в технических системах СевГУ и приглашенными ИТ-компаниями города обсудили перспективу развития системы высшего образования в Севастополе.
Представители бизнеса, власти и образовательной системы выступали со своим видением будущих потребностей региона в кадрах, поднимали насущные вопросы обучения студентов, прохождения практики и дальнейшего трудоустройства.

Крым Диджитал является амбассадором идеи образования и взращивания молодых кадров, развивает образовательные проекты и на протяжении 5 последних лет ведет активную работу в направлении поддержки и развития молодых специалистов ИТ-отрасли Крыма.

Выпуск курса Software Testing

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing! Всего курс успешно завершили 13 человек. В течение 2 месяцев несмотря на теплую погоду и манящее море ребята ответственно посещали занятия 2 раза в неделю, делали домашние задания и проверочные работы. Трое начинающих специалистов теперь стажеры нашей компании. Следующий курс намечен на август. Не пропусти анонс записи!

Мы поздравляем выпускников нашего первого в этом году курса Крым Диджитал Академии по Software Testing!

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

Следующий курс намечен на август. Не пропусти анонс записи!