独立站币种与定价:多币种显示、汇率更新、税费计算与支付
一、多币种显示的三个技术误区
第一个误区:前台用JavaScript实时调用汇率API换算。买家打开页面看到的价格是当时汇率,但等他把商品加到购物车、填完地址到结账,汇率已经变了,结账价和显示价对不上。B2C站退单率因此上升,B2B站买家直接弃单去询盘。
第二个误区:只做多币种显示,不做税费本地化。欧盟买家习惯看到含税价(MwSt. inkl.),美国买家习惯看税前价加消费税估算。如果你对欧盟用户显示税前价,他会以为还要加20%的税,直接走掉。第三个误区:B2B询盘型网站硬接在线支付。B2B订单通常金额大、需要报价、需要账期,在线支付通道处理不了,硬接反而增加拒付风险。定价策略层面的讨论见出海定价:从成本加成到价值定价。
| 技术误区 | 实际后果 | 正确做法 |
|---|---|---|
| 前台JS实时换算汇率 | 显示价与结账价差超1% | 每日批量拉取,前后台同一批 |
| 只换货币不换税费 | 欧盟买家以为要加20%税 | 按目的国含税/税前展示 |
| B2B站硬接在线支付 | 大额订单拒付风险高 | 多币种只展示,走询盘报价 |
| 汇率用商家即期汇率 | 比央行价高3%至5% | 用央行中间价加1%至2%缓冲 |
| 不做手动币种切换 | VPN用户看到错误货币 | 底部加币种选择器,默认按IP |
二、汇率更新节奏:每日一次,不要实时
多币种显示的汇率更新频率,B2B独立站建议每日一次,在UTC 0点批量拉取,写入数据库缓存一整天。不要在前端实时调用汇率API。原因有三:第一,实时调用增加页面加载延迟,影响Core Web Vitals指标;第二,汇率API有调用次数限制,实时调用成本高;第三,实时换算导致显示价和结账价漂移。
汇率来源推荐三个:欧洲央行每日定盘价(免费、稳定)、XE API(免费额度够小站用)、Open Exchange Rates(免费版每月1000次)。汇率缓存建议加1%至2%的商家缓冲,因为支付通道实际结算汇率会比央行中间价高一点。B2B报价层面的汇率波动管理见汇率波动管理,本文只讲前台显示。
| 汇率方案 | 更新频率 | 适用场景 | 成本 |
|---|---|---|---|
| 欧洲央行定盘价 | 每日一次 | 欧洲为主的B2B站 | 免费 |
| XE API | 每日一次 | 多币种B2B站 | 免费额度够小站 |
| Open Exchange Rates | 每小时 | 高频B2C站 | 免费版每月1000次 |
| Stripe自动换算 | 支付时实时 | 纯B2C小额定单 | Stripe按卡币种结算 |
三、税费计算:按目的国,不按仓库所在地
税费计算的核心规则是按目的国,不按仓库所在地。德国买家买你的货,不管你从中国直邮还是从欧盟仓发货,德国站必须显示含19% MwSt的价格。美国买家买货,显示税前价,结账时按他所在州的税率加消费税。这个规则叫目的地原则(destination principle),欧盟VAT规则和美国销售税规则都遵循这个原则。
场景示例:一家做工业传感器的出口企业,站点默认显示USD税前价。德国买家打开页面,看到一个传感器标价$100,他默认要加19%的德国增值税,心里算账是119美元。如果网站没有做税费本地化,他会觉得价格不透明,直接发询盘问”including VAT?”。正确做法是:德国IP访问时自动切换到EUR含税价,显示”€109.90 inkl. MwSt”,美国IP访问时显示”$99.00 + sales tax”。询盘表单的可靠性见询盘表单可靠性。
| 地区 | 价格展示方式 | 税费处理 | 典型税率 |
|---|---|---|---|
| 欧盟(德国) | EUR含税价 | 含MwSt,不另加 | 19%(标准)/7%(低) |
| 欧盟(法国) | EUR含税价 | 含TVA | 20% |
| 美国 | USD税前价 | 结账时按州加消费税 | 0%至10%各州不同 |
| 英国 | GBP含税价 | 含VAT | 20% |
| 日本 | JPY含税价 | 含消费税 | 10% |
四、支付结算:按主币种收,按卡币种付
多币种定价和支付结算是两件事。定价层:前台按买家本币显示价格,让他心里有数。结算层:你作为卖家,最终还是要收到自己的主币种(通常是USD或CNY)。中间的换汇由支付通道完成,不要自己在网站上做换汇逻辑。
推荐架构:买家看到EUR含税价,结账时选Stripe支付,Stripe按他的卡币种扣款(他的卡是欧元卡就扣欧元,是美元卡就按当时汇率扣美元),结算时Stripe把钱换成你的主币种打入你的银行账户。这样你只需要维护一套主币种价格,前台显示靠汇率缓存,结算靠支付通道。不要自己写一个换汇逻辑在网站后端,维护成本高且容易出错。支付通道的选型和费率对比见询盘表单可靠性同站的支付相关文章。
| 环节 | 币种 | 汇率来源 | 注意事项 |
|---|---|---|---|
| 前台显示 | 买家本币 | 每日缓存的央行汇率 | 加1%至2%商家缓冲 |
| 加购物车 | 买家本币 | 同前台缓存 | 会话内锁定,不漂移 |
| 结账扣款 | 持卡人本币 | Stripe/PayPal实时汇率 | 告诉买家将按此汇率结算 |
| 卖家结算 | 主币种(USD/CNY) | 支付通道结算汇率 | 到账有1%至3%汇损 |
五、B2B询盘型站的多币种策略
B2B独立站和B2C电商站的多币种策略完全不同。B2B订单金额大(通常几千到几十万美元),需要报价单、需要账期、需要按数量阶梯定价,在线支付通道处理不了这种场景。所以B2B站的多币种只做一件事:让买家看到他熟悉的货币价格,降低沟通成本,然后引导他发询盘。
具体做法:前台按IP自动切换显示货币,底部加一个手动币种选择器(USD/EUR/GBP/JPY/AUD),价格用每日缓存汇率换算,显示价旁边标注”Reference price, final quote in USD”。询盘表单里加一个”Preferred currency”下拉框,让买家选他希望报价的币种。交期承诺和报价口径见交期承诺。
| 站点类型 | 多币种做法 | 支付方式 | 汇率更新 |
|---|---|---|---|
| B2C电商站 | 显示加结算全流程 | Stripe/PayPal在线支付 | 每小时或每日 |
| B2B询盘站 | 只显示,不结算 | 引导询盘,走T/T | 每日一次 |
| 混合站 | 零售SKU在线付,大额走询盘 | 按金额自动分流 | 每日一次 |
FAQ 常见问题
前台显示价和结账价差多少算正常?
汇率多久更新一次合适?
欧盟VAT怎么在网站上展示?
B2B独立站要不要接在线支付?
Stripe和PayPal的多币种结算有什么区别?
汇率缓存加不加商家缓冲,加多少?
写在最后
多币种定价的技术核心不是换汇,而是一致性:前台看到的价、购物车里的价、结账时的价,必须用同一批汇率。实时换算看起来先进,实际上把价格漂移留给了买家,最后变成退单率和弃单率。
落地三步:第一,每日定时拉一次央行汇率,缓存到数据库。第二,按目的国做含税/税前价格展示,欧盟含税、美国税前。第三,B2B站多币种只展示不结算,引导询盘;B2C站用Stripe按卡币种结算,不要自己写换汇逻辑。
一句可以记住的话:多币种定价不是让网站帮你换汇,是让买家在他熟悉的货币里看到一个不会变的价格。
