Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   редирект со страницы js (захватив данные) на страницу php c приемом туда данные (https://javascript.ru/forum/misc/77601-redirekt-so-stranicy-js-zakhvativ-dannye-na-stranicu-php-c-priemom-tuda-dannye.html)

jobananada 25.05.2019 12:30

редирект со страницы js (захватив данные) на страницу php c приемом туда данные
 
Ниже есть место для отправки Объекта на сервер
document.getElementById('oplata1').innerHTML = '<form><input type="button" id="oplata" name="buy" value="" onClick="location.href=\'liqpay/liqpay.php\'"></form>';
					
			document.getElementById('oplata1').onclick = function() {
				let massiv = Object.keys(cart);
				let massiv1 = Object.values(cart)
				let obshiyMassive = [];
				let x;
				let y;
				let d = 0;
				let summarnoe = [];
				for(let z = 0; massiv.length; z++){
					x = massiv[z];
					y = massiv1[z];
					if(z == massiv.length)break
					summarnoe.push(y*data[x]['gsx$cost']['$t']);
					d += y*data[x]['gsx$cost']['$t'];
					obshiyMassive.push("Название: "+[data[x]['gsx$name']['$t'],"Код: "+data[x]['gsx$articul']['$t'],"Цена: "+data[x]['gsx$cost']['$t']+"гр","Колличество: "+y+"шт","Сумма: "+y*data[x]['gsx$cost']['$t']+"гр"]+".");
				}
				obshiyMassive.push("Общая сумма заказа: "+[d]+"гр");
				
				if(obshiyMassive){

		  тут написать код отправки объекта (obshiyMassive) на файл
                  liqpay/liqpqy.php и там принять и получить данные с объекта
				}
			}

Malleys 25.05.2019 16:09

А зачем вам изобретать кнопку со скриптом на отправку, когда это поведение по умолчанию у формы?

А зачем вам писать всё в одну длинную строку, когда существует строка-шаблон?

Вы можете называть переменные названиями на русском языке, если вы хотите писать на английском языке, то почему бы не заглянуть в словарь?

Вот вам новые слова, которые нужно выучить и выяснить, что они значат...
  • payment
  • invoice
  • list
  • array
  • total

Цитата:

Сообщение от jobananada
тут написать код отправки объекта (obshiyMassive) на файл
24
                  liqpay.liqpqy. php и там принять и получить данные с объекта

fetch("liqpay.liqpqy.php", { method: "POST", body: "строка с вашими данными" });


Почему вам нужно отправлять форму таким способом, через скрипт? Может можно сразу сделать HTML-форму и она сама будет отправляться на сервер... а там только данные принять?

jobananada 25.05.2019 16:30

я пробовал у меня active неработает на index.php незнаю почему

jobananada 25.05.2019 16:30

приходится выносить в отдельный файл там работает

jobananada 25.05.2019 16:34

а объект передать в формате json?

jobananada 25.05.2019 16:45

Если подробнее:
http://korzinka.byethost9.com/ ccылка на сайт нажмите купить товар Дальше прейдите в корзину и там будет кнопка оплатить От формы я предею данные о пользователе и мне нужно объектом передать данные о товаре собранные в переменную obshiyMassive указаной в примере пробовал с помощью Аjax показало статуc 200 отправило но когда хотел принять данные в liqpay.php показало NULL

jobananada 25.05.2019 17:00

let json = JSON.stringify(obshiyMassive); 
				
				if(obshiyMassive){
					fetch("liqpay/liqpqy.php", { method: "POST", body: json });
                                }
					
отправил вашим способом

принимал на стороне liqpay.php так

<?php
$data = json_decode($_POST['body'], true);
var_dump($data);

?>				}
вардамп показал NULL

jobananada 25.05.2019 17:59

если еще точнее я принимаю эти данные в файл liqpay.php и далее подставляю в форму в этом же файле и клиент оплачивает выбранные товары нажимая тут же кнопку оплатить и переходит на систему liqpay видя то что он заказал (этот заказ и находится в этом принимаемом объекте переданом из js файла) - проблема только принять вот прошу разобратся неполучается

