跳转到主要内容
Checkout page
Dodo Payments 结账页面是面向数字产品和 SaaS 业务的转化优化、全球合规结账。它支持多种货币、语言、税费、折扣、附加项以及企业友好的合规模式。

自适应货币

自适应货币允许客户以他们首选的本地货币付款,从而提高信任度和转化率。

工作原理

  1. 启用:在您的业务设置中启用自适应货币
  2. 选择:客户可以在结账时直接切换货币
  3. 转换:价格使用实时外汇汇率动态转换
  4. 显示:最终应付金额在付款前透明显示
Currency selector on checkout

Adaptive Currency

了解更多支持的货币、兑换费用和退款处理。

多语言结账

Dodo Payments 在结账页面支持多种语言,允许客户以他们熟悉的语言完成支付。
Language selector on checkout

主要亮点

  • 结账时直接提供语言选择器
  • UI 文本、标签和系统消息已本地化
  • 提高可访问性和国际转化率

支持的语言

结账页面支持 21 种语言:
语言代码
阿拉伯语ar
加泰罗尼亚语ca
中文zh
荷兰语nl
英语en
法语fr
德语de
希伯来语he
印度尼西亚语id
意大利语it
日语ja
韩语ko
马来语ms
波兰语pl
葡萄牙语pt
罗马尼亚语ro
俄语ru
西班牙语es
瑞典语sv
泰语th
土耳其语tr
您可以在创建结账会话时设置 force_language 参数强制使用特定语言。详情请参见 Checkout Sessions API

自动税费计算

税费会根据客户的账单地址自动计算,确保符合 GST、VAT 和销售税要求,无需手动设置。

税费计算原理

1

Location Detection

税规则根据客户所在国家(及适用地区)应用。
2

Dynamic Updates

税额会在以下情况下自动更新:
  • 国家更改
  • 地址更新
3

Transparent Display

最终税费细目在付款前清晰展示。
税费计算完全自动化。标准数字商品和 SaaS 产品无需任何手动配置。

企业税号支持

对于注册企业,结账允许客户输入其企业税号(例如 VAT/GST 号)。

输入税号后发生什么

  • 实时验证税收资格
  • 应用适用的免税或反向收费规则
  • 结账时税额立即更新
Business Tax ID entry on checkout
这对于 B2B SaaS 和数字服务尤其有用,那里的企业客户可能有资格享受税收减免。

折扣码

客户可以在结账页直接使用您在仪表板中创建的折扣或促销代码。

结账体验

  1. 客户输入折扣码
  2. 折扣即时验证
  3. 清晰展示更新后的价格和节省金额
Discount code entry on checkout

API 集成

预先应用折扣码或启用折扣输入字段:
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  discount_code: 'WELCOME20', // Pre-apply a code
  feature_flags: {
    allow_discount_code: true // Show discount input field
  },
  return_url: 'https://yoursite.com/return'
});

Discount Codes

了解如何创建和管理折扣码。

Validate Discount by Code

使用代码名称查找并验证折扣。

智能地址收集

结账支持灵活的地址输入,加快完成速度。

可用选项

选项描述
Google 地址自动填充带自动完成功能的快速选择
手动输入可完全控制完整地址
国家选择驱动税务及合规逻辑
地址收集在速度、准确性和全球覆盖之间取得平衡,最大化转化同时确保合规。

自定义字段

在结账过程中通过定义自定义表单字段收集客户的额外信息。这对于收集公司名称、团队规模、推荐来源或任何其他业务特定信息非常有用。

可用字段类型

类型描述
text单行文本输入
number数值输入
email带验证的电子邮件地址
url带验证的网址
date日期选择器
dropdown从预定义选项中选择
boolean是/否 切换

示例

const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  custom_fields: [
    {
      key: 'company_name',
      label: 'Company Name',
      field_type: 'text',
      required: true
    },
    {
      key: 'team_size',
      label: 'Team Size',
      field_type: 'dropdown',
      required: true,
      options: ['1-10', '11-50', '51-200', '200+']
    }
  ],
  return_url: 'https://yoursite.com/return'
});
客户响应会自动包含在 webhook 有效负载(payment.succeededsubscription.active)以及通过 custom_field_responses 数组的 API 响应中。您可以为每个结账会话定义最多 5 个自定义字段。

Custom Fields Guide

了解自定义字段配置及获取响应的更多信息。

隐私政策与条款接受

为确保法律与合规透明:
这有助于满足全球消费者保护和数据隐私要求,包括 GDPR 合规。

产品组合结账

产品组合可提供统一的结账体验,客户可以在单个结账中查看并选择多个相关产品(例如 Starter、Pro、Enterprise 计划)。

