Как перехватить значения формы перед отправкой?
в настоящее время у меня есть большая форма, которая отправляется нашему авторизатору платежей (сделано это действием="paymentautherizerURL"), однако я не получаю всю необходимую информацию от них, когда я иду хранить транзакцию в моей БД.
Мне либо нужно перехватить данные формы перед отправкой, чтобы я мог сохранить их в сеансе (мы используем PHP / jQuery), либо я также попытался отправить его в промежуточный скриптлет, который захватывает необходимую мне информацию, а затем с помощью jQuery это $.post () для повторного построения и отправки данных авторизатору.
<?php
session_start();
$post = $_POST;
//gets all of the information that beanstream does not return to approved.php, but is still required to make
//a legitimate database entry. gets from the POST and stores in the session array for approved.PHP to access
$_SESSION['approvedArray']['billAddress'] = $_POST['ordAddress1'];
$_SESSION['approvedArray']['billProvince'] = $_POST['ordProvince'];
$_SESSION['approvedArray']['billCountry'] = $_POST['ordCountry'];
$_SESSION['approvedArray']['billPostalCode'] = $_POST['ordPostalCode'];
$_SESSION['approvedArray']['billCity'] = $_POST['ordCity'];
$_SESSION['approvedArray']['shipAddress'] = $_POST['shipAddress1'];
$_SESSION['approvedArray']['shipPostal'] = $_POST['shipPostalCode'];
$_SESSION['approvedArray']['shipCity'] = $_POST['shipCity'];
$_SESSION['approvedArray']['shipProvince'] = $_POST['shipProvince'];
$_SESSION['approvedArray']['shipCountry'] = $_POST['shipCountry'];
session_write_close();
//the javascript below will send what is required to beanstream as though it were sent from the form
<script type='text/javascript'>
$.post(, {
<?php
//rebuild the POST such that "name: value, " except the last name/value will not be followed by a comma
$keys = array_keys($_POST);
for($i = 0; $i < count($_POST); $i++) {
$currentKey = $keys[$i];
$currentPost = $_POST[i];
echo $currentKey . ": " . $currentPost;
if ($i < (count($_POST) - 1)) {
echo ", ";
}
}
?>
});
</script>
?>
обычно авторизатор транзакций перенаправляет пользователя на одну из 3 страниц (одобрено, отклонено, ошибка), и наш веб-сайт выполняет работу оттуда. однако в настоящее время он застрял в эта страница, которая заставляет меня думать, что она не отправляется должным образом.
Я открыт для всех форм критики, подходов и идей. большое спасибо заранее, и если любая другая информация необходима, пожалуйста, дайте мне знать!
5 ответов
Как насчет изменения тега формы, чтобы включить атрибут onSubmit:
<form action="notmal_action.whatever" onSubmit="return save_data_function()">
где функция save_data_function считывает значения из формы и отправляет их в скрипт на вашем сервере для сохранения в базе данных (или где-либо). Я использую скрытые iframes, чтобы сделать этот запрос скрытым от пользователя...
<script>
function save_data_function() {
$('#iframe_id').attr('src', 'data_saving_script.extension?data_1=' + $('form_data_1').val().serialize() + '&data_2=' + $('form_data_2').val().serialize());
}
</script>
вы можете установить тайм-аут, если данные не передаются достаточно быстро в " data_saving_script.файл расширений.
поскольку ваш существующий пример уже имеет зависимость от javascript, вы можете перейти к сохранению данных с помощью AJAX, а затем использовать традиционную отправку для выполнения "реальной" записи в платежный шлюз.
Если в форме есть id="foo"
, вы могли бы сделать что-то вроде этого:
<script>
$('form#foo').submit(function(event, doRealSubmit) {
// this executes on the second pass
if (doRealSubmit) {
// returning true gets browser to do a real submit
return true;
}
// this executes on the first pass
$.ajax({
url: '/url/to/post/to/your/server',
type: 'POST',
// this serializes the form data in "application/x-www-form-urlencoded"
data: $(this).serialize(),
success: function(data) {
// trigger 'submit' event again, but pass the doRealSubmit flag
$('form#foo').trigger('submit', [true]);
}
});
// returning false prevents browser from processing the real submit
return false;
});
</script>
вместо action="paymentautherizerURL"
вы должны отправить его на собственную страницу:
<form action='process.php' method='post'>
сейчас в процессе.РНР вы можете работать с данными (проверка, фильтрация ..)
и когда вы закончите вы можете отправить данные в нужное место, используя cURL
С помощью curl вы можете отправлять данные post и ждать ответа, чтобы решить, какую страницу показать.
нет необходимости помещать данные в сеансы, при отправке формы, называемой функцией validate, в которой выполняется вся проверка, а затем отправлять данные в процесс ur.php использует ajex, тогда он сохранится на этой странице...
Не храните данные в сеансе - это неправильное место для хранения транзакционных данных.
опубликуйте материал в скрипте, который вы размещаете, напишите только материал, который вам нужно сохранить в своей базе данных, создайте ссылку на заказ для него,
затем....
Если вы используете платежный процессор (например, Paypal)
перенаправление на второй скрипт, передающий ссылку заказа в URL. На втором скрипте ставим форму со скрытыми полями cotaining только реквизиты вашей платежной системы и некоторые JavaScript для submiot форме автоматически и сообщение для пользователя как подключении к PayPal...'
Если вы используете торговые услуги для авторизации платежа
перед тем, как сгенерировать вывод из сценария посадки, отправьте данные в ваш авторизатор, используя (например) завиток и проанализируйте ответ, запишите ответ против порядка в базе данных и выведите подходящее сообщение клиенту через веб-страницу