Malleys 25.05.2019 18:15

Цитата:

Сообщение от jobananada
проблема только принять вот прошу разобратся неполучается

Вот так можно принимать... (без проверок!)
<?php

$str = file_get_contents('php://input');
$data = json_decode($str);

header('Content-Type: application/json; charset=utf-8');
echo json_encode($data);

laimas 25.05.2019 18:36

Цитата:

Сообщение от jobananada
$_POST['body']

Такого ключа в запросе нет. Вот так был бы - { method: "POST", body: 'body='+json }

jobananada 25.05.2019 18:46

попробую спасибо за ответы

jobananada 25.05.2019 19:02

Это неработает снова NULL


fetch("liqpay/liqpqy.php", { method: "POST", body: 'body='+json });

<?php
$data = json_decode($_POST['body'], true);
var_dump($data);
echo "</br></br></br>";?>

jobananada 25.05.2019 19:06

На этот вариант выдало такую ошибку
<?php

$str = file_get_contents('php://input');
$data = json_decode($str);

header('Content-Type: application/json; charset=utf-8');
echo json_encode($data);
?>



Warning: Cannot modify header information - headers already sent by (output started at W:\home\korzinka\www\liqpay\liqpay.php:1) in W:\home\korzinka\www\liqpay\liqpay.php on line 6

Malleys 25.05.2019 19:08

Удалите тогда это!
Цитата:

Сообщение от jobananada
header('Content-Type: application/json; charset=utf-8');

Цитата:

Сообщение от jobananada
Warning: Cannot modify header information - headers already sent by (output started at W:\home\korzinka\www\liqpay\liqpay.php:1) in W:\home\korzinka\www\liqpay\liqpay.php on line 6

Очевидно же, что вам не надо пока заниматься разработкой! Вы даже не смогли это понять! Может отдохнуть от этого программирования немного! И может сначала выучить английский язык! А то вы так опозорились!



Цитата:

Сообщение от jobananada
проблема только принять вот прошу разобратся неполучается

Цитата:

Сообщение от jobananada
http://korzinka.byethost9.com/ ccылка на сайт

Так у вас куча проблем. Зачем вам показывать сразу всё? Ваш сайт скачивает 460МБ данных. Зачем? Показывайте только то, что влезает на экран!

По сути дела вы воруете деньги у посетителей!

Картинки можно уменьшить до необходимо размера! Зачем вам 1300 пикселей, если оно помещается в 150 пикселей? Даже если вы хотите для retina экранов, то можно уместиться в 300 пикселей!

Где прогресс-бар который указывает на то, сколько ещё ждать? Если вы скачиваете описание товаров размером 4МБ, то вы обязаны показывать прогресс-бар, поскольку иначе оно выглядит, как-будто бы больше ничего и не произойдёт! Вы должны показывать реальный прогресс загрузки!

Может вам стоит из JSON удалить всю лишнюю мета-информацию? Может вам стоит посмотреть в сторону CSV-формата? Или даже бинарный формат?

И я так подозреваю, что у большинства людей вкладка просто улетит и не вернётся!

Вместо того, чтобы дёргать всё время DOM, примерно так...
var data = [];

for(var i = 0; i < data.length; i++) {
    document.getElementById("app").innerHTML += "<section>" + data[i] + "</section>";
}


Лучше сначала составить, что надо, и только потом вставить в DOM...
var data = [], html = [];

for(var i = 0; i < data.length; i++) {
    html.push("<section>" + data[i] + "</section>");
}

document.getElementById("app").innerHTML = html.join("");

jobananada 25.05.2019 20:02

<?php

$str = file_get_contents('php://input');
$data = json_decode($str);

header('Content-Type: application/json; charset=utf-8');
echo json_encode($data);


Warning: Cannot modify header information - headers already sent by (output started at W:\home\korzinka\www\liqpay\liqpay.php:1) in W:\home\korzinka\www\liqpay\liqpay.php on line 6

jobananada 25.05.2019 20:12

механизм оплаты налажу и займусь загрузками и подгрузками для ускорения спасибо за описания проблем

Malleys 25.05.2019 20:24

Цитата:

