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 hàm.

Bắt đầu

1

Open the Webhook Section

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

Select Inngest

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

Create Inngest Function

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

Paste Webhook URL

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

Configure Transformation

Chỉnh sửa mã chuyển đổi để định dạng sự kiện phù hợp với hàm Inngest của bạn.
6

Test & Create

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

Done!

🎉 Các sự kiện thanh toán giờ sẽ tự động kích hoạt các hàm 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 tồn kho
  • Chào đón người đăng ký mới
  • Xử lý hủy đăng ký
  • Gửi nhắc nhở gia hạn
  • Cập nhật chu kỳ thanh toán
  • Xử lý thanh toán thất bại
  • Cập nhật số liệu doanh thu
  • Theo dõi hành vi khách hàng
  • Tạo báo cáo
  • Đồng bộ dữ liệu lên các nền tảng analytics
  • Tính toán tỷ lệ churn

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 nhận URL webhook chính xác và đang hoạt động
  • Kiểm tra hàm Inngest đã được triển khai và đang hoạt động
  • Đảm bảo tên sự kiện khớp với trình kích hoạt hàm
  • Xem lại nhật ký hàm Inngest để tìm lỗi
  • Kiểm tra cấu trúc payload phù hợp với mong đợi của Inngest
  • Xác minh tên sự kiện được định dạng đúng
  • Đảm bảo bao gồm tất cả trường bắt buộc
  • Thử nghiệm với công cụ kiểm tra webhook của Inngest