Константин М.
11 повідомлень
#16 років тому
Доброго времени суток!
У меня пробема. Есть интерфейс Webmoney Merchant. Есть три файла (указываются в настройках мерчанта): Fail URL, Success URL и Result URL. В форме, с которой отправляется запрос на перевод денег, есть поле
<input type="hidden" name="desc" value="buyannouncement">

В скрипте Result URL происходит проверка, чему равно это поле. И если поле равно buyannouncement, то выполнить такие-то действия. Но в том то и дело, что оно не равно никогда! Почему?
И как можно решить проблемму: в зависимости от передаваемого параметра делать определенные действия.
Андрей Халецкий
3562 повідомлення
#16 років тому
А почему оно должно передаваться?
Константин М.
11 повідомлень
#16 років тому
Вроде бы можно дополнительные параметры передавать... Или нельзя? Почему тогда другие дополнительные параметры передаются?
Андрей Халецкий
3562 повідомлення
#16 років тому
Как вы их передаете, что именно из дополнительных передается?
Александр Ж.
575 повідомлень
#16 років тому
Код в студию для разбора
Константин М.
11 повідомлень
#16 років тому
Это форма
<form id=pay name=pay method="post" action="https://merchant.webmoney.ru/lmi/payment.asp">
<input type="hidden" name="LMI_PAYMENT_AMOUNT" value="0.01">
<input type="hidden" name="desc" value="buyannouncement">
<input type="hidden" name="LMI_PAYEE_PURSE" value="X012345678912">
<input type="hidden" name="id" value="3">
<input type="hidden" name="email" value="***">
<input type="submit" value="Перейти к оплате">
</form>

Это обработка

// Подключаем нужные файлы
require_once('conf.local.php');
require_once('lib.mysql.php');


// Коннектимся к базе
db_connect();
db_select();

if ( isset($_POST) && $_POST == 1)
{
// 1. Проверяем, есть ли такой анонс в базе
$query = 'SELECT COUNT(*) FROM `announcement` WHERE id=' . mysql_real_escape_string($_POST);
$result = mysql_query($query) or die('Illegal query: ' . mysql_error());
$row = mysql_fetch_array($result);
if ( $row==0 )
{
$err = 1;
exit();
}
mysql_free_result($result);


// 2. Проверяем, не было ли подмены суммы для анонса
// Cравниваем стоимость товара в базе данных с той суммой, что передана нам Мерчантом.
// Если сумма не совпадает, то выводим ошибку и прерываем работу скрипта.
if ( $_POST=='Оплата анонса' )
{
$query = 'SELECT * FROM `banners` WHERE id=6';
$result = mysql_query($query) or die('Illegal query: ' . mysql_error());
$row = mysql_fetch_array($result);
if ( $row!=trim($_POST) )
{
$err = 1;
exit();
}
}


// 3) Проверяем, не произошла ли подмена кошелька.
// Cравниваем наш настоящий кошелек с тем кошельком, который передан нам Мерчантом.
// Если кошельки не совпадают, то выводим ошибку и прерываем работу скрипта.
if ( trim($_POST)!=$data )
{
$err = 1;
exit();
}


// Если нет ошибок, то продолжаем работу дальше
print('YES');
}
else
{
// Задаем значение $secret_key.
// Оно должно совпадать с Secret Key, указанным нами в настройках кошелька.
$secret_key = 'fgjhds956kgh06u7asdf';

// Склеиваем строку параметров
$common_string = $_POST . $_POST . $_POST . $_POST . $_POST . $_POST . $_POST . $secret_key . $_POST . $_POST;


// Шифруем полученную строку в MD5 и переводим ее в верхний регистр
$hash = strtoupper(md5($common_string));

// Прерываем работу скрипта, если контрольные суммы не совпадают
if ( $hash!=$_POST )
{
echo "Констрольная сумма не совпадает";
exit;
}


// Далее если указан анонс
if ( isset($_POST) && $_POST=='buyannouncement' )
{
$query = 'UPDATE `announcement` SET `active`=1 WHERE id=' . (int) mysql_real_escape_string($_POST) . ' LIMIT 1';
mysql_query($query) or die('Illegal qeury: ' . mysql_error());
mail($_POST, 'Оплата анонса на ', 'Вами была оплачена услуга: Публикация анонса.', 'Content-Type:text/plain; charset="windows-1251"');
echo "OK";
}
}