Сообщение от jobananada
Warning: Cannot modify header information - headers already sent

Так удалите заголовок... пишет же, что нельзя! Вот удалил, проверьте!
<?php

$str = file_get_contents('php://input');
$data = json_decode($str);

echo json_encode($data);


Отправлять так
fetch("liqpay/liqpqy.php", { method: "POST", body: json });

jobananada 25.05.2019 20:31

Ответ null

let json = JSON.stringify(obshiyMassive); 
				
				if(obshiyMassive){
					fetch("liqpay/liqpqy.php", { method: "POST", body: json });
;
					
				}

<?php

$str = file_get_contents('php://input');
$data = json_decode($str);

echo json_encode($data);
?>

jobananada 25.05.2019 20:33

fetch("liqpay/liqpqy.php", { method: "POST", body: json });

jobananada 25.05.2019 20:33

пробую

jobananada 25.05.2019 20:36

до редиректа выдает
POST http://korzinka/liqpay/liqpqy.php 404 (Not Found)

jobananada 25.05.2019 20:36

а там уже null

jobananada 25.05.2019 20:42

до редиректа
POST http://korzinka/liqpay/liqpqy.php 404 (Not Found)
document.getElementById.onclick @ shop.js:238
на стороне
liqpay.php
NULL

Malleys 25.05.2019 22:27

Вообще-то у вас этот адрес http://korzinka.byethost9.com/liqpay/liqpay.php и он ещё что-то содержит?

Я не знаю, что вы там понаписали, но это выводит то, что прислали...
<?php

echo file_get_contents('php://input');


И вообще-то я проверял те PHP-скрипты, которые до этого присылал... очевидно, вы что-то сильно изменили в них...

jobananada 26.05.2019 08:44

Это код для обработки принятых данных и перехода на сайт приема платежей сюда и должны подставлятся те данные он ниже пока его не обрабатываю сам код рабочий но нужно эти данные по заказу клиента сюда принять и далее подставлю их здесь раскидаю(чет немогу передать)
<?php

echo file_get_contents('php://input');

echo "</br></br>";

?>

	kodyTovara = '';
	$namePlusKodTov = '';
	$summa = 0;
	$colichestvo = 0; 
 	foreach ($data['cart'] as $key => $value){
		$colichestvo += $value['count'];
		$summa += $value['count']*$value['cost'];
		$namePlusKodTov += $value['name']." ".$value['articul'].",";
		$kodyTovara += $value['articul'].",";
	} 

	$sum = $summa;
	$nameKodTovara = $namePlusKodTov;
	$kodTovara = $kodyTovara;
	$public_key = "sandbox_i1119407228";
	$private_key = "";

	$json_string = '{"public_key":"'.$public_key.'","version":"3","action":"pay","amount":"'.$sum.'","currency":"UAH","description":"'.$nameKodTovara.'","order_id":"'.$kodTovara.'"}';
	$data = base64_encode($json_string);

	$sign_string = $private_key.$data.$private_key;
		
	$signature = base64_encode(sha1($sign_string, true));


<form method="POST" accept-charset="utf-8" action="https://www.liqpay.ua/api/3/checkout">
	<input type="hidden" name="data" value="<?=$data?>"/>
	<input type="hidden" name="signature" value="<?=$signature?>" />
	<button name="buy" style="border: none !important; display:inline-block !important;text-align: center !important;padding: 7px 20px !important;
		color: #fff !important; font-size:16px !important; font-weight: 600 !important; font-family:OpenSans, sans-serif; cursor: pointer !important; border-radius: 2px !important;
		background: rgb(122,183,43) !important;"onmouseover="this.style.opacity='0.5';" onmouseout="this.style.opacity='1';">
		<img src="https://static.liqpay.ua/buttons/logo-small.png" name="btn_text"
			style="margin-right: 7px !important; vertical-align: middle !important;"/>
		<span  id="oplata" style="vertical-align:middle; !important"></span>
	</button>
</form>

jobananada 26.05.2019 08:57

echo file_get_contents('php://input');
ничего не выводит он пуст


