Stripe Automatic Tax、Tax Code、Tax Behavior、Registration、Customer Location、Tax ID 和 Liability 有什么区别?
接入 Stripe Tax 时,最危险的误区是把“打开 automatic_tax”理解成税务工作已经完成。Automatic Tax 负责按交易信息自动计算;Tax Code 描述商品税务类别;Tax Behavior 决定标价含税还是未税;Registration 表示商家在哪些辖区登记收税;Customer Location 决定买家税务位置;Tax ID 是客户提供的税号;Liability 指在 Connect 场景中由哪个账户承担税务责任。 计算税额、登记义务、申报缴税和法律责任是不同环节,Stripe 功能不能替代专业税务判断。
本文目录(34 节)
核心概念快速对比
| 概念 | 回答的问题 | 常见配置位置 | 是否决定税率 |
|---|---|---|---|
| Automatic Tax | 是否自动计算 | Checkout、Invoice、Subscription 等 | 综合多项信息计算 |
| Tax Code | 卖的是什么 | Product 或 line item | 影响商品税务处理 |
| Tax Behavior | 标价是否含税 | Price 或默认设置 | 影响展示和拆分 |
| Registration | 在哪里登记收税 | Stripe Tax registrations | 决定启用收税辖区 |
| Customer Location | 买家在哪里 | 地址等位置证据 | 影响适用辖区与税率 |
| Tax ID | 买家税务身份是什么 | Customer / Checkout 收集 | 可能影响B2B处理 |
| Liability | 谁承担税务责任 | Connect automatic_tax | 选择责任账户与登记 |
这七项需要共同正确。缺少任一关键输入,自动计算可能失败、返回不适用结果或产生与业务预期不同的税额。
Automatic Tax 是什么
Automatic Tax 是 Stripe 在支持的付款和账单流程中自动计算税费的能力。以 Checkout Session 为例,创建时启用 automatic_tax.enabled=true,Checkout 会收集税务计算所需的最少地址信息,并把计算结果反映到 Session 及相关对象。
它不是账户级“一次打开全站生效”的魔法开关。不同产品、Price、Checkout Session、订阅和发票流程都要核对是否启用及是否传入正确信息。
Automatic Tax 不负责什么
自动计算不等于自动确定企业在全球的全部登记义务,也不等于每个司法辖区都已完成注册、申报和缴款。Stripe 提供阈值监控、注册与申报相关产品,但商家仍需确认自己的法律义务和账户配置。
业务合同、Marketplace 角色、特殊豁免和跨境规则复杂时,应由合格税务顾问确认,不能只依赖 API 返回值。
Tax Code 是什么
Product Tax Code 用于描述商品或服务的税务类别,例如一般有形商品、软件即服务或特定数字产品。Stripe 根据税码、客户位置和当地规则判断该商品是否应税以及适用处理。
税码在不同辖区保持同一标识,但同一商品在各地可能有不同税务待遇,Stripe 维护相应规则和税率。
默认 Tax Code 与产品 Tax Code
Stripe Tax 设置可配置预设商品税码。当 Product 或交易中的 product_data 没有明确税码时,系统使用预设值。明确产品税码通常优先于预设。
默认税码适合真正同质的商品目录;若产品税务性质不同,全部套用一个默认值会导致系统稳定地算错。
Shipping Tax Code 是什么
运费也有独立的预设税码,因为不同辖区对运费的处理可能依商品比例或最高税率等规则变化。它与商品 Product Tax Code 不是同一设置。
把“shipping”当普通商品名称并不自动赋予正确税务语义。应按 Stripe 支持流程为 Shipping Rate 或相应项目指定适合税码。
Tax Behavior 是什么
Tax Behavior 决定 Price 中的金额如何解释。exclusive 表示税费加在标价之外;inclusive 表示标价已经包含税,最终买家支付金额通常保持不变,系统从中拆分税额。
它控制价格展示和计算基数,不是商品是否应税的分类。商品可具有正确 tax code,但 tax behavior 仍可能配置错误。
Inclusive 与 Exclusive 的区别
exclusive 常见于美国、加拿大及部分 B2B 场景:100 的未税价加10税后支付110。inclusive 常见于许多面向消费者市场:标价100中已包含相应税额,买家仍支付100。
实际税率和法规因地区、商品与客户身份变化,示例数字只能说明展示机制,不能作为税务建议。
Automatic Tax Behavior 是什么
Stripe 可设置默认 tax behavior 为 automatic,根据 Price 的币种选择包含或排除税的默认方式。Stripe 文档说明其默认逻辑对 USD、CAD 与其他币种存在区别。
币种只是自动展示策略的输入,不代表买家的税务位置。不能把“USD”直接等同于“美国交易”。
Tax Behavior 的不可变性
Stripe 官方提醒,一旦 Price 的 tax_behavior 已设置为 inclusive 或 exclusive,就不能再更改。需要改变价格语义时,通常应创建新的 Price 并迁移未来交易。
这也是为什么上线前必须测试含税、未税、折扣、退款和订阅续费场景,不能在生产中随意试改。
Registration 是什么
Tax Registration 表示企业在某个辖区登记收取税费。Stripe Registrations API 可创建、计划和查询 registration;把登记加入 Stripe 后,会为相应交易开启税费计算与收取。
Registration 是商家法律和运营状态的配置,不是客户 Tax ID,也不是一次交易的税额对象。
为什么要先确认税务义务
企业达到经济联系阈值、拥有实体存在或提供特定服务时,可能产生登记义务。规则因国家、州和交易类型而异。错误地提前或延迟登记都可能造成问题。
Stripe 的阈值监控可提供信号,但最终义务确认应结合业务事实与专业意见。
Active、Scheduled 与 Expired Registration
Registrations API 可按 active、scheduled 或 expired 等状态查询。active 表示当前生效,scheduled 表示计划在未来生效,expired 表示已结束。
交易时间必须与有效登记期匹配。仅发现账户历史上“有过 registration”不足以证明当前应收税。
Head Office Address 为什么重要
Stripe 的 Registration API 文档要求先配置 head office address;缺少时,创建登记会触发参数错误。总部地址也是部分税务规则所需的业务位置事实。
它与单次 Customer Location 不同:前者描述商家,后者描述买家。
Customer Location 是什么
Customer Location 是用于确定买家税务辖区的位置证据。Checkout 启用 Automatic Tax 后,会根据需要收集最低限度的账单或送货地址信息。
客户位置不能仅靠界面语言、支付币种或IP国家猜测。不同业务模式与辖区可能要求不同证据组合。
requires_location_inputs 表示什么
Checkout Session 的 automatic_tax.status 可能为 requires_,表示现有客户位置无效或不足以准确判断税率。它不是“税率为0”,而是计算输入不完整。
应用应引导客户补充合法地址信息,并阻止把未完成税务计算的交易误认为成功核算。
complete 与 failed 状态
automatic_tax.status=complete 表示该 Session 的最新自动税计算成功;failed 表示税计算失败,需要按 Stripe 指引稍后重试或处理。两者描述计算状态,不等于支付状态。
即使税计算 complete,支付仍可能失败;支付成功也不应覆盖税计算错误。状态机必须分别跟踪。
Customer Tax ID 是什么
Customer Tax ID 是与客户相关的税务识别号,例如适用辖区的企业税号。它可帮助处理 B2B、反向征税或客户身份验证,但具体效果取决于税号类型、验证状态和当地规则。
Tax ID 不是 Stripe Customer ID,也不是商家的 registration。三个对象服务完全不同的身份层次。
Tax ID Collection 做了什么
Checkout 可配置收集客户税号。收集只是获得客户输入并建立相应对象,不保证所有号码都即时通过验证,也不保证客户自动获得免税资格。
页面应清楚说明用途,并按隐私和数据保护要求处理税务身份信息。
Tax ID 与 Tax Exempt 的区别
持有税号并不在所有场景中等于免税。Customer 的 tax_exempt 状态、税号验证及交易规则是不同输入。不能看到 VAT ID 字符串就自行把税率改为零。
应让 Stripe 支持的税务逻辑和经确认的业务规则决定结果,并保存审计证据。
Liability 是什么
在 Stripe Connect 中,automatic_tax.liability 指定哪个账户承担税务责任。它会决定用于计算的业务地址和 tax registrations,并影响 Tax transaction 归属哪个账户报告。
这不是平台内部随意分账字段,而是与平台和 connected account 的法律责任模型相关。
self 与 account 的区别
liability type 为 self 时,责任指向发起请求的账户;为 account 时,指向指定 connected account。后者需要提供对应账户标识,并确保该账户信息与登记完整。
选择必须匹配 Connect charge 模式、合同关系和适用 Marketplace 法规,不能仅为了让计算通过而切换。
Liability 与 Charge Flow 的区别
Direct Charge、Destination Charge、Separate Charges and Transfers 描述付款和资金流。Tax liability 描述税务责任账户。两者相关但不相等。
平台可能使用某种 charge flow,却因 Marketplace facilitator 等规则承担不同税务责任。架构设计需要同时建模资金、费用、退款和税。
Tax Calculation 与 Tax Transaction
Calculation 是基于行项目、位置和规则得到的税费计算;完成支付后,相关税务结果可能形成用于报告的 transaction。预览计算不等于已完成销售。
订单取消、退款或 credit note 还可能需要相应税务调整,不能只保留最初报价。
折扣如何影响税
折扣与税的先后及分配受辖区规则影响。应让 Stripe Tax 基于实际 Coupon、Promotion Code 和 line item 配置计算,而不是应用自己先算一个总税率再乘折后总额。
多税码购物车尤其需要逐行保留商品分类和金额。
退款与税务调整
退款支付不一定完成全部税务会计。全额、部分退款、争议和贷项凭证对应不同对象与报告流程。应依据原交易和 Stripe Tax 文档建立调整记录。
不要删除原 Tax transaction;税务审计通常需要正向交易和反向调整的完整链路。
Subscription 如何启用 Automatic Tax
订阅场景需要在 Subscription 或创建它的 Checkout 流程中启用 automatic tax,并确保 recurring Price 的税码与 tax behavior 正确。未来续费会使用当时有效的客户位置、登记和规则。
首次 Checkout 计算成功不代表未来每张 Invoice 永远相同,客户地址和法规可能变化。
Test Mode 能验证什么
测试模式可验证对象关系、地址收集、税码、含税展示和 Webhook 流程,但不能替代对真实业务所在地和登记义务的法律确认。
上线前应覆盖不同国家、州、B2B税号、免税客户、折扣、运费、退款与订阅续费。
Webhook 应监听什么
订单履约应以 Stripe 推荐的支付或 Checkout Webhook 为准,并在服务端 retrieve 相关对象,检查支付、tax status、金额和客户信息。不能依赖客户浏览器返回 success URL。
Webhook 必须验证签名并做幂等处理,税务结果和订单交付应在同一业务事务中可靠落库。
常见错误:手工税率与Automatic Tax混用
同一交易若同时传入固定 Tax Rate 和 automatic tax,可能出现参数冲突或重复计算。应明确每条结算路径由谁计算税,并用集成测试锁定。
旧系统迁移时可分批切换,但不能让同一订单同时走两套税引擎。
常见错误:把税码当税率
Tax Code 描述商品类别,不是“20%”这样的固定数字。实际税率由辖区、客户位置、商品规则、登记和客户身份共同决定。
硬编码税率会在法规变化或跨地区销售时迅速失效。
上线前检查清单
确认商家地址、registrations 和 Connect liability;为每类 Product 设置真实 tax code;决定每个 Price 的 tax behavior;验证客户地址与税号收集;覆盖折扣、运费、退款和续费。
最后通过 Webhook 与 Tax reports 对账,并由税务顾问确认登记和申报流程。
FAQ:启用Automatic Tax后还要注册吗?
要。自动计算不替代法定登记。需要在产生义务的辖区完成注册,并将有效 registration 配置到正确责任账户。
FAQ:Tax Code可以直接写税率吗?
不可以。Tax Code 表示商品类别,Stripe 再依据位置和规则确定税务处理与税率。
FAQ:inclusive价格在免税交易中会变便宜吗?
Stripe 文档说明 inclusive 模式下买家支付金额通常保持不变;税额为零时,完整金额成为未税单价。具体法规和显示应按目标市场验证。
FAQ:收集到有效Tax ID就一定不收税吗?
不一定。税号类型、验证、客户所在地、交易类型和当地规则共同决定结果,不能由前端自行判零。
FAQ:Connect平台永远是Tax Liability吗?
不是。责任可能属于平台或 connected account,取决于业务和法律关系。应按 Stripe Connect Tax 文档及专业意见配置。
结论
Automatic Tax 是计算引擎,Tax Code 和 Customer Location 提供“卖什么、卖到哪里”,Tax Behavior 决定价格含税方式,Registration 和 Liability 决定哪个账户在哪些辖区收税,Tax ID 则描述客户税务身份。只有这些要素与真实业务一致,并覆盖报告、退款和申报流程,Stripe Tax 集成才算完整。
Stripe官方资料
- Stripe Tax 产品税码与Tax Behavior:https:
/ / docs. stripe. com/ tax/ products- prices- tax- codes- tax- behavior - Stripe Tax Registrations API:https:
/ / docs. stripe. com/ tax/ registrations- api - Stripe Checkout Automatic Tax:https:
/ / docs. stripe. com/ tax/ checkout - Stripe Checkout Session创建API:https:
/ / docs. stripe. com/ api/ checkout/ sessions/ create - Stripe Checkout Session对象:https:
/ / docs. stripe. com/ api/ checkout/ sessions/ object - Stripe Tax客户位置:https:
/ / docs. stripe. com/ tax/ customer- locations - Stripe Tax客户Tax ID:https:
/ / docs. stripe. com/ tax/ checkout/ tax- ids - Stripe Connect Tax:https:
/ / docs. stripe. com/ tax/ connect