Отмена платежа

Шаги для отмены платежа

В этом разделе мы рассмотрим, как отменить платеж, который был создан ранее. Это полезно, если, например, заказ отменен и продавец не собирается обрабатывать платеж.

Вызов метода для отмены платежа

Для отмены платежа необходимо предоставить только идентификатор платежа.

Используйте метод cancelPayment для отмены платежа. Метод отправит запрос на сервер Yookassa и вернет обновленную информацию о статусе отмененного платежа.

import { YookassaService } from 'nestjs-yookassa';
 
@Injectable()
export class PaymentService {
	constructor(private readonly yookassaService: YookassaService) {}
 
	async cancelPayment() {
		const paymentId = '123456'
 
		const canceledPayment = await this.yookassaService.cancelPayment(paymentId);
 
		return canceledPayment
	}
}

Обработка ответа от API

Ответ от Yookassa после отмены платежа будет содержать обновленную информацию о платеже, включая его статус. Пример ответа:

{
	"id": "32f3dce3-e775-424f-a265-4e1e86e3db08", // Идентификатор платежа
	"status": "canceled", // Статус платежа
	"amount": {
		"value": "100.00", // Сумма платежа
		"currency": "RUB" // Валюта платежа
	},
	"description": "Test payment", // Описание платежа
	"recipient": {
		"account_id": "1234567", // Идентификатор аккаунта получателя (магазина)
		"gateway_id": "1234567" // Идентификатор шлюза получателя
	},
	"payment_method": {
		"type": "yoo_money", // Тип метода оплаты
		"id": "32f3dce3-e775-424f-a265-4e1e86e3db08", // Идентификатор метода платежа
		"saved": false, // Флаг, указывающий, сохранены ли данные карты (если применимо)
		"status": "inactive" // Статус метода оплаты
		"title": "YooMoney wallet 111111111111111", // Название способа оплаты
		"account_number": "111111111111111" // Номер счета, с которого был произведен платеж
	},
	"created_at": "2025-01-17T12:04:48.325Z", // Дата и время создания платежа
	"test": true, // Флаг, показывающий, что это тестовый платеж (не реальный).
	"paid": false, // Статус оплаты. `false` означает, что средства еще не были списаны.
	"refundable": false, // Флаг, указывающий, можно ли вернуть средства по данному платежу.
	"metadata": {
		"order_id": "12345678" // Дополнительные метаданные, предоставленные при создании платежа (например, ID заказа).
	},
	"cancellation_details": {
		"party": "merchant", // Сторона, инициировавшая отмену ("merchant" - продавец)
		"reason": "canceled_by_merchant" // Причина отмены ("canceled_by_merchant" - отменен продавцом)
	}
}

После отмены платежа его статус будет изменен на canceled. Вы также получите другие данные о платеже, такие как сумма и информация о получателе.

Возможные статусы платежа

  • pending — Платеж ожидает обработки.
  • waiting_for_capture — Платеж ожидает захвата средств.
  • succeeded — Платеж успешно завершен.
  • canceled — Платеж был отменен.

Возможные ошибки

При попытке отменить платеж, который уже был подтвержден и завершен, может возникнуть следующая ошибка:

{
	"statusCode": 400,
	"message": "You can't cancel a payment with this status. You can only cancel payments with the waiting_for_capture status."
}

Эта ошибка возникает, если вы пытаетесь отменить платеж, который уже был подтвержден или завершен. Платежи с такими статусами, как "SUCCEEDED" или "PAID", не могут быть отменены. Для отмены доступен только статус "WAITING_FOR_CAPTURE" (платеж, ожидающий захвата средств).