http://korzinka/liqpay/liqpqy.php да извеняюсь это на локальном сервере пробовал
вот это правильный адрес [url]http://korzinka.byethost9.com/liqpay/liqpay.php[/url] результат тот же null проверял

jobananada 26.05.2019 10:49

А самое главное вот в зависимости от выбраного заказа сформирована строка json
["Название: Бананка Duo,Код: 5000294,Цена: 189гр,Колличество: 1шт,Сумма: 189гр.","Название: Рюкзак Urban,Код: 5000290,Цена: 519гр,Колличество: 2шт,Сумма: 1038гр.","Общая сумма заказа: 1227гр"]

Далее следует ошибка это до редиректа на liqpay.php
shop.js:238 POST http://korzinka.byethost9.com/liqpay/liqpqy.php 404 (Not Found)
document.getElementById.onclick @ shop.js:238
вот строка с ошибкой
fetch("liqpay/liqpqy.php",{method: "POST", body: json});

Malleys 26.05.2019 10:49

Цитата:

Сообщение от jobananada
echo file_get_contents('php://input');
ничего не выводит он пуст

а как вы узнаёте, что оно ничего не выводит? Вот я попробовал, и оно работает...
fetch("http://korzinka.byethost9.com/liqpay/liqpay.php?i=1", { method: "POST", body: JSON.stringify({ id: 60 }) }).then(r => r.text()).then(alert);


Цитата:

Сообщение от jobananada
ничего не выводит он пуст

Всё правильно, у GET-запросов нет тела, оно пустое!

Цитата:

Сообщение от jobananada
shop.js:238 POST http://korzinka.byethost9.com/liqpay/liqpqy.php 404 (Not Found)

Цитата:

Сообщение от jobananada
вот строка с ошибкой
fetch("liqpay/liqpqy.php",{method: "POST", body: json});

У вас отпечатка!
fetch("liqpay/liqpqy.php",{method: "POST", body: json});

jobananada 26.05.2019 11:19

cмотрю

jobananada 26.05.2019 11:22

возможно при редиректе очищается $_POST

jobananada 26.05.2019 11:29

алерт выскочил про подтверждение {id:60} вижу в нем

jobananada 26.05.2019 11:38

Делал так
document.getElementById('oplata1').innerHTML = '<form><input type="button" id="oplata" name="buy" value="" onClick="location.href=\'liqpay/liqpay.php?i=1\'"></form>';
					
			
					fetch("liqpay/liqpay.php?i=1", { method: "POST", body: JSON.stringify({ id: 60 }) }).then(r => r.text()).then(alert);

jobananada 26.05.2019 11:39

очищу liqpay.php от лишнего кода для чистоты процесса

jobananada 26.05.2019 11:45

и как правильно принять этот код на стороне сервера ?
В файл liqpay.php и посмотреть его в echo?

Malleys 26.05.2019 11:51

Цитата:

Сообщение от jobananada
В файл liqpay.php и посмотреть его в echo?

Конечно можно! Я почему должен давать разрешение?

jobananada 26.05.2019 11:53

так это и есть суть созданой темы

Malleys 26.05.2019 11:55

Цитата:

Сообщение от jobananada
так это и есть суть созданой темы

А, тогда проверьте это...

<?php

$str = file_get_contents('php://input');
$data = json_decode($str);

// здесь вы можете работать с разобранными данными $data

header('Content-Type: application/json; charset=utf-8');
echo json_encode($data); // или что-то другое
?>
ну я думаю теперь понятно вам...

jobananada 26.05.2019 11:57

ответ null
опишите свой вариант вашего вышеизложеного кода отправки как вывести вашу строку

Malleys 26.05.2019 12:10

Что, совсем никак? Вот...
fetch("http://korzinka.byethost9.com/liqpay/liqpay.php", {
    method: "POST",
    body: JSON.stringify({ id: 60 })
})
    .then(response => response.json())
    .then(data => {
        alert(data.id);
    });


Цитата:

Сообщение от jobananada
ответ null

Когда вы открываете вкладку, то вы делаете GET-запрос

jobananada 26.05.2019 12:27

так на стороне сервера как ваш код принять? я непонимаю


Часовой пояс GMT +3, время: 03:10.