MaxxxNSK
@MaxxxNSK
очень начинающий

Как обработать неуспешные транзакции в Яндекс.Кассе?

Взял готовый код paymentaviso.php и checkorder.php и слегка доделал под себя:
$hash = md5($_POST['action'].';'.$_POST['orderSumAmount'].';'.$_POST['orderSumCurrencyPaycash'].';'.$_POST['orderSumBankPaycash'].';'.$configs['shopId'].';'.$_POST['invoiceId'].';'.$_POST['customerNumber'].';'.$configs['ShopPassword']);		
	if (strtolower($hash) != strtolower($_POST['md5'])){ 
		$code = 1;
	}
	else {
		$code = 0;
	}
	if($code == 0){	
		$id = explode('_', $_POST['customerNumber']);
		if($id){
			$id_u = gImg($id[1]);
			file_put_contents('historyPay.php', $_POST['requestDatetime']. ' от ' .$id_u['id']. PHP_EOL, FILE_APPEND);
			obNull($id_u['id'],$id_u['ochk']);
		}
	}
	print '<?xml version="1.0" encoding="UTF-8"?>';
	print '<paymentAvisoResponse performedDatetime="'. $_POST['requestDatetime'] .'" code="'.$code.'" invoiceId="'. $_POST['invoiceId'] .'" shopId="'. $configs['shopId'] .'"/>';


Через customerNumber передаю time() + _ id пользователя. Потом уже в тут выделяю id и через функцию obNull обнуляю то, за что беру деньги. Вот.

А теперь вопрос:
Во время проведения тестовых платежей менялись сумма и customerNumber. Теперь в личном кабинете эти тестовые платежи в статусе "в обработке", однако по ним постоянно приходят запросы в файл paymentaviso.php. Скрипт их понимает, выполняет, а их статус не меняется. Тех. поддержка говорит, что ошибка в скрипте. Как поменять их статус как можно быстрее в "не выполненные" (чтобы они уже не обращались ко мне) или отдавать им нужный код результата обработки запроса?
  • Вопрос задан
  • 452 просмотра
Решения вопроса 1
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
У яндекса есть timeout на ответ. Может при ответе превышен этот лимит ожидания? И проблема не в скрипте, а просто в том что они (касса) не дожидается ответа, при определенных условиях. Гляньте логи.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@formasha
Яндекс.Деньги
По этой проблеме поддержка подсказывает вот что:

1. С запросом checkOrder мы можем придти больше чем 1 раз, бывают 1-2 повтора, не более.
2. С запросом paymentAviso, если на наш первый запрос вы не ответили кодом "0", система будет пытаться доставить еще 6 раз.

Т.е. единственный способ прекратить доставку Авизо (речь только о нем) - ответить кодом "0". Все остальные коды ответов, включая недоступность хоста, будут рассчитаны как ошибка приема зачисления и повтор доставки Авизо будет выполнен еще раз. На седьмой раз, получил любой код, кроме "0", наша система прекратит доставку Авизо и средства за платеж будут возвращены плательщику.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы