MODX
0
Вклад в тег
$timestamp = date('dmYHis'); // это у нас будет номер заказа
// $pre_order - это сумма, которую надо заплатить. Берётся из формы.
$pre_order = str_replace(' ', '', $pre_order); // Надо убрать пробел разделяющий разряды (ну типа 1 000 -> 1000)
$pre_order = $pre_order*100; // и умножить на сто, т.к. в запросе в банк надо указывать сумму в копейках.
// Отправляем запрос в банк
$myCurl = curl_init();
curl_setopt_array($myCurl, array(
CURLOPT_URL => 'https://securepayments.sberbank.ru/payment/rest/register.do?userName=XXXXXXXXXXXXX-api&password=XXXXXXXXXXXXX&amount='.$pre_order.'&language=ru&orderNumber='.$timestamp.'&returnUrl=https://yoursite.com/send',
// Вот эта строка и есть запрос в банк. Тут нужно указать только свой userName, password, сумму и номер заказа, а так же returnUrl= адрес страницы куда мы вернёмся после оплаты.
// Сюда же можно добавить &jsonParams= {"Имя":"Параметр"}, о котором я писал выше. Но это такое...
// Вообще в справке там много всяких доп. параметров описано, но я там ничего особо полезного не нашёл.
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query(array(''))
));
$response = curl_exec($myCurl);
curl_close($myCurl);
// Всё. Запрос отправлен. В ответ мы получаем строку с ID заказа и ссылкой на оплату.
// Если выполнить echo $response, то можно эту строку увидеть.
// Теперь нам надо из этой строки, полученной в ответ от банка, получить отдельно ID заказа, отдельно ссылку на оплату
// Обрезаем ответ, чтобы получить url
$url = strstr($response, 'https:');
$url = strstr($url, '"', true);
// Обрезаем ответ, чтобы получить id заказа
$orderid = strstr($response, '","formUrl"', true);
$orderid = mb_substr($orderid, 12);
// Создаём файл с именем = id заказа. Именно так, потому что потом мы по этому id этот файл и будем находить.
$myfile='../orders/'.$orderid.'.txt';
// Заполняем его данными из формы
$text .= $familiya.";";
$text .= $imya.";";
$text .= $otchestvo.";";
$text .= $tel.";";
$text .= $email.";";
$text .= $city.";";
$text .= $course_info.";";
$text .= $price.";";
$text .= $pre_order."";
$file=fopen($myfile,'x+');
fputs($file,$text);
fclose($file);
// Переходим на страницу оплаты. $url мы получили из ответа от банка
header('Location: '.$url);
<form action="forms/send_mail.php" method="post" id="send_page">
<input type="text" name="familiya" value="" >
<input type="text" name="imya" value="" >
<input type="text" name="otchestvo" value="" >
<input type="tel" name="tel" value="" >
<input type="email" name="email" value="" >
<input type="text" name="city" value="" >
<input type="text" name="course_info" value="" >
<input type="text" name="pre_order" value="" >
<input type="text" name="price" value="" >
</form>
var url = document.location.href; // Палим урл страницы
url = url.slice(url.indexOf('=')+1, url.lastIndexOf('&')); // режем его и получаем orderID, который отдал нам банк. Он нам нужен, чтобы найти соответствующий текстовый документ
// Обращаемся к конкретному текстовому документу
fetch('/orders/'+url+'.txt').then(response => response.text()).then((data) => {
var vars = ['familiya', 'imya', 'otchestvo', 'tel', 'email', 'city', 'course_info', 'price', 'pre_order'], // создаём массив с именами импутов
info, i=0;
info = data.split(';'); // создаём массив со значениями, которые берём из текстового документа
for (i; i<vars.length; i++) { // перебираем массив и заполняем инпуты
if (vars[i] == 'pre_order') {info[i] = info[i]/100;} // сумма оплаты у нас записана в копейках, поэтому надо привести к рублям
$('.send_page').find('input[name='+vars[i]+']').attr('value', info[i]); // заполняем инпуты
}
});
// отправляем форму спустя 300мс, чтобы инпуты успели заполниться
setTimeout(function(){$("#send_page").submit()},300);