Как настроить HTTP-уведомления от Яндекс.Деньги?

<?php


$secret_key = '3H+9U5PuknHNaOf7aCFB7sLq'; // секретное слово, которое мы получили в предыдущем шаге.
 
// возможно некоторые из нижеперечисленных параметров вам пригодятся
// $_POST['operation_id'] - номер операция
// $_POST['amount'] - количество денег, которые поступят на счет получателя
// $_POST['withdraw_amount'] - количество денег, которые будут списаны со счета покупателя
// $_POST['datetime'] - тут понятно, дата и время оплаты
// $_POST['sender'] - если оплата производится через Яндекс Деньги, то этот параметр содержит номер кошелька покупателя
// $_POST['label'] - лейбл, который мы указывали в форме оплаты
// $_POST['email'] - email покупателя (доступен только при использовании https://)
 
$sha1 = sha1( $_POST['notification_type'] . '&'. $_POST['operation_id']. '&' . $_POST['amount'] . '&643&' . $_POST['datetime'] . '&'. $_POST['sender'] . '&' . $_POST['codepro'] . '&' . $secret_key. '&' . $_POST['label'] );
 
if ($sha1 != $_POST['sha1_hash'] ) {
	echo "ошибка";
	exit();
}
 
// тут код на случай, если проверка прошла успешно
 
exit();


В настройках HTTP-уведомления Яндекса добавил url.
Секретное слово скопировал как есть.
Даже ssl сертификат подключил.

$_POST['sha1_hash'] - пустой.
Получаю ошибку. В чем проблема?
  • Вопрос задан
  • 5143 просмотра
Пригласить эксперта
Ответы на вопрос 3
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
<?php
//yandex http-notification
$secret='XXXXXXXXXXXXXXXXXXXXXXX';

if ($_POST) {
$params='notification_type&operation_id&amount&currency&datetime&sender&codepro';

$params=explode('&',$params);
$forHASH=array();
foreach($params as $key=>$p) {
 if (isset($_POST[$p])) array_push($forHASH,$_POST[$p]);
}

if ($secret!="") array_push($forHASH,$secret);
if (isset($_POST['label'])) array_push($forHASH,$_POST['label']);

$forHASH=implode('&',$forHASH);

if ($_POST['sha1_hash']===sha1($forHASH) && $_POST['codepro']!=='true') { //transact ok.
         ////////////////////////////////
         ///////  Платёж прошел /////////
         ////////////////////////////////
           $status="Успешно!";
           $id=$_POST['label'];
           $money=$_POST['amount'];
           $tranid=$_POST["operation_id"];
           $flow="in";
           $paysystem="ym";
           $ymfrom=$_POST['sender'];

          /*что-то делаем....*/

         ////////////////////////////////
  }
}
Ответ написан
@formasha
Яндекс.Деньги
Привет! Если проблема еще не решена — пожалуйста, напишите нам на bloghelp@yamoney.ru, коллеги подскажут, что делать.
Ответ написан
Комментировать
Tuniyants
@Tuniyants
Product Manager for Yandex.Money
На первый взгляд, обработчик создан корректно. Предлагаю провести двустороннее тестирование. Напишите, пожалуйста, на bloghelp@yamoney.ru.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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