工作原理

  1. 展示全部产品:客户可以看到集合中的所有激活产品
  2. 预先选择第一个产品:集合中的第一个产品会自动被选中
  3. 对比选项:客户可以在选择前比较定价和功能
  4. 单一选择:选定产品后,结账继续执行标准支付流程

创建产品组合结账

const session = await client.checkoutSessions.create({
  product_collection_id: 'pdc_abc123',
  product_cart: [], // Required: pass an empty array for collection checkout
  return_url: 'https://yoursite.com/return'
});
使用 product_collection_id 时,传入空 product_cart 数组。在会话创建时不能预先应用折扣码。

Product Collections

了解如何创建和管理产品组合以实现统一结账体验。

结账会话配置

使用 Checkout Sessions API 控制结账行为:
const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  customer: {
    email: 'customer@example.com',
    name: 'Jane Doe'
  },
  billing_currency: 'EUR', // Set specific currency
  discount_code: 'PROMO10',
  feature_flags: {
    allow_discount_code: true
  },
  return_url: 'https://yoursite.com/return',
  metadata: {
    order_ref: 'ORD-12345'
  }
});
付款后,客户会自动重定向到您的 return_url,并自动附加查询参数 —— 包括 payment_idsubscription_idstatusemaillicense_key(如适用)。完整列表请参见 Checkout Sessions guide

结账主题自定义

在通过 API 创建结账会话时,使用 customization.theme_config 参数自定义结账页面外观以匹配品牌。配置包括亮/暗模式的颜色、字体、边框半径和按钮文本。
Custom themed checkout page

Design & Theme Customization

从仪表板以可视方式配置主题,可使用预构建的主题、排版、颜色和实时预览。
本节介绍使用 customization.theme_config 进行的服务器端 API主题配置。如果您正在使用Checkout SDK(覆盖式或内嵌式结账),请参阅 Overlay CheckoutInline Checkout 中的主题自定义部分,这些部分使用 camelCase 属性(例如使用 bgPrimary 而不是 bg_primary)。

主题配置选项

属性描述
light亮色模式的颜色配置
dark暗色模式的颜色配置
font_primary_url主要字体的 URL
font_secondary_url次要字体的 URL
font_size字体大小:xssmmdlgxl2xl
font_weight字体粗细:normalmediumboldextraBold
radius用户界面元素的边角半径(例如 4px0.5rem8px
pay_button_text支付按钮的自定义文本(例如 “Complete Purchase”、“Subscribe Now”)

颜色配置(亮色/暗色模式)

每个模式(lightdark)都支持以下颜色属性:
属性描述
bg_primary背景主色
bg_secondary背景次色
text_primary文本主色
text_secondary文本次色
text_placeholder文本占位符颜色
text_error文本错误颜色
text_success文本成功颜色
border_primary边框主色
border_secondary边框次色
button_primary主按钮背景色
button_primary_hover主按钮悬停色
button_secondary次按钮背景色
button_secondary_hover次按钮悬停色
button_text_primary主按钮文本色
button_text_secondary次按钮文本色
input_focus_border输入框聚焦边框色
所有颜色字段均接受标准 CSS 颜色格式:
  • 十六进制:#fff#ffffff#ffffffff
  • RGB/RGBA:rgb(255, 255, 255)rgba(255, 255, 255, 0.5)
  • HSL/HSLA:hsl(120, 100%, 50%)hsla(120, 100%, 50%, 0.5)
  • 命名颜色:redbluetransparent

示例

const session = await client.checkoutSessions.create({
  product_cart: [
    { product_id: 'prod_abc', quantity: 1 }
  ],
  customization: {
    theme_config: {
      // Custom fonts
      font_primary_url: 'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap',
      font_size: 'md',
      font_weight: 'medium',
      radius: '8px',
      pay_button_text: 'Complete Purchase',
      
      // Light mode colors
      light: {
        bg_primary: '#ffffff',
        bg_secondary: '#f5f5f5',
        text_primary: '#1a1a1a',
        text_secondary: '#666666',
        button_primary: '#0066ff',
        button_primary_hover: '#0052cc',
        button_text_primary: '#ffffff',
        border_primary: '#e0e0e0'
      },
      
      // Dark mode colors
      dark: {
        bg_primary: '#1a1a1a',
        bg_secondary: '#2d2d2d',
        text_primary: '#ffffff',
        text_secondary: '#a0a0a0',
        button_primary: '#3385ff',
        button_primary_hover: '#4d99ff',
        button_text_primary: '#ffffff',
        border_primary: '#404040'
      }
    }
  },
  return_url: 'https://yoursite.com/return'
});
您无需指定所有颜色属性。任何未指定的属性都将使用默认主题值。