Входящие уведомления
Если вы хотите отслеживать состояние платежей и возвратов, вы можете подписаться на уведомления (webhook, callback).
Уведомления пригодятся в тех случаях, когда объект API изменяется без вашего участия. Например, если пользователю нужно подтвердить платеж, процесс оплаты может занять от нескольких минут до нескольких часов. Вместо того, чтобы всё это время периодически отправлять GET-запросы , чтобы узнать статус платежа, вы можете просто дожидаться уведомления от Яндекс.Кассы.
 Доступные события
Сейчас Яндекс.Касса может уведомлять о таких событиях:
СобытиеОписание
payment.waiting_for_captureплатеж перешел в статус
waiting_for_capture
payment.succeededплатеж перешел в статус
succeeded
payment.canceledплатеж перешел в статус
canceled
refund.succeededвозврат перешел в статус
succeeded
Яндекс.Касса пришлет вам уведомление, как только платеж или возврат перейдет в нужный статус.
Подробнее о статусах платежа
 Настройка
Если хотите получать уведомления от Яндекс.Кассы, нужно подписаться на них в личном кабинете. Для этого в настройках магазина, в разделе HTTP-уведомления, укажите URL для уведомлений и события, которые хотите отслеживать.
URL для уведомлений должен начинаться с https — это значит, что ваш сайт защищен SSL-сертификатом. Сертификат подойдет любой: самоподписанный или выданный центром сертификации.
Минимальная версия SSL/TLS — TLS v1.2
 Для партнеров
Если вы участвуете в партнерской программе Яндекс.Кассы, вам нужно подписываться на уведомления по API.
Для каждого события, которое вы хотите отслеживать, необходимо создать объект webhook . Для этого передайте в запросе  событие, на которое вы хотите подписаться, и URL для уведомлений.
Для каждого OAuth-токена нужно создавать свой набор webhook.
Пример запроса на создание объекта webhook
cURL
PHP
Python
curl https://payment.yandex.net/api/v3/webhooks \
  -X POST \
  -H 'Authorization: Bearer <oauth_token>' \
  -H 'Idempotence-Key: <Ключ идемпотентности>' \
  -H 'Content-Type: application/json' \
  -d '{
        "event": "payment.succeeded",
        "url": "https://www.merchant-website.com/notification_url"
      }'
Пример тела ответа
JSON
{
  "id": "wh-e44e8088-bd73-43b1-959a-954f3a7d0c54",
  "event": "payment.succeeded",
  "url": "https://www.merchant-website.com/notification_url"
}
Вы можете посмотреть список созданных webhook  и удалить  те, которые не нужны.
Уведомления будут приходить только для тех объектов, которые созданы вашим приложением.
 Использование
Как только произойдет событие, на которое вы подписались, на URL, который вы указали при настройке, придет уведомление. В нем будут все данные об объекте на момент, когда произошло событие.
Пример тела уведомления payment.waiting_for_capture
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"
    },
    "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,
    "requestor": {
      "type": "merchant",
      "account_id": "100001"
    },
    "test": false
  }
}
Вам нужно подтвердить, что вы получили уведомление. Для этого ответьте HTTP-кодом
200
. Яндекс.Касса проигнорирует всё, что будет находиться в теле или заголовках ответа. Ответы с любыми другими HTTP-кодами будут считаться невалидными, и Яндекс.Касса продолжит доставлять уведомление в течение 24 часов, начиная с момента, когда событие произошло.
Когда получите уведомление, проверьте текущий статус объекта (запросив информацию о нём GET-методом ). Статус объекта должен совпадать со статусом из уведомления.
Кроме того, мы рекомендуем проверять IP-адрес, с которого пришло уведомление. Он должен быть одним из списка:
  • 185.71.76.0/27
  • 185.71.77.0/27
  • 77.75.153.0/25
  • 77.75.154.128/25
  • 2a02:5180:0:1509::/64
  • 2a02:5180:0:2655::/64
  • 2a02:5180:0:1533::/64
  • 2a02:5180:0:2669::/64
Это поможет защититься от атак при помощи поддельных уведомлений.
 Обработка с помощью SDK
Вы можете обрабатывать уведомления с помощью наших серверных SDK:
  1. Получите данные из POST-запроса от Яндекс.Кассы.
  2. Создайте объект класса уведомлений в зависимости от события.
  3. Получите объект платежа.
Пример обработки уведомления с помощью SDK
PHP
Python
// Получите данные из POST-запроса от Яндекс.Кассы

<?php
    $source = file_get_contents('php://input');
    $requestBody = json_decode($source, true);
?>

// Создайте объект класса уведомлений в зависимости от события
// NotificationSucceeded, NotificationWaitingForCapture,
// NotificationCanceled,  NotificationRefundSucceeded

<?php
    use YandexCheckout\Model\Notification\NotificationSucceeded;
    use YandexCheckout\Model\Notification\NotificationWaitingForCapture;
    use YandexCheckout\Model\NotificationEventType;

    try {
      $notification = ($requestBody['event'] === NotificationEventType::PAYMENT_SUCCEEDED)
        ? new NotificationSucceeded($requestBody)
        : new NotificationWaitingForCapture($requestBody);
    } catch (Exception $e) {
        // Обработка ошибок при неверных данных
    }
?>

// Получите объект платежа

<?php
    $payment = $notification->getObject();
?>
 Что почитать еще
Получение информации о платежеИспользование SDKЖизненный цикл платежа