商品页显示 199 元,加进购物车后变成 0 元。价格索引当然要看,但我不会先 reindex,因为商品页已经拿到了正确价格,问题更可能发生在“商品加入 quote”或“重新计算 totals”这两步。

先保存故障quote里这一行的价格字段

记录 quote item 的 product_type、price、base_price、custom_price、original_custom_price、row_total 和父子 item 关系。普通商品这些值不该无缘无故变成 0;动态价格 bundle 的父行是 0、金额放在子行,则可能是正常数据结构,只是模板显示错了对象。

普通加购正常,自定义入口为0,就搜setCustomPrice

grep -R "setCustomPrice" app/code -n
grep -R "setOriginalCustomPrice" app/code -n
grep -R "setIsSuperMode" app/code -n

快速下单、ERP 下单和自定义 Controller 经常把空字符串、缺失价格转换成 0,再调用 custom price。还有代码为了允许手工价打开 super mode,却没有限制调用场景。先让标准商品页加购和自定义入口各生成一个新 quote,对比差异。

加购时有价格,collectTotals后才归零,就按collector顺序查

在测试环境记录 collectTotals 前后 item 和 address total。折扣、税、积分、礼品卡及自定义 collector 都可能改金额。Around plugin 忘记调用 proceed,或返回了错误对象,也会让后续 collector 读到不完整数据。

同时看 base_currency_code、quote_currency_code 和 conversion rate。汇率服务返回 0 时,base_price 可能仍正确,显示币种金额却归零。

修完一定用新购物车测试

旧 quote 已经保存了 custom_price,清缓存不会自动恢复。删除测试 Session 或创建新客户购物车,再测游客、登录客户、优惠券、目标币种和不同产品类型。最后核对订单金额与支付请求,不能只看购物车页面重新显示了 199 元。