Столкнулся с проблемой в модуле Liqpay. Там используется 1-й вариант - ссылка передается в форме. Точнее две ссылке. result_url - страница на которую вернется клиент и server_url - адрес куда посылает ответ сервер. Так указано в API документации к Liq&Buy 1.2.
Так вот, в xml форме server_url был указан как обращение к функции callback() в контроллере liqpay ( $this->url->link('payment/liqpay/callback', '', 'SSL') ).
В этой функции производится проверка подписей мерчанта по заданным правилам, и в случае совпадения вызывается функция confirm из модели checkout/order - создается заказ со статусом указанным в настройках модуля Liqpay после успешной оплаты.
А в result_url была указана страница $this->url->link('checkout/success', '', 'SSL').
В итоге что получалось - создавался заказ с нулевым статусом (по-умолчанию). Тыцаешь на кнопку вернутся в магазин после оплаты ( к слову, создание счета для оплаты в терминале - pay_way - delayed) - высвечивается уведомление, мол ваш заказ № такой-то оформлен, можете смотреть в личном кабинете, ссылка, все дела. Но реально статус заказа не изменялся. Т.е. функция callback вообще не срабатывала. Пробовал убирать проверку сигнатуры, на случай каких-то ошибок - даже без проверки функция не обрабатывалась. Как вывод -то ли сервер не посылает этот запрос до РЕАЛЬНОЙ оплаты счета через терминал, либо я не знаю в чем причина. В итоге я вопрос решил тем что в result_url вписал ссылку не checkout/success, а payment/liqpay/callback и затем redirect на checkout/success - тогда всё стало обрабатываться корректно после нажатия на сайте LIQPAY кнопки "в магазин" после оформления счета для оплаты в терминале самообслуживания.
Конечно в процессе тестов обнаружил еще одну любопытную вещь - что при каждом обновлении страницы checkout либо возврате к предыдущим шагам для изменения способа оплаты, способа доставки либо даже написания комментария - КАЖДЫЙ раз создается новый заказ, а предыдущий будет "валяться" в базе данных как "утерянный". В итоге может оказываться огромнейшее количество дублей брошенных заказов, который клиент реально таки оформил, оплатил и вы его выполнили. А в базе у вас останутся эти самые дубли.
Т.е. клиент начал оформлять заказ под номером 54 к примеру, а потом или страницу обновил или просто ему понравилось пощелкать "шаги оформления" кнопкой "изменить, ну вот прикольно, типа как скользит вверх-вниз - а в базу пишутся новые заказы и оформит он это всё уже под номером, скажем 70.
А вы будете выводить себе статистику потом ложную, что из 100 набранных корзин заказы сделало 2 человека, хотя реально может оказаться 20. (условно).
Эта проблема решилась очень легко с помощью бесплатного файла vqmod
ttp://forum.opencart.com/viewtopic.php?t=9192 - вот ссылка на описание данного бага, кому нужно, можете скачать, установить.