@santavits

Почему не работает проверка платежа яндекс денег?

Задача в следующем проверять входящие платежи на яндекс деньги, после чего заносить в базу данные о платеже
Вот сама форма оплаты
<form method="POST" action="https://money.yandex.ru/quickpay/confirm.xml">
 <input type="hidden" name="receiver" value="410012043217827"><br>
 <input type="hidden" name="formcomment" value="Пополнение баланса в smm-servis.ru">
 <input type="hidden" name="short-dest" value="Пополнение баланса в smm-servis.ru">
 <input type="hidden" name="label" value="<?php echo $UserID; ?>">
 <input type="hidden" name="quickpay-form" value="donate">
 <input type="hidden" name="targets" value="Пополнение пользователя <?php echo $UserName; ?>">
 <input type="number" name="sum"  placeholder="Минимум 10 руб." data-type="number" class="input-md round form-control def-text" style="width:261px;">
 <input type="hidden" name="comment" value="<?php echo $UserName; ?>" >
 <input type="hidden" name="need-fio" value="false">
 <input type="hidden" name="need-fio" value="false">
 <input type="hidden" name="need-email" value="false" >
 <input type="hidden" name="need-phone" value="false">
 <input type="hidden" name="need-address" value="false">
 <input type="radio" name="paymentType" value="PC" checked>Яндекс.Деньгами</input><br>
 <input type="radio" name="paymentType" value="AC">Банковской картой</input><br>
 <input type="submit" name="submit-button" style="width:261px;" class="submit_btn btn btn-mod btn-medium btn-round" value="Пополнение Yandex">
</form>

Ну а тут обработчик, который должен срабатывать при поступление нового платежа
$secret = '1O3l02UU2QXSxq9mkl1GriNQ'; // секрет, который мы получили в первом шаге от яндекс.
// получение данных.
$r = array(
	'notification_type' => $_POST['notification_type'], // p2p-incoming / card-incoming - с кошелька / с карты
	'operation_id'      => $_POST['operation_id'],      // Идентификатор операции в истории счета получателя.
	'amount'            => $_POST['amount'],            // Сумма, которая зачислена на счет получателя.
	'withdraw_amount'   => $_POST['withdraw_amount'],   // Сумма, которая списана со счета отправителя.
	'currency'          => $_POST['intval'],            // Код валюты — всегда 643 (рубль РФ согласно ISO 4217).
	'datetime'          => $_POST['datetime'],          // Дата и время совершения перевода.
	'sender'            => $_POST['sender'],            // Для переводов из кошелька — номер счета отправителя. Для переводов с произвольной карты — параметр содержит пустую строку.
	'codepro'           => $_POST['codepro'],           // Для переводов из кошелька — перевод защищен кодом протекции. Для переводов с произвольной карты — всегда false.
	'label'             => $_POST['label'],             // Метка платежа. Если ее нет, параметр содержит пустую строку.
	'sha1_hash'         => $_POST['sha1_hash']          // SHA-1 hash параметров уведомления.
);

// проверка хеш
if (sha1($r['notification_type'].'&'.
         $r['operation_id'].'&'.
         $r['amount'].'&'.
         $r['currency'].'&'.
         $r['datetime'].'&'.
         $r['sender'].'&'.
         $r['codepro'].'&'.
         $secret.'&'.
         $r['label']) != $r['sha1_hash']) {
	exit('Верификация не пройдена. SHA1_HASH не совпадает.'); // останавливаем скрипт. у вас тут может быть свой код.
}

// обработаем данные. нас интересует основной параметр label и withdraw_amount для получения денег без комиссии для пользователя.
// либо если вы хотите обременить пользователя комиссией - amount, но при этом надо учесть, что яндекс на странице платежа будет писать "без комиссии".
$r['amount']          = floatval($r['amount']);
$r['withdraw_amount'] = floatval($r['withdraw_amount']);
$r['label']           = intval($r['label']); // здесь я у себя передаю id юзера, который пополняет счет на моем сайте. поэтому обрабатываю его intval
$time = time();
// дальше ваш код для обновления баланса пользователя / для вставки полученного платежа в историю платежей, например:
$qz = mysql_query ("INSERT INTO `deposits`(`DepositUserID`,`DepositAmount`,`DepositType`,`DepositDate`) VALUES ('$r['label']','$r['amount']','Yandex','time()')",$db);
$qz = mysql_query ("UPDATE `users` SET `UserBalance`=`UserBalance` + '$r['amount']' WHERE `UserID`='$r['label']'",$db);

Но в итоге данные в базу не вносятся, баланс пользователя не пополняется
  • Вопрос задан
  • 320 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
$secret = '1O3l02UU2QXSxq9mkl1GriNQ';

<input type="hidden" name="receiver" value="410012043217827"><br>

Раз уж Вы такой добрый, тогда давайте сразу логин и пароль он кошелька.

Конкретно по проблеме. Проверьте логи, доходит ли до внесение данных в базу и если да, то там вероятно есть ошибки и они описаны. Если до этого, то добавьте логи, внесите в них post и посмотрите что там.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы