webhook yookassa
28 сентября 2023Для того чтобы отслеживать изменения статуса платежа есть 2 пути.
Можно с какой-то периодичностью отправлять запрос в Юкасса и получать в ответе текущий статус платежа.
Другой вариант зарегистрировать в ЮKassa обработчик, который будет получать уведомления об изменении статуса платежа.
В личном кабинете Юкасса в разделе ИНТЕГРАЦИЯ -> HTTP-уведомления
вводим адрес обработчика на своем сайте и включаем события на которые он вызывается
Сайт должен работать по протоколу HTTPS, TCP-порт 443 или 8443.
Обработчик – отдельный php скрипт, вообще говоря не связанный с остальным сайтом.
Пример уведомления в виде json выглядит так
{
"type": "notification",
"event": "payment.waiting_for_capture",
"object": {
"id": "22d6d597-000f-5000-9000-145f6df21d6f",
"status": "waiting_for_capture",
"paid": true,
"amount": {
"value": "2.00",
"currency": "RUB"
},
"authorization_details": {
"rrn": "10000000000",
"auth_code": "000000",
"three_d_secure": {
"applied": true
}
},
"created_at": "2018-07-10T14:27:54.691Z",
"description": "Заказ №72",
"expires_at": "2018-07-17T14:28:32.484Z",
"metadata": {},
"payment_method": {
"type": "bank_card",
"id": "22d6d597-000f-5000-9000-145f6df21d6f",
"saved": false,
"card": {
"first6": "555555",
"last4": "4444",
"expiry_month": "07",
"expiry_year": "2021",
"card_type": "MasterCard",
"issuer_country": "RU",
"issuer_name": "Sberbank"
},
"title": "Bank card *4444"
},
"refundable": false,
"test": false
}
}
https://site.ru/vh-payment/yk-hook.php
<?php
// приходит json объект от yooKassa
$input = file_get_contents( 'php://input' );
// объект перекодируется в массив
$requestBody = json_decode( $input, true );
// имя файла - id транзакции yooKassa
// типа - 22d6d597-000f-5000-9000-145f6df21d6f.json
$jsonFile = 'payment-json/' . $requestBody['object']['id'] . '.json';
// сохраняется платеж в формате json в папке /payment-json/
file_put_contents( $jsonFile, $input );
// Здесь что-то делаем с данными
// получаем статус платежа
// payment.waiting_for_capture/payment.succeeded/payment.canceled/refund.succeeded
$paymentstatus = $requestBody['object']['status'];
// Обязательно возвращаем ответ yooKassa
header("HTTP/1.0 200 OK");
exit;
Этот обработчик просто сохранит в каталоге https://site.ru/vh-payment/payment-json/ объект от Юкасса в отдельном файле id-объекта.json (типа – 22d6d597-000f-5000-9000-145f6df21d6f.json)
https://site.ru/vh-payment/payment-json/22d6d597-000f-5000-9000-145f6df21d6f.json
В обработчике можно проверить подлинность уведомления юкасса, изменить статус платежа в базе данных сайта, если она ведется, направить письмо (email) или telegram-уведомление плательщику и т.д.
Документация по уведомлениям (webhooks yookassa) – https://yookassa.ru/developers/using-api/webhooks
Если нет времени и желания разбираться самостоятельно – обращайтесь