微信支付
支付不是一个按钮,而是一套订单状态流转。
前端只负责唤起支付,真正可信的金额、订单状态、支付结果和退款处理,都必须在后端完成。
一次支付通常会经过这些步骤
01后端创建待支付订单
02调用微信支付下单
03小程序唤起支付
04微信回调后端
05后端改为已支付
不要让前端自己告诉后端“我已经付了”。前端页面可以显示支付成功,但最终是否真的成功,要以后端收到微信支付回调、或后端主动查单结果为准。
订单状态要提前设计
| 状态 | 含义 | 系统动作 |
|---|---|---|
| 待支付 | 订单已创建,用户还没有完成付款 | 锁定服务名额或库存,设置过期时间 |
| 已支付 | 微信确认付款成功 | 确认预约、发通知、开放服务权益 |
| 已取消 | 用户未付款或主动取消 | 释放名额,订单不再允许支付 |
| 退款中 / 已退款 | 发生退款流程 | 记录退款单,等待支付平台结果 |
未付款 30 分钟取消,不建议只靠全表扫描。更稳的做法是给订单保存过期时间,使用延迟队列、消息队列、定时任务分片或数据库索引查询处理到期订单,小规模项目才用简单定时扫描兜底。