Satellence
@Satellence

Выполнить запрос перед отправкой формы?

Здравствуйте.
На сайте есть форма для оформления заказа, отправляющая пользователя вместе с POST данными формы на сайт платежной системы для дальнейшего выбора метода оплаты.
Столкнулся с проблемой, как до отправки формы сначала создать заказ в своей базе.
Пробовал отменять действие формы по умолчанию, делать ajax запрос, а при получении утвердительного результата отправлять форму уже JS-ом. Но в этом случае браузер блокирует работу всплывающих окон.
Какие идеи реализации можете посоветовать на этот счет. При этом хотелось бы избежать необходимости пользователю дважды кликать на кнопку.
  • Вопрос задан
  • 224 просмотра
Пригласить эксперта
Ответы на вопрос 3
@dmitryKovalskiy
программист средней руки
1 шаг - Создать заказ, вывести полную информацию по нему и предложить оплатить онлайн.
2 шаг - отправить в платежный шлюз оплачивать..
В 9 из 10 платежных шлюзах в API требуется номер заказа, который является частью сообщения для формирования подписи и одним из параметров запроса. Когда человек тычет в кнопку "Оплатить" и вы делаете переход в платежный шлюз - эти данные УЖЕ должны существовать. Варианты? При нажатии на "Оплатить" создать заказ, сделать переход на пустую страницу, которая содержит только форму обращения к API платежного шлюза, и к этой странице скриптик, которая по готовности страницы тутже делает сабмит формы.
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега HTML
Crazy on performance...
Скрытый iframe, таргет формы указывает на него, форма отправляет данные на Ваш сервер, Ваш сервер в ответе присылает заполненую форму для платежной системы, у которой target="_top" по событию DOMready в iframe делаем сабмит формы

Можно и без iframe, просто скрытая форма, отправляем данные по ajax на свой сервер, по ответу заполняем скрытую форму и сабмитим
Ответ написан
Комментировать
@n1ger
html+css
Когда человек выбирает онлайн форму оплаты, он жмет кнопку, которая POST отправляет данные на обработчик, этот обработчик сохраняет заказ в базу и мы забираем из базы номер заказа.
$_sql = "INSERT INTO $table_orders SET
      user_id           = '$s_user_id',
      order_items       = '".addslashes(serialize($s_cart))."',
      sessionid         = '".session_id()."',
      order_sum         = '".$s_cart['sum']."',
      order_status      = 'new',
      user_name         = '$user_name',
      comment  = '$comment',
      payment_type      = '$payway',
      d_add             = NOW(),
      user_phone        = '$user_phone', $_sql_common";
        $order_id = exec_sql($_sql);

Подключаете платежный шлюз, если не подключен, формируете форму, по документации платежного шлюза, где 'order_id' => $order_id,
и отсылаете форму для оплаты в шлюз
$(document).ready(function () {
                    $('#form_payway').submit();
})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы