Нигде, кроме документации Робокассы, не написано что и как делать. И хоть она доступна всем, а авторы над ней неплохо постарались, всё же разобраться с ней может оказаться процессом утомительным: оказывается не всё так очевидно,
Но это если оглядываться на все те рецепты, которые даются в интернете видеороликами и в статьях. Она устарела настолько, насколько перестала быть полезной. А свежего никто ничего не пишет, разве что в обсуждениях на форумах самого битрикса, но там-то люди уже прошаренные, знают что куда… Запутаться — как нефиг делать. Даже мануал от разработчиков самого битрикса не даёт исчерпывающей информации по теме.
Таким образом, в настоящей заметке я постараюсь исправить эту ужасную ситуацию. И если уж интегрировать Робокассу в Битрикс-магазин, то только согласно официальной документации Робокассы при наличии должого внимания. И вот этой момей заметке 🙂
Когда я начал разбираться в этом вопросе, сам невнимательно читал документацию. только с пинка коллеги понял что к чему. Пост не является дословным цитированием документации, это просто те шишки, которые я набил в ходе работы над проектом. Возможно, кто-то уже знает описанное ниже, а что-то и вовсе очевидно, тогда прошу молча проследовать мимо. На абсолютную же истинность я не претендую, принимаю конструктивную критику, дополнения и поправки.
Остальным — велкам под кат. Здравая критика приветствуется.
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 не срабатывает при проведении тестовых платежей
В настройках магазина в личном кабинете Робокассы указывается три адреса: SuccessURL, FailURL и 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 ты должен получить от п/с ещё два разных хэша, сгенерировать свои по разным шаблонам и свериться.
Учти, что в зависимости от твоих необходимостей, ты, помимо основных обязательных, передаёшь разные другие параметры, и некоторые из них должны включаться в расчёт хэшей. Советую внимательно прочесть весь этот раздел, и неоднократно. С первого раза не поймёшь.
Сейчас проект, с которым я работаю, в части оплаты робокассы находится в подвешенном состоянии: магазин пока не активирован в самой Робокассе, да и сама тестовая оплата проходит неполноценно. Приходится костылизировать часть какие-то процессы, которые должны, в приципе, происходить автоматически.