问题现象:访客加了商品,登录后购物车变空或只保留旧客户购物车。先保存登录前后的quote_id,不要只看前端mini cart数量。
| 阶段 | 实际操作 |
|---|---|
| 复现 | 在测试账号中记录登录前Cookie、masked cart ID、quote_id、is_active和customer_id;登录后再次读取当前Quote。确认是否生成了第三个Quote。 |
| 取证 | 使用标准Customer Account登录时,Checkout Session会执行客户Quote加载和merge。自定义SSO、手机号登录或GraphQL登录若只设置客户Session,可能完全跳过这一步。 |
| 修复 | 修复流程应调用官方Quote合并服务,让访客Quote合并进客户活动Quote,再保存并停用旧Quote。不要用SQL直接改customer_id。 |
| 回归 | 若同SKU没有合并数量,检查custom_options、buyRequest和扩展属性是否导致两个item不等价;这是合并规则,不是Quote丢失。 |
可直接执行的检查
SELECT entity_id,is_active,customer_id,items_count,items_qty,updated_at FROM quote WHERE entity_id IN (:guest_quote,:customer_quote);
SELECT quote_id,sku,qty,product_type FROM quote_item WHERE quote_id IN (:guest_quote,:customer_quote);通过标准:测试客户原购物车为空和非空两种情况,同SKU与带自定义选项商品都覆盖;登录、退出再登录后只保留一个活动Quote且金额正确。
PWA/GraphQL还要确认客户端在登录后改用customerCart返回的新cart_id。

