结算页默认余额支付,应付 299。用户切到信用卡,页面金额还是 299,渠道实际扣了 301.99,多出来的 2.99 是百分之一的手续费。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,支付方式只改了提交给渠道的参数,订单金额在创建时就固定下来,手续费按方式区分的规则没有参与计算。渠道端自己加了手续费,两边账面就对不上。
「支付方式切换金额」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
$fee = $method === 'credit' ? round($amount * 0.01, 2) : 0; $payable = $amount + $fee; // 返回给前端展示,并随订单落库
具体做法是,支付方式切换时重新请求一次结算接口,把方式作为参数传进去,返回最新应付;手续费规则配在服务端,前端只展示,不要在 JS 里自己算;下单时把 pay_method 和 fee 一起落库,对账按这两个字段核对。
最后用这个标准收尾,切换支付方式后页面金额立即变化,渠道扣款与页面显示一致,对账无差额。
