Skip to main content

概述

内嵌结账让您可以创建与您的网站或应用程序无缝融合的完全集成的结账体验。与在页面顶部弹出模式显示的覆盖结账不同,内嵌结账将支付表单直接嵌入到页面布局中。 使用内嵌结账,您可以:
  • 创建与您的应用或网站完全集成的结账体验
  • 让 Dodo Payments 在优化的结账框中安全捕获客户和支付信息
  • 在您的页面上显示来自 Dodo Payments 的商品、总价和其他信息
  • 使用 SDK 方法和事件构建高级结账体验
Inline Checkout Cover Image

工作原理

内嵌结账通过在您的网站或应用中嵌入一个安全的 Dodo Payments 框架来工作。 结账框负责收集客户信息和捕获支付细节。您的页面显示商品列表、总价和更改选项的选项。SDK 允许您的页面与结账框进行交互。 Dodo Payments 在结账完成后自动创建一个订阅,供您配置。
内嵌结账框安全处理所有敏感支付信息,确保 PCI 合规,无需额外的认证。

什么是好的内嵌结账?

客户知道他们在从谁那里购买,购买的是什么,以及支付的金额是很重要的。 为了构建符合规范并优化转化率的内嵌结账,您的实现必须包括:
内嵌结账示例,标注了所需元素

Example inline checkout layout showing required elements

  1. 循环信息:如果是循环,说明它的频率及续订支付总额。如果是试用,说明试用持续时间。
  2. 商品描述:对所购买商品的描述。
  3. 交易总额:交易总额,包括小计、总税款及总额。请务必包括货币。
  4. Dodo Payments 页脚:完整的内嵌结账框架,包括结账页脚,包含有关 Dodo Payments、销售条款和隐私政策的信息。
  5. 退款政策:如果与 Dodo Payments 标准退款政策不同,请提供您的退款政策链接。
始终显示完整的内嵌结账框架,包括页脚。删除或隐藏法律信息违背合规要求。

客户旅程

结账流程由您的结账会话配置决定。根据您如何配置结账会话,客户可能会在单页或多个步骤中看到所有信息。
1

Customer opens checkout

您可以通过传递商品或现有交易来打开内嵌结账。使用 SDK 显示和更新页面信息,并使用 SDK 方法根据客户交互更新商品。包含商品列表和支付表单的初始结账页面
2

Customer enters their details

内嵌结账首先要求客户输入他们的电子邮件地址、选择他们的国家,并在需要时输入他们的邮政编码。此步骤收集所有必要的信息,以确定税款和可用的支付选项。您可以预填客户详情并提供保存的地址以简化体验。
3

Customer selects payment method

输入详细信息后,客户会看到可用的支付方法和支付表单。选项可能包括信用卡或借记卡、PayPal、Apple Pay、Google Pay 及其他基于其位置的本地支付方法。如果可以,显示保存的支付方法以加快结账速度。可用支付方法和卡详细信息表单
4

Checkout completed

Dodo Payments 将每笔支付路由到该销售的最佳收单行,以获得最佳的成功机会。客户会进入您可以构建的成功工作流程。带有确认对勾的成功屏幕
5

Dodo Payments creates subscription

Dodo Payments 自动为客户创建一个可供您准备的订阅。客户使用的支付方法会保存以备续订或订阅更改。使用 webhook 通知创建的订阅

快速开始

只需几行代码即可开始使用 Dodo Payments 内嵌结账:
确保您的页面上有一个具有相应 id 的容器元素:<div id="dodo-inline-checkout"></div>

分步集成指南

1

Install the SDK

安装 Dodo Payments 结账 SDK:
2

Initialize the SDK for Inline Display

初始化 SDK 并指定 displayType: 'inline'。您还应该监听 checkout.breakdown 事件,以实时更新您的用户界面和税款总额计算。
3

Create a Container Element

在您的 HTML 中添加一个元素,用于插入结账框:
4

Open the Checkout

调用 DodoPayments.Checkout.open(),使用您的容器的 checkoutUrlelementId
5

