Bundle选了三个组件,商品页显示119.99,购物车120.00,订单又是119.99。看起来是一分钱小事,支付网关对账却会因此拒单。不能直接在模板里round,必须把计算层的舍入策略对齐。
先记录每个selection的base price、qty、discount、tax rate以及row total。Magento有Unit、Row、Total等税额计算方式,动态Bundle会放大差异。后台 Stores > Tax 的Calculation Settings要按Website核对。
bin/magento config:show tax/calculation/algorithm bin/magento config:show tax/calculation/apply_after_discount bin/magento config:show tax/calculation/discount_tax
对比base与display
订单表同时有base_*和非base字段。多币种下不要拿显示币种税额反推基础币种。把quote item、quote totals、order item和payment request四处金额列成一行,第一处出现差异的位置才是该修的层。
第三方Totals Collector如果对Bundle父项和子项都累计一次,也会多一分钱甚至更多。修复后覆盖固定价Bundle、动态价Bundle、含税目录价、优惠券和外币,不要只测当前那一单。

