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

Giới thiệu

Thực thi các chức năng serverless và công việc nền tự động khi xảy ra các sự kiện thanh toán. Xử lý thanh toán, gửi thông báo, cập nhật cơ sở dữ liệu và chạy các quy trình phức tạp với nền tảng thực thi chức năng đáng tin cậy của Inngest.
Tích hợp này yêu cầu URL webhook Inngest của bạn từ cấu hình chức năng.

Bắt đầu

1

Mở phần Webhook

Trong bảng điều khiển Dodo Payments của bạn, điều hướng đến Webhooks → + Thêm Điểm cuối và mở rộng menu thả xuống tích hợp.
Thêm Điểm cuối và menu thả xuống tích hợp
2

Chọn Inngest

Chọn thẻ tích hợp Inngest.
3

Tạo Chức năng Inngest

Trong Inngest, tạo một chức năng mới và sao chép URL webhook từ cấu hình chức năng.
4

Dán URL Webhook

Dán URL webhook Inngest vào cấu hình điểm cuối.
5

Cấu hình Biến đổi

Chỉnh sửa mã biến đổi để định dạng các sự kiện cho chức năng Inngest của bạn.
6

Kiểm tra & Tạo

Kiểm tra với các payload mẫu và nhấp vào Tạo để kích hoạt tích hợp.
7

Xong!

🎉 Các sự kiện thanh toán giờ đây sẽ tự động kích hoạt các chức năng Inngest của bạn.

Ví dụ Mã Biến đổi

Payload Sự kiện Cơ bản

basic_event.js
function handler(webhook) {
  if (webhook.eventType === "payment.succeeded") {
    const p = webhook.payload.data;
    webhook.payload = {
      name: "payment.succeeded",
      data: {
        payment_id: p.payment_id,
        amount: (p.total_amount / 100).toFixed(2),
        currency: p.currency || "USD",
        customer_email: p.customer.email,
        customer_name: p.customer.name,
        payment_method: p.payment_method || "unknown"
      },
      user: {
        email: p.customer.email
      },
      ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
    };
  }
  return webhook;
}

Bộ xử lý Sự kiện Đăng ký

subscription_event.js
function handler(webhook) {
  const s = webhook.payload.data;
  switch (webhook.eventType) {
    case "subscription.active":
      webhook.payload = {
        name: "subscription.started",
        data: {
          subscription_id: s.subscription_id,
          customer_email: s.customer.email,
          customer_name: s.customer.name,
          product_id: s.product_id,
          amount: (s.recurring_pre_tax_amount / 100).toFixed(2),
          frequency: s.payment_frequency_interval,
          next_billing: s.next_billing_date
        },
        user: {
          email: s.customer.email
        },
        ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
      };
      break;
    case "subscription.cancelled":
      webhook.payload = {
        name: "subscription.cancelled",
        data: {
          subscription_id: s.subscription_id,
          customer_email: s.customer.email,
          cancelled_at: s.cancelled_at,
          cancel_at_next_billing: s.cancel_at_next_billing_date
        },
        user: {
          email: s.customer.email
        },
        ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
      };
      break;
  }
  return webhook;
}

Bộ xử lý Sự kiện Tranh chấp

dispute_event.js
function handler(webhook) {
  if (webhook.eventType.startsWith("dispute.")) {
    const d = webhook.payload.data;
    webhook.payload = {
      name: webhook.eventType,
      data: {
        dispute_id: d.dispute_id,
        payment_id: d.payment_id,
        amount: (d.amount / 100).toFixed(2),
        status: d.dispute_status,
        stage: d.dispute_stage,
        remarks: d.remarks || "",
        urgent: webhook.eventType === "dispute.opened"
      },
      user: {
        email: d.customer?.email || "unknown"
      },
      ts: Math.floor(new Date(webhook.payload.timestamp).getTime() / 1000)
    };
  }
  return webhook;
}

Các Trường hợp Sử dụng Inngest Thông thường

  • Gửi email xác nhận
  • Cập nhật hồ sơ khách hàng
  • Xử lý hoàn tiền
  • Tạo hóa đơn
  • Cập nhật hàng tồn kho
  • Chào mừng các thuê bao mới
  • Xử lý hủy bỏ
  • Gửi nhắc nhở gia hạn
  • Cập nhật chu kỳ thanh toán
  • Xử lý các khoản thanh toán không thành công
  • Cập nhật các chỉ số doanh thu
  • Theo dõi hành vi khách hàng
  • Tạo báo cáo
  • Đồng bộ dữ liệu với các nền tảng phân tích
  • Tính toán tỷ lệ rời bỏ

Mẹo

  • Sử dụng tên sự kiện mô tả để tổ chức chức năng tốt hơn
  • Bao gồm ngữ cảnh người dùng cho việc thực thi chức năng
  • Đặt dấu thời gian chính xác cho việc sắp xếp sự kiện
  • Cấu trúc dữ liệu nhất quán giữa các sự kiện
  • Sử dụng các tính năng thử lại và xử lý lỗi của Inngest

Khắc phục sự cố

  • Xác minh URL webhook là chính xác và đang hoạt động
  • Kiểm tra rằng chức năng Inngest đã được triển khai và đang hoạt động
  • Đảm bảo tên sự kiện khớp với các kích hoạt chức năng
  • Xem nhật ký chức năng Inngest để tìm lỗi
  • Kiểm tra cấu trúc payload khớp với mong đợi của Inngest
  • Xác minh tên sự kiện được định dạng đúng
  • Đảm bảo tất cả các trường cần thiết đều được bao gồm
  • Kiểm tra với công cụ kiểm tra webhook của Inngest