Test Your Integration

  1. 启动开发服务器:
  1. 测试结账流程:
    • 在内嵌框中输入您的电子邮件和地址详细信息。
    • 验证您的自定义订单摘要是否实时更新。
    • 使用测试凭证测试支付流程。
    • 确保重定向正常工作。
如果您在 onEvent 回调中添加了控制台日志,您应该会在浏览器控制台中看到 checkout.breakdown 事件记录。
6

Go Live

准备好上线时:
  1. 将模式更改为 'live'
  1. 更新您的结账 URL,以使用来自后端的实时结账会话。
  2. 在生产环境中测试完整流程。

完整 React 示例

此示例演示如何实现自定义订单摘要,以及使用 checkout.breakdown 事件保持与内嵌结账同步。

API 参考

配置

初始化选项

结账选项

方法

打开结账

在指定的容器中打开结账框。
您还可以传递其他选项来自定义结账行为:

关闭结账

以编程方式移除结账框并清理事件监听器。

检查状态

返回结账框当前是否已注入。

事件

SDK 通过 onEvent 回调提供实时事件。对于内嵌结账,checkout.breakdown 特别有助于同步您的用户界面。

结账细目数据

checkout.breakdown 事件提供以下数据:

理解细目事件

checkout.breakdown 事件是保持应用程序的用户界面与 Dodo Payments 结账状态同步的主要方式。 触发时机:
  • 初始化时:结账框加载并准备就绪后立即。
  • 地址更改时:每当客户选择国家或输入导致税款重新计算的邮政编码时。
字段详情: 关键集成提示:
  1. 货币格式化:价格始终以最小货币单位(例如,美分为美元,日圆为日元)整数形式返回。要显示它们,请除以 100(或适当的 10 的幂)或使用类似 Intl.NumberFormat 的格式化库。
  2. 处理初始状态:当结账首次加载时,taxdiscount 可能是 0null,直到用户提供其账单信息或应用代码。您的用户界面应优雅地处理这些状态(例如,显示破折号 或隐藏行)。
  3. “最终总额” 与 “总额”:虽然 total 为您提供标准价格计算,但 finalTotal 是交易的真实来源。如果存在 finalTotal,它准确地反映了将向客户卡收取的费用,包括任何动态调整。
  4. 实时反馈:使用 tax 字段向用户展示税款正在实时计算。这为结账页面带来“实时”感受,并减少在输入地址步骤中的摩擦。

实施选项

包管理器安装

分步集成指南 中所示,通过 npm、yarn 或 pnpm 安装。

CDN 实现

若无需构建步骤即可进行快速集成,您可以使用我们的 CDN:

更新支付方法

内嵌结账支持订阅的支付方法更新。当客户需要更新其支付方法时——无论是用于激活订阅还是重新激活暂停中的订阅——您可以在页面布局中直接呈现更新流程。

工作原理

  1. 调用 更新支付方法 API 以获取 payment_link
  1. 将返回的 payment_link 作为 checkoutUrl 传递以打开内嵌结账:
内嵌框仅呈现支付方法收集表单。客户可以输入新卡详细信息或选择保存的支付方法,而无需离开您的页面。

针对暂停的订阅

为处于 on_hold 状态的订阅更新支付方法时,Dodo Payments 会自动为任何剩余欠款创建一笔交易。监控 payment.succeededsubscription.active webhook 以确认重新激活。
您还可以通过将具有 payment_method_idtype: 'existing' 传递给更新支付方法 API,而不是收集新详细信息,使用现有保存的支付方法。

错误处理

SDK 通过事件系统提供详细的错误信息。始终在您的 onEvent 回调中实现正确的错误处理:
当发生问题时,始终处理 checkout.error 事件,以提供良好的用户体验。

最佳实践

  1. 响应式设计:确保您的容器元素有足够的宽度和高度。iframe 通常会扩展以填满它的容器。
  2. 同步:使用 checkout.breakdown 事件保持您的自定义订单摘要或价格表与用户在结账框中看到的内容同步。
  3. 骨架状态:在 checkout.opened 事件触发前,在您的容器中显示加载指示器。
  4. 清理:当您的组件卸载时,调用 DodoPayments.Checkout.close(),以清理 iframe 和事件监听器。
