Отмена платежа
Шаги для отмены платежа
В этом разделе мы рассмотрим, как отменить платеж, который был создан ранее. Это полезно, если, например, заказ отменен и продавец не собирается обрабатывать платеж.
Вызов метода для отмены платежа
Для отмены платежа необходимо предоставить только идентификатор платежа.
Используйте метод 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" (платеж, ожидающий захвата средств).