Задать вопрос
blackdarthvader
@blackdarthvader
Только учусь кодить ^_^

Почему яндекс присылает не понятный ответ в http уведомлении от платеже?

Привет. Столкнулся с такой проблемой, хочу принимать на своем сайте платежи, посылаю себе тестовое уведомление о платеже, яндекс мне присылает ответ в непонятном мне формате, не пойму почему.

Пример обработчика
$secret = '000000000000000000000000'; 
$r = array(
	'notification_type' => $_POST['notification_type'], 
	'operation_id'      => $_POST['operation_id'],      
	'amount'            => $_POST['amount'],       
	'withdraw_amount'   => $_POST['withdraw_amount'],   
	'currency'          => $_POST['intval'],          
	'datetime'          => $_POST['datetime'],       
	'sender'            => $_POST['sender'],            
	'codepro'           => $_POST['codepro'],      
	'label'             => $_POST['label'],            
	'sha1_hash'         => $_POST['sha1_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 не совпадает.');
}

file_put_contents('history.php', $r . PHP_EOL , FILE_APPEND);


Открываю файл history.php, чтобы посмотреть что там прислал мне яндекс, а там такая вот штука
a:1:{i:0;a:11:{s:17:"notification_type";s:12:"p2p-incoming";s:6:"amount";s:6:"343.83";s:8:"datetime";s:20:"2017-03-22T07:34:08Z";s:7:"codepro";s:5:"false";s:6:"sender";s:11:"41001000040";s:9:"sha1_hash";s:40:"ab0760f1a82db2bd56ab897b9d8b3090803a8a24";s:17:"test_notification";s:4:"true";s:15:"operation_label";s:0:"";s:12:"operation_id";s:17:"test-notification";s:8:"currency";s:3:"643";s:5:"label";s:0:"";}}

Что я делаю не так?

Пробую через функцию unserialize, если я обрабатываю то, что записалось в файл, а именно вот это
a:1:{i:0;a:11:{s:17:"notification_type";s:12:"p2p-incoming";s:6:"amount";s:6:"343.83";s:8:"datetime";s:20:"2017-03-22T07:34:08Z";s:7:"codepro";s:5:"false";s:6:"sender";s:11:"41001000040";s:9:"sha1_hash";s:40:"ab0760f1a82db2bd56ab897b9d8b3090803a8a24";s:17:"test_notification";s:4:"true";s:15:"operation_label";s:0:"";s:12:"operation_id";s:17:"test-notification";s:8:"currency";s:3:"643";s:5:"label";s:0:"";}}

Вот так
$data = unserialize('a:1:{i:0;a:11:{s:17:"notification_type";s:12:"p2p-incoming";s:6:"amount";s:6:"475.02";s:8:"datetime";s:20:"2017-03-22T07:57:29Z";s:7:"codepro";s:5:"false";s:6:"sender";s:11:"41001000040";s:9:"sha1_hash";s:40:"cfff3e99ad82fe74802802a4cb7d8838f69440ae";s:17:"test_notification";s:4:"true";s:15:"operation_label";s:0:"";s:12:"operation_id";s:17:"test-notification";s:8:"currency";s:3:"643";s:5:"label";s:0:"";}}');
echo "<pre>";
print_r($data);
echo "</pre>";

То на выходе получаем вот это
Array
(
    [0] => Array
        (
            [notification_type] => p2p-incoming
            [amount] => 475.02
            [datetime] => 2017-03-22T07:57:29Z
            [codepro] => false
            [sender] => 41001000040
            [sha1_hash] => cfff3e99ad82fe74802802a4cb7d8838f69440ae
            [test_notification] => true
            [operation_label] => 
            [operation_id] => test-notification
            [currency] => 643
            [label] => 
        )

)

Но если я пытаюсь сделать это же самое при обработке ответа, то ничего не получается и в файл пишется то же самое.

Вот так обрабатываю ответ, например хочу узнать отправителя.
$data = unserialize($r);
file_put_contents('history.php', $data[0]['sender'] . PHP_EOL , FILE_APPEND);

получаю
a:1:{i:0;a:11:{s:17:"notification_type";s:12:"p2p-incoming";s:6:"amount";s:6:"475.02";s:8:"datetime";s:20:"2017-03-22T07:57:29Z";s:7:"codepro";s:5:"false";s:6:"sender";s:11:"41001000040";s:9:"sha1_hash";s:40:"cfff3e99ad82fe74802802a4cb7d8838f69440ae";s:17:"test_notification";s:4:"true";s:15:"operation_label";s:0:"";s:12:"operation_id";s:17:"test-notification";s:8:"currency";s:3:"643";s:5:"label";s:0:"";}}
  • Вопрос задан
  • 791 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 2
blackdarthvader
@blackdarthvader Автор вопроса
Только учусь кодить ^_^
Рабочий код, может пригодится кому

$key = '000000000000000000000000';
$id      =trim($_POST['label']);    
$order   =trim($_POST['operation_id']);       
$payer   =trim($_POST['sender']);      
$odate   =trim($_POST['datetime']);   
$code    =trim($_POST['codepro']);       
$amount  =trim($_POST['amount']);    
$wamount =trim($_POST['withdraw_amount']);   
$cur     =trim($_POST['currency']);   
$type    =trim($_POST['notification_type']);  
$hash    =trim($_POST['sha1_hash']);

$hash_gen = hash("sha1", $type.'&'.$order.'&'.$amount.'&'.$cur.'&'.$odate.'&'.$payer.'&'.$code.'&'.$key.'&'.$id);
if($hash_gen!=$hash) {
    file_put_contents('history.txt', 'ошибка', FILE_APPEND);
}

file_put_contents('history.txt', $amount, FILE_APPEND);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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