Задать вопрос
HARDPLATON
@HARDPLATON

Как настроить https уведомление о входящем переводе ЮMoney на php?

Как настроить https уведомление о входящем переводе ЮMoney на php? В документации ничего толком не понятно как это реализовать и нет примеров. Нашел вот этот вопрос Как настроить HTTP-уведомления от Яндекс.Деньги? пробовал сделать так же, уведомления не приходят.
  • Вопрос задан
  • 722 просмотра
Подписаться 1 Простой 5 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Stepik
    PHP (pro)
    2 недели
    Далее
Пригласить эксперта
Ответы на вопрос 1
mtplutos
@mtplutos
Вычисление подписи уведомления
Сформируйте строку для вычисления подписи:
Извлеките параметры уведомления.
Удалите параметр sign — он не участвует в формировании подписи.
Отсортируйте оставшиеся параметры по алфавиту (A-Z).
Примените URL-кодирование к значениям каждого параметра (в кодировке UTF-8, RFC 3986).
Объедините параметры в строку формата ключ=значение, разделяя их символом &. Пустые значения оставьте как key= (без пробелов).

Вычислите HMAC-SHA256 от полученной строки, используя секретный ключ из настроек HTTP-уведомлений. Представьте результат в HEX (нижний регистр).

<?php
$notification_secret = "1234567890"; // Секретный код

$sign = isset($_POST['sign']) ? trim($_POST['sign']) : ''; // HMAC-SHA256 подпись
if($sign == '') {
	die("Hacking attempt");
	exit;
}
$params = $_POST; // забираем ВСЕ параметры
unset($params['sign']); // удаляем sign (он не участвует в подписи)
ksort($params); // сортировка A-Z
$hash_arr = array(); // формируем строку
foreach($params as $key => $value) {
	$hash_arr[] = $key . '=' . rawurlencode($value);
}
$hash = implode('&', $hash_arr);

// вычисляем подпись
$signature = hash_hmac('sha256', $hash, $notification_secret);

// проверяем подлинность запроса
if(hash_equals($signature, $sign)) {
	$hach_ok = 'YES'; // успешно
} else {
	$hach_ok = 'NO'; // ошибка
}

// =============================================================================================== //
// ЛОГ
// =============================================================================================== //

$log = '';
foreach ($_POST as $name => $line) {
	$log .= $name .': '. $line ."\n";
}

$logname = "/tmp/test_ya.log";

if ($handle = fopen($logname, 'a+')) {

	fwrite(
		$handle,
		date('d.m.Y H:i:s') . " | " . $_SERVER['SCRIPT_FILENAME'] . "\n" .
		$hash . " --> " . $signature . " == " . $sign . "\n" .
		$hach_ok . "\n" .
		$log . "\n\n"
	);

	fclose($handle);
}

// 2026-05-29 Plutos
?>


https://yoomoney.ru/docs/wallet/using-api/notifica...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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