# 故障排查与修复计划 针对您提出的四个问题,我制定了以下修复计划。我将使用中文进行回答和执行。 ## 1. 虚拟发货问题 (Virtual Shipment) * **现状**: 后端代码中已存在 `UploadVirtualShipping` 调用,但在支付回调中如果上传失败,目前是忽略错误的(`_ = ...`),导致无法确定是否成功。 * **修复**: 修改 `internal/api/pay/wechat_notify.go`,增加错误日志记录。如果虚拟发货上传失败,将在后台日志中打印详细错误原因,方便排查(如 `transaction_id` 错误或配置问题)。 ## 2. 订单管理与退款 (Refund Button) * **现状**: 您提到的“履约”可能是指发货,但对于虚拟商品,通常需要的是“退款”。目前后台订单列表缺少直观的“退款”按钮。 * **修复**: * **前端**: 在 `web/admin/src/views/pay/orders/index.vue` 中添加“退款”按钮。 * **后端**: 对接现有的 `CreateRefund` 接口。该接口已包含完整的逻辑:调用微信退款、更新订单状态、**自动恢复用户积分**和**自动恢复优惠券**。 ## 3. 道具卡添加不生效 (Item Card Issue) * **原因**: 经查代码 `internal/service/user/item_card_add.go`,当道具卡模板不存在或状态为“未启用”时,代码直接返回 `nil` (成功),但实际上没有给用户添加卡片。这就是“不生效”且无报错的原因。 * **修复**: 修改服务层代码,当道具卡不可用时,明确返回错误(如 `errors.New("item card not found or disabled")`),让接口报错,提示您具体原因。 ## 4. 优惠券添加不生效 (Coupon Issue) * **原因**: 同上,`internal/service/user/coupon_add.go` 在优惠券模板未启用时也静默返回成功。 * **修复**: 修改服务层代码,当优惠券不可用时,明确返回错误,确保您能看到操作失败的提示。 ## 执行步骤 1. **后端**: 修复道具卡和优惠券的“静默失败”逻辑,使其报错。 2. **后端**: 在支付回调中增加虚拟发货的错误日志。 3. **前端**: 在订单管理页面增加“退款”按钮并对接接口。 4. **验证**: 通过 curl 或界面操作验证修复效果。