Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Имитация отправки формы без Curl
Форумы портала PHP.SU » » Вопросы новичков » Имитация отправки формы без Curl

Страниц (1): [1]
 

1. NeuroZ - 16 Ноября, 2016 - 14:06:25 - перейти к сообщению
Всем привет.
Хочу сделать сайт более "юзерфрендли".
Есть корзина с товарами и кнопка "оформить заказ".
При клике на нее нужно записать данные пользователя и заказа со статусом "не оплачен" в БД. После чего сразу перекинуть пользователя на страницу оплаты (сторонний сервис - например робокасса).
Прикол в том, чтобы отправить данные в робокассу нужно засабмитить форму (ведущую на https робокассы) с данными заказа (номер, сумма, логин и зашифрованная строка).

Классический вариант реализации:
1. Жмем "оформить заказ".
2. Бегаем по контроллеру, выполняя разные действия касательно записи заказа.
3. Возвращаемся на эту же страницу корзины, но вместо кнопки "оформить заказ", видим "подтвердить заказ", который сабмитит данные в робокассу.
4. Жмем на на "подтвердить заказ" и попадаем на страницу оплаты (уже на сайте робокассы)

Минус такой схемы - пользователю фактически надо дважды нажимать на "похожую" кнопку, т.е. выполнять 1 бесполезное действие с точки зрения юзабилити.

Я хочу избежать шага 3 и 4.
Понятное дело, если использовать обычный редирект, то эти данные можно запихнуть в GET. Но я хочу отправить через POST. Если использовать Curl - это не спасет, потому что в таком случае Curl пойдет на страницу защищенного соединения, а пользователь останется сидеть на нашем сайте.
Вопрос: как можно такое реализовать?
Как вариант "костыль" открывающий на секунду пустую страницу с скрытой формой, отправляющейся через JS. - но это меня категорически не устраивает и отталкивает в принципе.
2. caballero - 16 Ноября, 2016 - 14:20:02 - перейти к сообщению
что мешает сразу отправить форму яваскриптом а не показываь кнопку подтвердить?
3. NeuroZ - 16 Ноября, 2016 - 14:40:00 - перейти к сообщению
caballero пишет:
что мешает сразу отправить форму яваскриптом а не показываь кнопку подтвердить?

Цитата:
Как вариант "костыль" открывающий на секунду пустую страницу с скрытой формой, отправляющейся через JS.

фактически то же самое, только вместо пустой страницы - страница корзины
4. caballero - 16 Ноября, 2016 - 17:06:45 - перейти к сообщению
никакой страницы - страница загрузится и сразу перейдет на робокассу
5. NeuroZ - 17 Ноября, 2016 - 08:30:15 - перейти к сообщению
caballero пишет:
страница загрузится и сразу перейдет

Это я называю костылем)
---> Зачем загружать данные, которые не нужны пользователю? (они нужны системе для работоспособности, но отнюдь не ему).

p.s. В общем все таки решил, что отправка GET-ом единственное оптимальное решение (через редирект на url+get).
p.p.s. Просто надеялся, что есть какие-то способы, реализующие необходимое поведения, без использования костылей, о которых я не знаю...
6. Prizma - 17 Ноября, 2016 - 12:15:40 - перейти к сообщению
NeuroZ пишет:
p.s. В общем все таки решил, что отправка GET-ом единственное оптимальное решение (через редирект на url+get).

caballero пишет:
что мешает сразу отправить форму яваскриптом а не показываь кнопку подтвердить?

NeuroZ пишет:
Это я называю костылем)

скорее здравым смыслом
7. NeuroZ - 17 Ноября, 2016 - 15:01:24 - перейти к сообщению
Prizma пишет:
скорее здравым смыслом

в чем тут здравый смысл?)
8. caballero - 18 Ноября, 2016 - 00:24:27 - перейти к сообщению
Цитата:
в чем тут здравый смысл?)

например в простоте реализации.
Особенно если учесть что на многие платежные системы никаким курлом не получится. Только отправка формы со страницы.
9. Prizma - 18 Ноября, 2016 - 01:13:39 - перейти к сообщению
caballero пишет:
что мешает сразу отправить форму яваскриптом а не показываь кнопку подтвердить?
NeuroZ пишет:
Это я называю костылем)
NeuroZ пишет:
в чем тут здравый смысл?)

Здравый смысл не заставлять пользователя 2 раза нажимать одну кнопку дважды подтверждая одно и тоже... ты говорил про то, что изменишь на ней название, а не проще просто нажать на неё вместо того, чтобы придумывать название на которое пользователь точно кликнет?
10. NeuroZ - 18 Ноября, 2016 - 08:53:56 - перейти к сообщению
caballero пишет:
Особенно если учесть что на многие платежные системы никаким курлом не получится.

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

Prizma пишет:
Здравый смысл не заставлять пользователя 2 раза нажимать одну кнопку дважды подтверждая одно и тоже

Согласен
Prizma пишет:
ты говорил про то, что изменишь на ней название

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

"Нажать" - это отрендерить всю страницу (избыточность). Написать js код, реализующий клик (избыточность). И только потом перенаправить пользователя.
Я уже перерос этот этап программирования, где мог жертвовать подобными вещами ради достижения поставленной цели. Всё таки везде где есть избыточность - должна быть оптимизация. В данном случае это получается костыль.

Поэтому, поразмыслив, я всё же решился на переадресацию пользователя на указанный url с пакетом данных, передаваемых в гет строке.
*Сначала смутило то, что мне придется передавать номер заказа и сумму в гет (которые без труда можно подменить), но потом вспомнил, что проверку на валидность данных все равно пользователь не пройдет, т.к. еще передается md5 хэш, который шифруется, в том числе, при конкатенации этих параметров и секретного пароля, который как раз не передается. Соответственно на проверке валидности сравниваются различные хэши и только если они соответствуют остальным переданным параметрам - платеж проходит.
Так что переадресацию через редирек url+get считаю самым разумным подходом.

 

Powered by ExBB FM 1.0 RC1