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、含税目录价、优惠券和外币,不要只测当前那一单。