S
S
santavits2018-05-31 18:55:47
PHP
santavits, 2018-05-31 18:55:47

Why does the Yandex money payment check not work?

The next task is to check incoming payments for Yandex money, and then enter payment data into the database.
Here is the form of payment itself

<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>

Well, here is a handler that should work when a new payment arrives
$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);

But as a result, the data is not entered into the database, the user's balance is not replenished

Answer the question

In order to leave comments, you need to log in

1 answer(s)
M
Maxim Timofeev, 2018-05-31
@webinar

$secret = '1O3l02UU2QXSxq9mkl1GriNQ';

Since you are so kind, then let's immediately login and password to his wallet.
Specifically on the issue. Check the logs to see if the data is entered into the database, and if so, then there are probably errors there and they are described. If before, then add logs, add post to them and see what's there.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question