Chuyển đến nội dung chính

Documentation Index

Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt

Use this file to discover all available pages before exploring further.

Sự kiện Khôi phục Giỏ hàng Bị bỏ quên

Các sự kiện webhook dưới đây theo dõi vòng đời khôi phục giỏ hàng bị bỏ quên:
Sự kiệnMô tả
abandoned_checkout.detectedĐã phát hiện một thanh toán bị bỏ quên. Được gửi khi một thanh toán được xác định là bị bỏ quên (thất bại hoặc chưa hoàn thành) và quy trình khôi phục bắt đầu.
abandoned_checkout.recoveredKhách hàng đã hoàn tất thanh toán qua liên kết khôi phục. Trường recovered_payment_id chứa ID thanh toán thành công.

Trường Payload Thanh toán Bị bỏ quên

payment_id
string
bắt buộc
Thanh toán gốc đã bị bỏ quên. Sử dụng thông tin này để tra cứu chi tiết sản phẩm, số tiền và đơn vị tiền tệ.
customer_id
string
bắt buộc
Khách hàng đã bỏ quên thanh toán.
abandonment_reason
string
bắt buộc
Lý do thanh toán bị bỏ quên. Một trong các lý do:
  • payment_failed — Khách hàng đã thử thanh toán nhưng thất bại
  • checkout_incomplete — Khách hàng đã truy cập thanh toán nhưng không thử thanh toán
status
string
bắt buộc
Trạng thái vòng đời hiện tại của nỗ lực khôi phục này. Một trong các trạng thái:
  • abandoned — Đã phát hiện, chưa gửi email
  • recovering — Đã gửi ít nhất một email khôi phục
  • recovered — Khách hàng đã hoàn tất thanh toán
  • exhausted — Đã gửi tất cả email hoặc đã tìm thấy thanh toán mới hơn
  • opted_out — Khách hàng đã hủy đăng ký
abandoned_at
string
bắt buộc
Dấu thời gian ISO 8601 khi phát hiện thanh toán bị bỏ quên.
recovered_payment_id
string | null
ID thanh toán của lần khôi phục thanh toán thành công. null cho đến khi thanh toán được khôi phục.

Ví dụ: Xử lý ACR Webhooks

app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'abandoned_checkout.detected':
      console.log(`Checkout abandoned: ${event.data.payment_id}`);
      console.log(`Reason: ${event.data.abandonment_reason}`);
      // Track abandonment in your analytics
      await trackAbandonment(event.data);
      break;

    case 'abandoned_checkout.recovered':
      console.log(`Checkout recovered: ${event.data.payment_id}`);
      console.log(`Recovery payment: ${event.data.recovered_payment_id}`);
      // Grant access, update records
      await handleRecovery(event.data);
      break;
  }

  res.json({ received: true });
});

Sự kiện Dunning

Các sự kiện webhook dưới đây theo dõi vòng đời dunning đăng ký:
Sự kiệnMô tả
dunning.startedMột nỗ lực dunning đã được tạo ra cho một đăng ký đã vào on_hold hoặc bị khách hàng hủy bỏ.
dunning.recoveredKhách hàng đã cập nhật phương thức thanh toán của họ và thanh toán kết quả thành công. Trường payment_id chứa ID thanh toán thành công.

Trường Payload Nỗ Lực Dunning

subscription_id
string
bắt buộc
Đăng ký đã kích hoạt nỗ lực dunning.
customer_id
string
bắt buộc
Khách hàng sở hữu đăng ký.
trigger_state
string
bắt buộc
Trạng thái đăng ký kích hoạt dunning. Một trong các trạng thái:
  • on_hold — Đăng ký bị tạm dừng do thất bại thanh toán
  • cancelled — Khách hàng hủy từ cổng thông tin khách hàng
status
string
bắt buộc
Trạng thái vòng đời hiện tại của nỗ lực dunning này. Một trong các trạng thái:
  • recovering — Đang gửi email dunning
  • recovered — Khách hàng cập nhật phương thức thanh toán và thanh toán thành công
  • exhausted — Đã gửi tất cả email hoặc trạng thái đăng ký thay đổi
created_at
string
bắt buộc
Dấu thời gian ISO 8601 khi nỗ lực dunning được tạo ra.
payment_id
string | null
ID thanh toán của lần khôi phục thanh toán thành công. null trong khi khôi phục.

Ví dụ: Xử lý Dunning Webhooks

app.post('/webhooks/dodo', async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case 'dunning.started':
      console.log(`Dunning started for subscription: ${event.data.subscription_id}`);
      console.log(`Trigger: ${event.data.trigger_state}`);
      // Track dunning in your system
      await trackDunning(event.data);
      break;

    case 'dunning.recovered':
      console.log(`Subscription recovered: ${event.data.subscription_id}`);
      console.log(`Recovery payment: ${event.data.payment_id}`);
      // Reactivate access, update records
      await handleDunningRecovery(event.data);
      break;
  }

  res.json({ received: true });
});
Đăng ký cả hai dunning.starteddunning.recovered để theo dõi toàn bộ vòng đời dunning. Sử dụng dunning.started để tạm dừng thời gian ân hạn hoặc gắn cờ cho các đăng ký có nguy cơ trong hệ thống của bạn.

Abandoned Cart Recovery

Cấu hình chuỗi email ACR và các ưu đãi giảm giá.

Subscription Dunning

Cấu hình chuỗi email dunning cho các đăng ký bị gián đoạn.

Subscription Webhooks

Các sự kiện vòng đời đăng ký liên quan như subscription.on_holdsubscription.cancelled.

Mô Hình Dữ Liệu Webhook

Webhook payload for abandoned_checkout.detected and abandoned_checkout.recovered events

abandoned_at
string<date-time>
bắt buộc
abandonment_reason
enum<string>
bắt buộc
Tùy chọn có sẵn:
payment_failed,
checkout_incomplete
customer_id
string
bắt buộc
payment_id
string
bắt buộc
status
enum<string>
bắt buộc
Tùy chọn có sẵn:
abandoned,
recovering,
recovered,
exhausted,
opted_out
recovered_payment_id
string | null
Last modified on May 4, 2026