Получение данных из php в js
Добрый вечер.
Имеется форма заказа товара с подключением оплаты с помощью робокассы. В данной форме скрытыми инпутами передаются ряд обязательных значений. Как мне получить с помощью javascript значение итоговой стоимости товара и передать ее робокассе? В форме я это значение заменил знаками вопросов. Сумма должна считаться скриптом простым умнодением константы на количество. Ну и конечно же по мере выбора опций эта сумма должна динамически меняться в поле с id=total-price. <div id="total-price"></div> <form action="http://test.robokassa.ru/Index.aspx" method="get"> <input type="hidden" name="MrchLogin" value="..."> <input type="hidden" name="OutSum" value="?????"> <input type="hidden" name="InvId" value="0"> <input type="hidden" name="Desc" value="desc"> <input type="hidden" name="IncCurrLabel" value="WMRM"> <input type="hidden" name="Culture" value="ru"> <input type="hidden" name="Encoding" value="utf-8"> <input type="hidden" name="shpa" value="1"> <input type="hidden" name="shpb" value="test@test.ru"> <input type="hidden" name="SignatureValue" value="15758b3447ed1936cdbe5a6d4357584e"> <input type="text" name="quantity" value="1" size="5"><input type="submit" value="Заказать"><br> <input type="checkbox" name="sborka"><span> Сборка специалистом интернет-магазина</span><br> <p>Доставка</p> <input type="radio" name="dostavka"><span> г. Нижний Новгород (нижняя часть города) в течение 5 дней</span><br> <input type="radio" name="dostavka"><span> г. Нижний Новгород (верхняя часть города) в течение 5 дней</span><br> <input type="radio" name="dostavka"><span> г. Нижний Новгород (верхняя и нижняя часть города) на следующий день после оформления</span><br> <input type="radio" name="dostavka"><span> Нижегородская область до 30 км. в течение 5 дней</span><br> <input type="radio" name="dostavka"><span> За пределеами Н.Новгорода от 30 км. (на круг) 12 руб./км 14 руб./км</span><br> <input type="radio" name="dostavka"><span> Транспортной компанией</span><br> <p>Подъем в квартиру</p> <input type="radio" name="podyem"><span> Подъем стола-транформера в квартиру 100 руб./этаж на <input type="text" name="etazh" size="3"></span><br> <input type="radio" name="podyem"><span> Подъем стола-транформера на лифте<br> </form> |
Batyabest,
<div id="total-price"></div> <form action="http://test.robokassa.ru/Index.aspx" method="get" id="form_id"> <input type="hidden" name="MrchLogin" value="..."> <input type="hidden" name="OutSum" value="?????"> <input type="hidden" name="InvId" value="0"> <input type="hidden" name="Desc" value="desc"> <input type="hidden" name="IncCurrLabel" value="WMRM"> <input type="hidden" name="Culture" value="ru"> <input type="hidden" name="Encoding" value="utf-8"> <input type="hidden" name="shpa" value="1"> <input type="hidden" name="shpb" value="test@test.ru"> <input type="hidden" name="SignatureValue" value="15758b3447ed1936cdbe5a6d4357584e"> <input type="text" name="quantity" value="1" size="5"><input type="submit" value="Заказать"><br> <input type="checkbox" name="sborka"><span> Сборка специалистом интернет-магазина</span><br> <p>Доставка</p> <input type="radio" name="dostavka"><span> г. Нижний Новгород (нижняя часть города) в течение 5 дней</span><br> <input type="radio" name="dostavka"><span> г. Нижний Новгород (верхняя часть города) в течение 5 дней</span><br> <input type="radio" name="dostavka"><span> г. Нижний Новгород (верхняя и нижняя часть города) на следующий день после оформления</span><br> <input type="radio" name="dostavka"><span> Нижегородская область до 30 км. в течение 5 дней</span><br> <input type="radio" name="dostavka"><span> За пределеами Н.Новгорода от 30 км. (на круг) 12 руб./км 14 руб./км</span><br> <input type="radio" name="dostavka"><span> Транспортной компанией</span><br> <p>Подъем в квартиру</p> <input type="radio" name="podyem"><span> Подъем стола-транформера в квартиру 100 руб./этаж на <input type="text" name="etazh" size="3"></span><br> <input type="radio" name="podyem"><span> Подъем стола-транформера на лифте<br> </form> <script> // for example var form = document.getElementById("form_id"); alert(form.children[1].value); </script> по клику на кнопке submit данные передадутся скрипту get-методом... |
А как скрипт передаст значение общей стоимости в робокассу?
оно передается в поле OutSum. Я заменил его пока вопросами потому что не знаю как оно должно передаваться дальше. |
Цитата:
по клику на кнопке submit (или при вызове метода формы .submit()) форма отправится на сервер (в вашем случае в скрипт робокассы) методом get в файле робокассы вы должны отлавливать все передаваемые туда значения... вроде в ASP передаваемые значения обрабатываются как Код:
<%= Request.QueryString("FirstName") %> |
Я не вижу разницы между тем что я написал в первом посте и вашим кодом.
Не могли бы мне для примера пару полей описать как положено. P.S. и кнопки submit я не вижу. И как обрабатьвать поля и записывать новые значения? |
Цитата:
var form = document.getElementById("form_id"); var val1 = parseInt(form.children[2]), val2 = parsetInt(form.children[7]); form.children[1] = val1 * val2; // записываем в поле OutSum новое значение = перемножение значений InvId и shpa form.submit(); // вызываем метод submit() нашей формы |
form.children- Мы получаем значения дочерних элементов? Нумерация начинается с 0? А если количество берется из <input type="text" name="quantity" value="1" size="5">в зависимости от того, что ввел пользователь. Как тогда будет выглядеть код? |
Цитата:
alert(document.getElementById("form_id").children[10].value); c children будет работать только при статическом кол-ве элементов формы, лучше для каждого (в первую очередь необходимого) элемента ввести id и получать данные с помощью метода getElementById("id")... если нужна инфа о radio-переключателях, то по ним нужно пробегаться циклом как то так for (i=0; i < document.getElementsByName("dostavka").length; i++) { alert(document.getElementsByName("dostavka")[i].value); // на данный момент у вас нету атрибутов value у radio-переключателей } Нумерация с 0. |
Нужно чтобы число, которое пользователь ввел в поле
<input type="text" name="quantity" value="1" size="5">передавалось в скрипт для перемножения на некую цифру (пусть будет 5000) и уже полученное число передавалось в качестве значения <input type="hidden" name="OutSum" value="">в робокассу. Что касается радио, достаточно чтобы то что выбрал пользователь приходило на почту админу. |
Batyabest, меняем ваш
<input type="submit" value="Заказать"> на <input type="button" value="Заказать" onClick="func()"> function func() { document.getElementById("form_id").children[1].value = parseInt(document.getElementById("form_id").children[10].value) * 5000; document.getElementById("form_id").submit(); } |
Спасибо, добрый человек.
Но вылезла другая проблема. <input type="hidden" name="SignatureValue" value="15758b3447ed1936cdbe5a6d4357584e"> Значение этого поля должно также расчитываться динамически исходя из значений других полей. Формула расчета такова: $crc = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:shpa=$shpa:shpb=$shpb"); Так как мы имеем здесь меняющийся параметр $out_summ в запвисимости от количества, то и значение Signature меняется. Я думаю строка должна быть записана в виде: <input type="hidden" name="SignatureValue" value="<?= $crc ?>"> Тогда как мне передать в php расчет переменной $crc; значение $out_summ, которое получается в JS? |
Цитата:
window.location.href = 'page.php?data'+encodeURIComponent('your data'); или же без перезагрузки страницы используя AJAX и jQuery <script src="http://yandex.st/jquery/1.5.0/jquery.min.js" type="text/javascript"></script> <script type="text/javascript"> var mes = 'your data'; $.get('page.php', {message:mes}, function(data) { // в data будет хранится ответ сервера; который вы можете снова подставить в необходимые значения полей и по submit() отправить в ASP }); </script> |
На данный момент я сделал так:
На странице товара имеется такой код: <div id="total-price"></div> <form action="/stol/pay/pay.php" method="post" id="form_id"> <input type="hidden" name="MrchLogin" value="xxx"> <input type="hidden" name="OutSum" value=""> <input type="hidden" name="InvId" value="0"> <input type="hidden" name="Desc" value="Стол-трансформер"> <input type="hidden" name="IncCurrLabel" value="WMRM"> <input type="hidden" name="Culture" value="ru"> <input type="hidden" name="Encoding" value="utf-8"> <input type="hidden" name="SignatureValue" value=""> <input type="text" name="quantity" value="" size="5"><input type="button" value="Заказать" onClick="func()"><br> <input type="checkbox" name="sborka"><span> Сборка специалистом интернет-магазина</span><br> <p>Доставка</p> <input type="radio" name="dostavka" value="г. Нижний Новгород (нижняя часть города) в течение 5 дней"><span> г. Нижний Новгород (нижняя часть города) в течение 5 дней</span><br> <input type="radio" name="dostavka" value="г. Нижний Новгород (верхняя часть города) в течение 5 дней"><span> г. Нижний Новгород (верхняя часть города) в течение 5 дней</span><br> <input type="radio" name="dostavka" value="г. Нижний Новгород (верхняя и нижняя часть города) на следующий день после оформления"><span> г. Нижний Новгород (верхняя и нижняя часть города) на следующий день после оформления</span><br> <input type="radio" name="dostavka" value="Нижегородская область до 30 км. в течение 5 дней"><span> Нижегородская область до 30 км. в течение 5 дней</span><br> <input type="radio" name="dostavka" value="За пределами Н.Новгорода от 30 км. (на круг) 12 руб./км 14 руб./км"><span> За пределами Н.Новгорода от 30 км. (на круг) 12 руб./км 14 руб./км</span><br> <input type="radio" name="dostavka" value="Транспортной компанией"><span> Транспортной компанией</span><br> <p>Подъем в квартиру</p> <input type="radio" name="podyem"><span> Подъем стола-транформера в квартиру 100 руб./этаж на <input type="text" name="etazh" size="3"></span><br> <input type="radio" name="podyem"><span> Подъем стола-транформера на лифте<br> </form> function func() { document.getElementById("form_id").children[1].value = parseInt(document.getElementById("form_id").children[8].value) * 5000; document.getElementById("form_id").submit(); } По нажатии на кнопку "Заказать" все это дело перенаправляется на страницу /stol/pay/pay.php с уже просчитанными суммами. Код этой страницы такой: <? // 2. // Оплата заданной суммы с выбором валюты на сайте ROBOKASSA // Payment of the set sum with a choice of currency on site ROBOKASSA $mrh_login = "xxx"; $mrh_pass1 = "xxx1"; $inv_id = $_POST['InvId']; $out_summ = $_POST['OutSum']; $inv_desc = $_POST['Desc']; // предлагаемая валюта платежа // default payment e-currency $in_curr = ""; // язык // language $culture = "ru"; // формирование подписи // generate signature $crc = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1"); // echo $mrh_login, $out_summ, $inv_id, $mrh_pass1; // форма оплаты товара // payment form print "<html>". "<form action='http://test.robokassa.ru/Index.aspx' method=get>". "<input type=hidden name=MrchLogin value=$mrh_login>". "<input type=hidden name=OutSum value=$out_summ>". "<input type=hidden name=InvId value=$inv_id>". "<input type=hidden name=Desc value='$inv_desc'>". "<input type=hidden name=SignatureValue value=$crc>". "<input type=hidden name=IncCurrLabel value=$in_curr>". "<input type=hidden name=Encoding value=utf-8>". "<input type=hidden name=Culture value=$culture>". "<input type=submit value='Продолжить оплату'>". "</form></html>"; ?> Суть вопроса. Мне нужно чтобы: 1. По нажатии первой кнопки (Заказать) открывалась страница pay.php но в модальном окне, а в ней еще были поля для заполнения Имени, телефона и адреса. 2. По нажатии кнопки "Продолжить оплату" (файл pay.php) происходило 2 действия - отправка письма на почту админу с указанием всех данных (Имени, телефона, адреса, самое главное параметров покупки - количества товара и стоимости покупки.) и перенаправление на страницу робокассы (это работает). 3. Куда лучше вынести радио батоны с параметрами доставки? Я думаю они будут уместнее во второй форме (файл pay.php) Они тоже должны уходить на почту. |
На данный момент имею вот такой код.
<? // Оплата заданной суммы с выбором валюты на сайте ROBOKASSA // Payment of the set sum with a choice of currency on site ROBOKASSA $mrh_login = "xxx; $mrh_pass1 = "xxx1"; $inv_id = $_POST['InvId']; $out_summ = $_POST['OutSum']; $inv_desc = $_POST['Desc']; // предлагаемая валюта платежа // default payment e-currency $in_curr = ""; // язык // language $culture = "ru"; // формирование подписи // generate signature $crc = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1"); // echo $mrh_login, $out_summ, $inv_id, $mrh_pass1; // форма оплаты товара // payment form print "<html>". "<form action='http://test.robokassa.ru/Index.aspx' method=get>". "<input type=hidden name=MrchLogin value=$mrh_login>". "<input type=hidden name=OutSum value=$out_summ>". "<input type=hidden name=InvId value=$inv_id>". "<input type=hidden name=Desc value='$inv_desc'>". "<input type=hidden name=SignatureValue value=$crc>". "<input type=hidden name=IncCurrLabel value=$in_curr>". "<input type=hidden name=Encoding value=utf-8>". "<input type=hidden name=Culture value=$culture>". "Ваше имя <input type=text name=nick><br>". "Ваш телефон <input type=text name=phone><br>". "Адрес доставки <input type=text name=adress><br>". "<input type=checkbox name=sborka><span> Сборка специалистом интернет-магазина</span><br>". "<p>Доставка</p>". "<input type=radio name=dostavka value=г. Нижний Новгород (нижняя часть города) в течение 5 дней><span> г. Нижний Новгород (нижняя часть города) в течение 5 дней</span><br>". "<input type=radio name=dostavka value=г. Нижний Новгород (верхняя часть города) в течение 5 дней><span> г. Нижний Новгород (верхняя часть города) в течение 5 дней</span><br>". "<input type=radio name=dostavka value=г. Нижний Новгород (верхняя и нижняя часть города) на следующий день после оформления><span> г. Нижний Новгород (верхняя и нижняя часть города) на следующий день после оформления</span><br>". "<input type=radio name=dostavka value=Нижегородская область до 30 км. в течение 5 дней><span> Нижегородская область до 30 км. в течение 5 дней</span><br>". "<input type=radio name=dostavka value=За пределами Н.Новгорода от 30 км. (на круг) 12 руб./км 14 руб./км><span> За пределами Н.Новгорода от 30 км. (на круг) 12 руб./км 14 руб./км</span><br>". "<input type=radio name=dostavka value=Транспортной компанией><span> Транспортной компанией</span><br>". "<p>Подъем в квартиру</p>". "<input type=radio name=podyem>". "<span> Подъем стола-транформера в квартиру 100 руб./этаж на </span>". "<input type=text name=etazh size=3><br>". "<input type=radio name=podyem><span> Подъем стола-транформера на лифте<br>". "<input type=submit value='Продолжить оплату'>". "</form></html>"; ?> Как сделать, чтобы при нажатии на кнопку <input type=submit value='Продолжить оплату'>одновременно с переходом на страницу робокассы отправлялось письмо со значениями из формы? |
Часовой пояс GMT +3, время: 08:21. |