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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Имитация отправки формы без Curl

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: не путать с имитацией нажатия кнопки "отправить"
NeuroZ
Отправлено: 16 Ноября, 2016 - 14:06:25
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




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

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

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

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

(Отредактировано автором: 16 Ноября, 2016 - 14:07:45)

 
 Top
caballero
Отправлено: 16 Ноября, 2016 - 14:20:02
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




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


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
NeuroZ
Отправлено: 16 Ноября, 2016 - 14:40:00
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




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

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

фактически то же самое, только вместо пустой страницы - страница корзины
 
 Top
caballero
Отправлено: 16 Ноября, 2016 - 17:06:45
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




никакой страницы - страница загрузится и сразу перейдет на робокассу


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
NeuroZ
Отправлено: 17 Ноября, 2016 - 08:30:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




caballero пишет:
страница загрузится и сразу перейдет

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

p.s. В общем все таки решил, что отправка GET-ом единственное оптимальное решение (через редирект на url+get).
p.p.s. Просто надеялся, что есть какие-то способы, реализующие необходимое поведения, без использования костылей, о которых я не знаю...

(Отредактировано автором: 17 Ноября, 2016 - 08:31:29)

 
 Top
Prizma
Отправлено: 17 Ноября, 2016 - 12:15:40
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




NeuroZ пишет:
p.s. В общем все таки решил, что отправка GET-ом единственное оптимальное решение (через редирект на url+get).

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

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

скорее здравым смыслом
 
My status
 Top
NeuroZ
Отправлено: 17 Ноября, 2016 - 15:01:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




Prizma пишет:
скорее здравым смыслом

в чем тут здравый смысл?)
 
 Top
caballero
Отправлено: 18 Ноября, 2016 - 00:24:27
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
в чем тут здравый смысл?)

например в простоте реализации.
Особенно если учесть что на многие платежные системы никаким курлом не получится. Только отправка формы со страницы.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Prizma
Отправлено: 18 Ноября, 2016 - 01:13:39
Post Id



Посетитель


Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012  
Откуда: Санкт-Петербург


Помог: 5 раз(а)




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

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



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




caballero пишет:
Особенно если учесть что на многие платежные системы никаким курлом не получится.

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

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

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

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

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

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


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB