Подтверждение платежа
Шаги для подтверждения (захвата) платежа
В этом разделе мы рассмотрим, как подтвердить (или захватить) платеж, который был ранее создан. Этот процесс обычно выполняется после того, как заказ подтвержден, и продавец готов забрать средства с клиента.
Вызов метода для захвата платежа
Для захвата платежа необходимо указать идентификатор платежа.
Используйте метод capturePayment для захвата средств с карты клиента. Метод отправит запрос на сервер Yookassa и вернет обновленную информацию о платеже.
import { YookassaService } from 'nestjs-yookassa';
@Injectable()
export class PaymentService {
constructor(private readonly yookassaService: YookassaService) {}
async capturePayment() {
const paymentId = '123456'
const capturedPayment = await this.yookassaService.capturePayment(paymentId);
return capturedPayment
}
}
Обработка ответа от API
Ответ от Yookassa после захвата платежа содержит информацию о платеже, включая его обновлённый статус, сумму и другие важные данные. Пример ответа:
{
"id": "32f3dce3-e775-424f-a265-4e1e86e3db08", // Идентификатор платежа
"status": "pending", // Статус платежа
"amount": {
"value": "100.00", // Сумма платежа
"currency": "RUB" // Валюта платежа
},
"income_amount": {
"value": "96.50", // Сумма, фактически полученная магазином (с учетом комиссии)
"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" // Номер счета, с которого был произведен платеж
},
"captured_at": "2025-01-17T11:45:09.367Z", // Дата и время захвата платежа
"created_at": "2025-01-17T11:38:48.411Z", // Дата и время создания платежа
"test": true, // Флаг, показывающий, что это тестовый платеж (не реальный).
"refunded_amount": {
"value": "0.00", // Сумма возврата
"currency": "RUB" // Валюта суммы возврата
},
"paid": true, // Платеж был произведен (true - да)
"refundable": true, // Платеж можно вернуть (true - да)
"metadata": {
"order_id": "12345678" // Дополнительные метаданные, предоставленные при создании платежа (например, ID заказа).
}
}
Если платеж успешно захвачен, вы получите информацию с обновленным статусом платежа и временем захвата. В случае ошибки будет выброшено исключение с описанием ошибки.
Возможные статусы платежа
- pending — Платеж ожидает обработки.
- waiting_for_capture — Платеж ожидает захвата средств.
- succeeded — Платеж успешно завершен.
- canceled — Платеж был отменен.
Возможные ошибки
При попытке захватить платеж, который ещё не был подтвержден или оплачен, может возникнуть ошибка. Пример ошибки:
{
"statusCode": 400,
"message": "Incorrect payment_id. Payment doesn't exist or access denied. Specify the payment ID created in your store."
}
Эта ошибка возникает, когда пытаются подтвердить или захватить платеж, который ещё не был оплачен. Убедитесь, что вы выполняете захват платежа только после того, как он будет подтвержден и средства будут зарезервированы.