Файл: iwup.biz/wminc/test.php
Строк: 202
<?php
/// ЭТО ВЫПИСКА СЧЕТА, Я ПРОСТО ВЫДРАЛ ИЗ СКРИПТА
elseif (@$_GET['type'] == 'wm')
{
$err = 0;
if (isset($_POST['send']))
{
include_once ("includes/USD.php");
if (!checkinput($_POST['amount'],"FLOAT") or $_POST['amount'] =='')
{
$err++;
$design_err = err_design ("<br>Неверный формат суммы.");
}
if (!checkinput($_POST['wmid'],"INT") or strlen($_POST['wmid']) != 12)
{
$err++;
$design_err = err_design ("<br>Неверный формат wmid.");
}
if (!$err)
{
# кодировка сайта
define("DOC_ENCODING", "utf-8");
# Подключаем библиотеку, отвечающую за выполнение
# запросов на сервер и приём ответов
include_once("includes/wm/wmxi.php");
# Создаём объект класса WMXI.
$wmxi = new WMXI(realpath("includes/wm/WebMoneyCA.crt"), DOC_ENCODING);
# Инициализация с помощью резервной копии ключей
$wmxi->Classic("125524731213", "ПАРОЛЬ", "ПУТЬ К ФАЙЛУ КЛЮЧЕЙ");
# Подключаем парсер ответа сервера и создаём объект
include_once("includes/wm/wmxiparser.php");
$parser = new WMXIParser();
#Получаем id платежа
$orderid = SQLone("SELECT count(id) FROM enterpay") + 1;
#Кошелек, на который нужно перевести деньги
if($_POST['vid'] == 'wmr') $wmpurse = $cfg_wmpurse['wmr'];
elseif($_POST['vid'] == 'wmz') $wmpurse = $cfg_wmpurse['wmz'];
else
{
print "Error";
exit;
}
# Получение и обработка данных формы
$response = $wmxi->X1
(
$orderid, # номер счета в системе учета магазина; любое целое число без знака
$_POST['wmid'], # WMId покупателя
$wmpurse, # номер кошелька, на который необходимо оплатить счет
floatval($_POST["amount"]), # число с плавающей точкой без незначащих символов
trim($cfg_enter_desc . ' user id ' . $info['id_user']), # произвольная строка от 0 до 255 символов; пробелы в начале или конце не допускаются
'', # произвольная строка от 0 до 255 символов; пробелы в начале или конце не допускаются
0, # целое число от 0 до 255; если 0 - протекция сделки при оплате счета не разрешена
2 # целое число от 0 до 255; если 0 - срок оплаты не определен
);
# Преобразовываем ответ сервера в структуру. Входные параметры:
# - XML-ответ сервера
# - кодировка, используемая на сайте. По умолчанию используется UTF-8
$structure = $parser->Parse($response, DOC_ENCODING);
# преобразуем индексы структуры к более удобным для доступа.
# Не рекомендуется проводить такое преобразование с с результатом, если он содержит
# множество однотипных строк (например, список транзакций)
# если надобности в аттрибутах XML-тегов ответа нет, то второй параметр можно
# установить в false - в таком случае структура выйдет более компактной
$transformed = $parser->Reindex($structure, true);
#Проверяем есть ли ошибки
if(@$transformed["w3s.response"]["retval"] != '0')
{
$err++;
$design_err = err_design ("<br>При выписке счета произошла ошибка, еще раз правильно заполните форму и нажмите "Отправить". Если снова увидите данное сообщение, то обратитесь в службу поддержки и сообщите описание ошибки -". $transformed["w3s.response"]["retdesc"]);
}
else
{
SQLquery("INSERT INTO enterpay SET time = '". date('U') ."', id_user = ". $info['id_user'] .", wmid = ". htmlspecialchars($_POST['wmid']) .", wmpurse = '". $wmpurse ."', wminvid = ". htmlspecialchars(@$structure[0]["node"][1]["@"]["ID"]) .", amount = " .$transformed["w3s.response"]["invoice"]["amount"].", status = 'new'");
if($_POST['vid'] == 'wmr') $amount = $transformed["w3s.response"]["invoice"]["amount"];
elseif($_POST['vid'] == 'wmz') $amount = $transformed["w3s.response"]["invoice"]["amount"] * $rate;
$design_head = "Счет успешно выписан!";
$design_text .= "Номер счета: <b>". $orderid ."</b><br>";
$design_text .= "К зачислению: <b>". round($amount, 2) ." WMR</b><br>";
$design_text .= "Для оплаты счета через GSM Keeper в меню программы выбирите:<br>";
$design_text .= ""Счета" -> "Счета WebMoney" -> "Неоплаченные счета" - > выбирите нужный счет -> "Меню" -> "Оплатить".<br>";
$design_text .= "Если Вы пользуетесь программой WM Keeper Classic, то просто выбирете нужный счет во вкладке "Входящие" и оплатите его.<br>";
$design_text .= "Деньги будут зачислены в течение 15 минут с момента оплаты.<br />";
$design_text .= "<b>Внимание!</b><br> Если в течение суток Вы не оплатите счет, он автоматически будет удален из системы, при оплате просроченного счета, деньги будут списаны с Вашего кошелька, но баланс в системе пополнен не будет!";
#Готовим дизайн
$template_phpbb->assign_vars(array(
'HEAD' => $design_head,
'TEXT' => $design_text
)
);
head('Пополнение баланса');
$template_phpbb->pparse('text.tpl');
}
}
}
$design_err .= err_design ("", "END");
if (!isset($_POST['send']) or $err > 0)
{
$design_head = "Пополнение баланса";
$design_form = ShowForm(array(
array("Ваш wmid:", "wmid", $profil['wmid'], "text"),
array("Сумма к пополнению (для не целых чисел разделитель - точка):","amount", "","text"),
array("Валюта:","vid","","select", array("wmr"=>'WMR', "wmz"=>'WMZ')),
),"Отправить");
#Готовим дизайн
$template_phpbb->assign_vars(array(
'HEAD' => $design_head,
'ERR' => $design_err,
'TEXT' => $design_form
)
);
head('Пополнение баланса');
$template_phpbb->pparse('text.tpl');
}
}
///ЭТО ПРОВЕРКА
include_once("/home/ant0ha/domains/serfing.mobi/public_html/includes/config.php");
include_once("/home/ant0ha/domains/serfing.mobi/public_html/includes/function.php");
include_once("/home/ant0ha/domains/serfing.mobi/public_html/includes/serfing.php");
include_once("/home/ant0ha/domains/serfing.mobi/public_html/includes/functionsql.php");
include_once("/home/ant0ha/domains/serfing.mobi/public_html/includes/USD.php");
SQLconnect();
//====================================================================================================================================================
// ПРОВЕРКА СЧЕТОВ
//====================================================================================================================================================
# кодировка сайта
define("DOC_ENCODING", "windows-1251");
# Подключаем библиотеку, отвечающую за выполнение
# запросов на сервер и приём ответов
include_once("/home/ant0ha/domains/serfing.mobi/public_html/includes/wm/wmxi.php");
# Создаём объект класса WMXI. Передаваемые параметры:
# - путь к сертификату, используемому для защиты от атаки с подменой ДНС
# - кодировка, используемая на сайте. По умолчанию используется UTF-8
$wmxi = new WMXI(realpath("/home/ant0ha/domains/serfing.mobi/public_html/includes/wm/WebMoneyCA.crt"), DOC_ENCODING);
# Инициализация с помощью резервной копии ключей
# от Webmoney Keeper Classic. Передаваемые параметры:
# - WMID - идентификатор пользователя
# - пароль пользователя от резервной копии файла ключей
# - путь к резервной копии файла ключей размером 164 байта
# или бинарное содержимое файла ключа
$wmxi->Classic("190946901339", "ПАРОЛЬ", "ПУТЬ К ФАЙЛУ КЛЮЧЕЙ");
# $kwm = file_get_contents("../keys/000000000000.kwm");
#$wmxi->Classic("000000000000", "password", $kwm);
# http://www.webmoney.ru/rus/developers/interfaces/xml/xml_php/index.shtml
# Раздел "Работа с сертификатами WM Keeper Light (X.509)"
# Инициализация с помощью сертификата
# от Webmoney Keeper Lite. Передаваемые параметры:
# - путь к файлу приватного ключа
# - путь к файлу сертификата
# - пароль от приватного ключа
# $wmxi->Lite("keyfile.key", "keyfile.cer", "pass");
# Подключаем парсер ответа сервера и создаём объект
include_once("/home/ant0ha/domains/serfing.mobi/public_html/includes/wm/wmxiparser.php");
$parser = new WMXIParser();
$res = SQLquery("SELECT * FROM enterpay WHERE status = 'new'");
while($data = mysql_fetch_array($res))
{
$response = $wmxi->X4(
$data["wmpurse"], # номер кошелька для оплаты на который которого выписывался счет
intval($data["wminvid"]), # целое число > 0
'', # номер счета в системе учета магазина; любое целое число без знака
'20080101 12:00:00', # ГГГГММДД ЧЧ:ММ:СС
'21000101 12:00:00' # ГГГГММДД ЧЧ:ММ:СС
);
# Преобразовываем ответ сервера в структуру. Входные параметры:
# - XML-ответ сервера
# - кодировка, используемая на сайте. По умолчанию используется UTF-8
$structure = $parser->Parse($response, DOC_ENCODING);
# преобразуем индексы структуры к более удобным для доступа.
# Не рекомендуется проводить такое преобразование с с результатом, если он содержит
# множество однотипных строк (например, список транзакций)
# если надобности в аттрибутах XML-тегов ответа нет, то второй параметр можно
# установить в false - в таком случае структура выйдет более компактной
$transformed = $parser->Reindex($structure, false);
if($structure[0]['node'][1]['node'][0]['node'][6]['data'] == 2)
{
if(strstr($data['wmpurse'], 'R')) $amount = $structure[0]['node'][1]['node'][0]['node'][3]['data'];
elseif(strstr($data['wmpurse'], 'Z')) $amount = $structure[0]['node'][1]['node'][0]['node'][3]['data'] * $rate;
#Меняем статус счета
SQLquery("UPDATE enterpay SET status = 'ok' WHERE id = ". $data['id']);
#Получаем информацию о пользователе
$tarif_id = SQLone("SELECT tarif_id FROM users WHERE id_user = ". $data['id_user']);
$enter_bonus = SQLone("SELECT enter_bonus FROM tarifs WHERE id = ". $tarif_id);
#Находим сумму бонуса
$enter_bonus = $amount * $enter_bonus / 100;
#Зачисляем деньги пользователю
$enter_summ = $enter_bonus + $amount;
SQLquery("UPDATE users SET balance=balance+$enter_summ WHERE id_user = ". $data['id_user']);
bank ('enter_bonus', $enter_bonus);
}
elseif($structure[0]['node'][1]['node'][0]['node'][6]['data'] == 3)
{
#Меняем статус счета
SQLquery("UPDATE enterpay SET status = 'cansel' WHERE id = ". $data['id']);
}
}
//================================================================================================================================================
// УДАЛЕНИЕ ПРОСРОЧЕННЫХ СЧЕТОВ
//================================================================================================================================================
$date = date('U') - 86400;
SQLquery("DELETE FROM enterpay WHERE time < ". $date ." AND status = 'new'");
?>