Робокасса: подключение к Битрикс. Важные и неочевидные нюансы

Этот пост был опубликован мной более года назад. Информация, описанная ниже, уже могла потерять актуальность, но всё ещё может быть полезна.

Нигде, кроме документации Робокассы, не написано что и как делать. И хоть она доступна всем, а авторы над ней неплохо постарались, всё же разобраться с ней может оказаться процессом утомительным: оказывается не всё так очевидно,

Но это если оглядываться на все те рецепты, которые даются в интернете видеороликами и в статьях. Она устарела настолько, насколько перестала быть полезной. А свежего никто ничего не пишет, разве что в обсуждениях на форумах самого битрикса, но там-то люди уже прошаренные, знают что куда… Запутаться — как нефиг делать. Даже мануал от разработчиков самого битрикса не даёт исчерпывающей информации по теме.

Таким образом, в настоящей заметке я постараюсь исправить эту ужасную ситуацию. И если уж интегрировать Робокассу в Битрикс-магазин, то только согласно официальной документации Робокассы при наличии должого внимания. И вот этой момей заметке 🙂

Когда я начал разбираться в этом вопросе, сам невнимательно читал документацию. только с пинка коллеги понял что к чему. Пост не является дословным цитированием документации, это просто те шишки, которые я набил в ходе работы над проектом. Возможно, кто-то уже знает описанное ниже, а что-то и вовсе очевидно, тогда прошу молча проследовать мимо. На абсолютную же истинность я не претендую, принимаю конструктивную критику, дополнения и поправки.

Остальным — велкам под кат. Здравая критика приветствуется.

0) Не читай старые мануалы и статьи по этой теме

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

1) URL для тестовых платежей

Когда ты начнёшь внедрять Робокассу на сайт (это даже не касается конкретно Битрикса), то в ходе гуглежа гугления поиска тебе будут попадаться статьи, где для тестовых платежей указан следующий URL: http://test.robokassa.ru/index.aspx

Этот адрес устарел. Сейчас, если туда передавать параметры платежа (неважно, POSTом или GETом), то в любом случае будет открываться главная страница Робокассы.

Адрес, на который следует слать тестовыевообще все!) платежи таков: https://auth.robokassa.ru/Merchant/Index.aspx

2) Параметр isTest

Разница между тестовыми и «боевыми» платежами раньше отличались отсылкой параметров с твоего сайта на разные URL Робокассы. Сейчас, как я уже сказал, оба типа транзакций идут на один вышеупомянутый адрес. Но для тестовых платежей ты должен добавить параметр isTest и передавать его со значением = 1 (единица, значит «вкл»). Собственно, это все отличия тестовых и не-тестовых платежей.

3) ResultURL не срабатывает при проведении тестовых платежей

В настройках магазина в личном кабинете Робокассы указывается три адреса: SuccessURLFailURL и ResultURL. Первая страница сообщает покупателю об успешной оплате, вторая — наоброт, об отменённой/неудачной. Скрипт по третьему адресу «без палева» обменивается с Робокассой данными до того, как покупатель попадёт на SuccessURL или FailURL.

Принцип прост. Твоя страница оплаты отсылает пользователя на Робокассу, а вместе с ним — параметры платежа (стоимость, номер заказа и пр.). Когда покупатель нажмёт в Робокассе пимпу, а-ля, «Оплатить», система отсылает твоему сайту параметры платежа и некоторую контрольную сумму, хэш. У себя ты должен сгенерировать точно такой же хэш, и, если они совпадут, то даёшь робокассе знать, что «я пометил заказ оплаченным».

Платёжная система общается с твоим сайтом только при проведении настоящего платежа. Когда же проходит тестовый, твой ResultURL не получает ничего (потому что ему, очевидно, ничего и не передаётся).

Фишка в том, что сам платёж-то (настоящий) в любом случае проходит, и деньги уйдут куда надо. Но на твоём сайте могут возникнуть проблемы такого характера, когда из-за несовпавших этих двух хэшей товар не отмечается оплаченным, например. Это раз.

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

Соответственно, чтобы проверить какой ответ генерирует ResultURL:
добавь в него, например, код записи этого ответа в файл на сервере;
• воспользоваться инструментами для отсылки POST/GET-параметров (спец. сервисы, расширения для браузеров и пр.).

Тогда ты сам отсылаешь на свой ResultURL нужные параметры, скрипт отрабатывает (будто эти данные пришли от Робокассы) и пишет в файлик тот ответ, который будет отсылать обратно. Ты его проверяешь и (не)удовлетворяешься результатом.
Можно придумать и другой, свой вариант.

Теоретически, ты можешь помечать заказ оплаченным даже в SuccessURL. И тогда у тебя это будет работать. Но Робокасса с этого адреса ничего не принимает, а значит, ничего не будет знать об успешности заказа на твоём сайте. Как следствие, опять же, непонятки с оплатой.

Именно для этого должна быть страница ResultURL, который обменивается инфой с платёжной системой и делает необходимые правки на твоей стороне. Так что будь аккуратен.

4) Не забывай, что ты должен обработать три хэша

Первый. Формирование строки для отправки в робокассу. Если нет дополнительных параметров shp_*, то строка пишется так:
MerchantLogin:OutSum:InvId:Пароль#1
Если InvId не передаётся, то вместо него, между OutSum и Пароль#1, ставится два двоеточия ::

Второй. Приходит от робокассы на ResulURL. Ты должен сформировать собственный хэш по шаблону:
OutSum:InvId:Пароль#2
Эти два хэша должны совпасть. Если это так, то робокасса получает со страницы ResultURL строку OKInvId.

Собственно, третий хэш. Он на SuccessURL приходит, как и в других случаях, параметром SignatureValue. На SuccessURL тебе предлагают создать свой хэш по такому шаблону:
OutSum:InvId:Пароль#1

Заметил? От прошлого он отличается только паролем: здесь не второй, а первый. Соответственно, контрольные суммы получаются разные.

Итого: на странице оплаты ты генерируешь первый хэш и отдаёшь робокассе с остальными параметрами. На ResultURL и SuccessURL ты должен получить от п/с ещё два разных хэша, сгенерировать свои по разным шаблонам и свериться.

Учти, что в зависимости от твоих необходимостей, ты, помимо основных обязательных, передаёшь разные другие параметры, и некоторые из них должны включаться в расчёт хэшей. Советую внимательно прочесть весь этот раздел, и неоднократно. С первого раза не поймёшь.


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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *