webhook yookassa

28 сентября 2023

Для того чтобы отслеживать изменения статуса платежа есть 2 пути.
Можно с какой-то периодичностью отправлять запрос в Юкасса и получать в ответе текущий статус платежа.
Другой вариант зарегистрировать в ЮKassa обработчик, который будет получать уведомления об изменении статуса платежа.

В личном кабинете Юкасса в разделе ИНТЕГРАЦИЯ -> HTTP-уведомления
вводим адрес обработчика на своем сайте и включаем события на которые он вызывается

Юкасса - webhook

Сайт должен работать по протоколу 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

Если нет времени и желания разбираться самостоятельно – обращайтесь

Наверх