对于暗模式实现,建议使用 #0d0d0d 作为背景色,以便与内嵌结账框架实现最佳视觉集成。

支付状态验证

不要仅依赖内嵌结账事件来确定支付成功或失败。始终实现使用 webhooks 和/或轮询的服务器端验证。

为什么服务器端验证至关重要

虽然内嵌结账事件提供实时反馈,但它们不应该是您支付状态的唯一信息来源。网络问题、浏览器崩溃或用户关闭页面可能导致事件丢失。为了确保可靠的支付验证:
  1. 您的服务器应监听 webhook 事件——Dodo Payments 发送支付状态更改的 webhooks
  2. 实现轮询机制——您的前端应轮询服务器以获取状态更新
  3. 结合两种方法——使用 webhooks 作为主要来源,并以轮询作为备份

推荐架构

实施步骤

1. 监听结账事件——当用户点击支付时,开始准备验证状态:
2. 轮询您的服务器——创建一个端点,以检查由 webhooks 更新的数据库中的支付状态:
3. 服务器端处理 webhooks——当 Dodo 发送 payment.succeededpayment.failed webhooks 时更新您的数据库。查看我们的 Webhooks 文档 了解详细信息。

故障排除

  • 验证 elementId 与 DOM 中实际存在的 div 匹配。
  • 确保已将 displayType: 'inline' 传递给 Initialize
  • 检查 checkoutUrl 是否有效。
  • 确保您正在监听 checkout.breakdown 事件。
  • 仅在用户在结账框中输入有效国家和邮政编码后计算税款。

启用数字钱包

有关设置 Apple Pay、Google Pay 和其他数字钱包的详细信息,请参阅数字钱包页面。

Apple Pay 的快速设置

内嵌(嵌入式)结账仅需域名验证。托管结账不需要此步骤。
Apple Pay 不适用于覆盖结账。
Apple Pay 是通过仪表板按域验证的。
1

Open Wallet domains

转到设置 → 支付方法,在 Apple Pay 行上,点击管理域
支付方法设置中 Apple Pay 行的管理域按钮

Open Wallet domains from the Apple Pay row

2

Download the domain association file

从钱包域面板中下载关联文件。
包含下载文件按钮的钱包域面板

Download the Apple Pay domain association file

3

Register your domain

单击注册域,输入嵌入内嵌结账的域(例如,shop.example.com),然后继续
注册域表单,已输入域

Register the domain where you embed inline checkout

4

Host the file on your domain

托管在:
它必须通过 HTTPS 提供、无需重定向即可访问,并使用 Content-Type: application/octet-streamtext/plain 提供。
5

Verify the domain

单击验证域。Dodo Payments 确认该文件处于活动状态,并将您的域提交给 Apple。
包含关联文件主机路径和验证域按钮的验证您的域屏幕

Verify the hosted association file

6

Confirm it's active

当状态显示激活时,Apple Pay 已为该域启用。使用 启用 开关在每个域上打开或关闭它。
显示具有激活 Apple Pay 状态的域和启用开关的钱包域列表

Verified domains show an Active status

7

Test the integration

  1. 在 Apple 设备上打开结账
  2. 验证 Apple Pay 按钮是否出现
  3. 完成一次测试交易

浏览器支持

Dodo Payments 结账 SDK 支持以下浏览器:
  • Chrome(最新)
  • Firefox(最新)
  • Safari(最新)
  • Edge(最新)
  • IE11+

内嵌与覆盖结账

选择适合您的使用案例的正确结账类型:
当您希望最大程度地控制结账体验和无缝品牌化时,请使用内嵌结账。使用覆盖结账进行较少更改的快速集成。

相关资源

Overlay Checkout

使用覆盖结账进行快速模式集成。

Checkout Sessions API

创建结账会话以支持您的结账体验。

Webhooks

使用 webhooks 处理服务器端支付事件。

Integration Guide

完整的 Dodo Payments 集成指南。
欲获得更多帮助,请访问我们的Discord 社区或联系我们的开发者支持团队。
最后修改于 2026年7月21日