Оплата заказа

Опубликовал: Friday, January 4, 2024 в категории AJAX, PHP | Пока нет комментариев

После создания заказа, система предлагает оплатить его (см. рис. 3.25). При нажатии на кнопку Оплатить предлагается выбор — автоматическая оплата через сервис либо WM (Merchant.webmoney.ru), либо ONPAY(http://onpay.ru) (рис. 3.26).

Рис. 3.26. Выбор формы оплаты

Оплата Webmoney

Функция Oplata_Zakaz, расположенная в файле prgoplata/ oplata_zakaz.php (листинг 3.52), создает форму выбора оплаты.

Листинг 3.52

<?php

//Функция округления для md5 function to_float($sum)

{

if (strpos($sum, "."))

{$sum=round($sum,2);} else

{$sum=$sum.".0";}

return $sum;

}

//

function Oplata_Zakaz($Id)

{

$objResponse = new xajaxResponse();

$objResponse->assign("flag_ajax","value",’yes’);

// очистить блок centercaption1

$objResponse->assign( "centercaption1","innerHTML","<table></table>");

// очистить блок centercaption1

$objResponse->assign("center1","innerHTML","<table></table>"); require_once("my.php");

// подключиться к базе данных

require_once("mybaza.php");

$query1="SELECT * FROM zakaz WHERE id=’".$Id."’ ";

$rez1=mysql_query($query1);

$row1=mysql_fetch_assoc($rez1);

$text1.="<center>";

$text1.="<br><br>Заказ ".$row1[id]."<br>";

$text1.="<br><br>К оплате ".($row1[summa_rub]-

$row1[summa_rub_oplata])." руб.<br><br>";

// WebMoney

$text1.="<form action=’https://merchant.webmoney.ru/lmi/payment.asp’ method=’post’ target=’_blank’>

<input type=’hidden’ name=’LMI_PAYMENT_AMOUNT’ value=’".($row1[summa_rub]-$row1[summa_rub_oplata])."’>

<input type=’hidden’ name=’LMI_PAYMENT_DESC’ value=’

Оплата по заказу ".$row1[id]." в магазине’>

<input type=’hidden’ name=’LMI_PAYEE_PURSE’ value=’".LMI_PAYEE_PURSE_R."’>

<input type=’hidden’ name=’LMI_PAYMENT_NO’ value=’".$row1[id]."’>

<input type=’hidden’ name=’LMI_SIM_MODE’ value=’0′>

<input type=’submit’ id=’button_oplata_wm’ value=’Оплатить WM’

onclick=’this.disabled=true;this.value=\"Подождите…\";’>

</form>";

// end WebMoney

// ONPAY

$key=OP_KEY;

$code=$row1[id];

$summa=$row1[summa_rub]-$row1[summa_rub_oplata];

$sum_for_md5=to_float($summa);

//Создаем проверочную строку, которая защищает платежную ссылку от

// изменений

$md5check=md5("fix;$sum_for_md5;RUR;$code;yes;$key");

$url_onpay="http://secure.onpay.ru/pay/".OP_LOGIN."?pay_mode= fix&pay_for=".$code;

$url_onpay.="&price=".$summa."¤cy=RUR&convert= yes&md5=".$md5check;

$url_onpay.="&price=".$summa."¤cy=RUR&convert=yes";

//$url_onpay.="&url_success=".OP_PATH;

$text1.="<form action=’javascript:void();’ onclick=’ window.open(\"".$url_onpay."\",\"\",\"\");’>

input type=’submit’ id=’button_oplata_wm’ value=’

Оплатить ONPAY ‘

disabled=true onclick=’this.disabled=true;this.value=

\"Подождите…\";’></form>";

// end ONPAY

$text1.="<br><br><input type=button value=’Выйти’ onclick=’ document.getElementById(\"center5\").innerHTML=\"\"; document.getElementById(\"centercaption5\").innerHTML=\"\"; ‘>";

$text1.="</center>";

$zag=f_zag1("Форма оплаты");

$objResponse->assign("centercaption5","innerHTML",$zag);

$objResponse->assign("center5","innerHTML",$text1);

$objResponse->script("document.getElementById(‘center5’)

.scrollIntoView();");

$objResponse->assign("flag_ajax","value",’no’); return $objResponse;

}

?>

При нажатии на кнопку Оплатить WM клиент перенаправляется на специальный сайт Мерчант-сервиса, где производит авторизацию и затем оплату со своего кошелька. При этом передаются следующие параметры:

LMI_PAYMENT_AMOUNT — сумма платежа;

LMI_PAYMENT_DESC — назначение платежа;

LMI_PAYEE_PURSE — номер кошелька;

LMI_PAYMENT — номер платежа в магазине.

Сразу же после оплаты сам сервис связывается с сервером магазина и извещает его о том, что произведена оплата такого-то заказа на такую-то сумму. Данные передаются скрипту prgoplata/wm_result.php (листинг 3.53). Скрипт магазина изменяет статус заказа в базе данных, а также формирует уведомления по e-mail и сервису мгновенных оповещений покупателю и администратору об успешной оплате заказа.

Листинг 3.53

<?php require_once("../my.php"); require_once("../mybaza.php"); require_once("function_create_message_header4.php");

// Если это форма предварительного запроса, то идем дальше…

IF($_POST[‘LMI_PREREQUEST’]==1)

{

// 1) Проверяем, не произошла ли подмена суммы и кошелька.

if( trim($_POST[‘LMI_PAYEE_PURSE’])==LMI_PAYEE_PURSE_R )

{

echo "YES"; exit;

} else

{

echo "ERR: Неверный кошелек или сумма платежа "; exit;

}

}

// Если нет LMI_PREREQUEST, следовательно, это форма оповещения о //платеже…

ELSE

{

// Задаем значение $secret_key.

// Оно должно совпадать с Secret Key, указанным нами в настройках кошелька.

$secret_key=SECRET_KEY;

// Склеиваем строку параметров

$common_string =

$_POST[‘LMI_PAYEE_PURSE’].$_POST[‘LMI_PAYMENT_AMOUNT’].$_POST[‘LMI_PAYMENT_NO’].

$_POST[‘LMI_MODE’].$_POST[‘LMI_SYS_INVS_NO’].$_POST[‘LMI_SYS_TRANS_NO’].

$_POST[‘LMI_SYS_TRANS_DATE’].$secret_key.$_POST[‘LMI_PAYER_PURSE’].$_ POST[‘LMI_PAYER_WM’];

// Шифруем полученную строку в MD5 и переводим ее в верхний регистр

$hash = strtoupper(md5($common_string));

// Прерываем работу скрипта, если контрольные суммы не совпадают

if($hash!=$_POST[‘LMI_HASH’])

exit; else

{

$summa_rub=$_POST[‘LMI_PAYMENT_AMOUNT’];

$kod=$_POST[‘LMI_SYS_TRANS_NO’];

$id_zakaz=$_POST[‘LMI_PAYMENT_NO’];

$query1="UPDATE oplata SET data=’".date("Y-m-d H:i:s")."’,id_zakaz=’".$id_zakaz."’, kod=’".$kod."’, plat_system=’wm’,summa_rub=’".$summa_rub."’ ";

$rez1=mysql_query($query1);

$query1="INSERT INTO oplata SET data=’".date("Y-m-d H:i:s")."’,id_zakaz=’".$id_zakaz."’, kod=’".$kod."’,plat_system=’wm’,summa_rub=’".$summa_rub."’ ";

$rez1=mysql_query($query1);

$query11="SELECT summa_rub_oplata,summa_rub FROM zakaz WHERE id=’".$id_zakaz."’ ";

$summa_rub_oplata=mysql_result (mysql_query($query11),0,"summa_rub_oplata");

$summa_rub_zakaz=mysql_result(mysql_query($query11),0,"summa_rub");

$summa_rub_oplata_new=$summa_rub_oplata+$summa_rub;

$query12="UPDATE zakaz SET summa_rub_oplata=’".$summa_rub_oplata_new."’ WHERE id=’".$id_zakaz."’ ";

$rez12=mysql_query($query12);

$Id=$id_zakaz; if($summa_rub_oplata_new>=$summa_rub_zakaz)

{

$query13="UPDATE zakaz SET pay=’yes’ WHERE id=’".$Id."’ ";

$rez13=mysql_query($query13);

// создание ссылок

$data=date(‘Y-m-d’,strtotime(‘now+10days’));

$query2="SELECT id,id_tovar FROM zakaz_table WHERE id_zakaz=".$Id." ";

$rez2=mysql_query($query2); while($row2=mysql_fetch_assoc($rez2))

{

$query3="SELECT arhiv FROM tovars WHERE id=’".$row2[id_tovar]."’ ";

$link=mysql_result(mysql_query($query3),0);

$query4="SELECT id_user FROM zakaz WHERE id=’".$Id."’ ";

$id_user=mysql_result(mysql_query($query4),0);

$query5="INSERT INTO link_downloads SET id_user=’".$id_user."’, file=’".$link."’,status=’yes’,data=’".$data."’,id_zakaz=’".$Id."’ ";

$rez5=mysql_query($query5);

$id_link=mysql_insert_id();

$query6="UPDATE zakaz_table SET id_link=’".$id_link."’ WHERE id=’".$row2[id]."’ ";

$rez6=mysql_query($query6);

}

}

$query7="SELECT id FROM users WHERE type=’9′ ";

$id_user1=mysql_result(mysql_query($query7),0,"id");

$query8="SELECT id_user FROM zakaz WHERE id=’".$id_zakaz."’ ";

$id_user2=mysql_result(mysql_query($query8),0,"id_user");

// message_header4

f_create_message_header4(6,$id_zakaz, $id_user1," ".date(‘Y-m-d H:i:s’)." оплата по заказу ".$id_zakaz." на сумму ".$summa_rub." руб. ");

f_create_message_header4(6,$id_zakaz, $id_user2," ".date(‘Y-m-d H:i:s’)." оплата по заказу ".$id_zakaz." на сумму

".$summa_rub." руб. ");

}

}

?>

Источник: Петин В. А., Сайт на AJAX под ключ. Готовое решение для интернет-магазина. — СПб.: БХВ-Петербург, 2011. — 432 с.: ил. + CD-ROM — (Профессиональное программирование)

Похожие посты:

Комментировать

Your email address will not be published. Required fields are marked *