-- ============================================================ -- 【一次性人工补偿】2026-10-01 微信充值 30 元未到账事故 -- -- 事故:商户订单号 202610012106065931549256,30.00 元 -- 微信交易号 4500000442202610019536073654,支付成功时间 2026-10-01 21:06:14 -- 用户 user_id = 1555324358568706048(手机号 15814577840) -- 微信支付回调被 Redis 幂等锁误判为"重复通知"后应答 HTTP 200, -- 微信不再重试,钱包流水一直停留在"待确认",余额未增加。 -- -- 说明:本文件只针对本次事故执行一次,不属于版本迁移(勿并入 8.sql 自动执行)。 -- 执行前请先跑【0.核对】,并在微信商户平台确认该笔订单确已收款。 -- ============================================================ -- 【0.核对】应返回 1 行、status = 0(待确认) SELECT id, user_id, type, order_no, amount, status, create_time FROM charge_app.t_wallet_detail WHERE order_no = '202610012106065931549256'; -- 【0.核对】应返回 0 行(证明系统内确实没有入账记录) SELECT id FROM charge_app.t_pay_log WHERE out_trade_no = '202610012106065931549256'; -- 【1.钱包流水置为已确认】status: 0待确认 -> 1已确认 UPDATE charge_app.t_wallet_detail SET status = 1, currency = 'CNY', amount = 3000, transaction_time = '2026-10-01 21:06:14' WHERE id = 1555324958656167936 AND order_no = '202610012106065931549256' AND status = 0; -- 【2.补记支付记录】必须补:幂等快路径依赖 t_pay_log, -- 缺了它以后再收到该订单回调会走不到快路径而重复入账 -- <唯一ID> 请替换为雪花ID或任意未被占用的唯一值 INSERT INTO charge_app.t_pay_log (id, user_id, openid, bank_type, mch_id, out_trade_no, transaction_id, success_time, trade_type, trade_state, attach, total, currency, payer_total, payer_currency) VALUES (<唯一ID>, 1555324358568706048, 'oK-oR5g5Y9vkVeaa7wsoLt1yMGAY', 'BANK_CREDIT', '1635831469', '202610012106065931549256', '4500000442202610019536073654', '2026-10-01 21:06:14', 'JSAPI', 'SUCCESS', '', 3000, 'CNY', 3000, 'CNY'); -- 【3.补余额】 UPDATE charge_app.t_account SET balance = balance + 3000 WHERE user_id = 1555324358568706048; -- 【4.验证】 SELECT u.id AS user_id, acc.balance, acc.discount_amount, (acc.balance - acc.discount_amount) AS refundable_amount FROM charge_app.t_user u LEFT JOIN charge_app.t_account acc ON u.id = acc.user_id WHERE u.id = 1555324358568706048; -- 【5.全量排查同类受害者】列出当天所有"待确认"的充值流水, -- 再与微信对账单逐笔核对(未支付就放弃的预下单也会是待确认,需用对账单确认哪些真的付了钱) SELECT w.id, w.user_id, w.order_no, w.amount, w.status, w.create_time FROM charge_app.t_wallet_detail w WHERE w.type = 1 AND w.status = 0 AND w.create_time >= '2026-10-01 00:00:00' AND w.create_time < '2026-10-02 00:00:00' ORDER BY w.create_time;