## 两个有效期
二维码入口和顾客扫码后产生的真实支付不是同一个阶段,应分别计时:
| 阶段 | 有效期 | 到期处理 |
| -------------------- | ------ | -------------------------------------------------- |
| 聚合二维码或短链 | 15分钟 | 页面停止展示旧二维码,需要时重新调用二维码生成接口 |
| 顾客扫码后的实际支付 | 4分钟 | 不再等待顾客完成该笔支付,查询真实交易最终状态 |
不要把二维码15分钟有效期配置成实际支付有效期,也不要把其他H5场景的3分钟支付时间用于本场景。
## 二维码生成失败
**[二维码生成接口](https://open.shouqianba.com/docs/payment/100?category_id=57)**返回成功状态但没有可用的二维码内容或图片地址时,页面不得展示空白码或自行拼接地址。应记录二维码生成流水号和脱敏错误信息,然后重新调用或提示稍后重试。
## 过期二维码
- 前端按服务端记录的生成时间计算到期时间。
- 二维码过期后立即从页面和设备移除。
- 重新生成时使用新的二维码生成请求流水号。
- 旧二维码被再次扫描时,不得把旧生成记录更新为支付成功。
## 重复扫码
顾客可能重复扫描同一二维码,或返回后再次扫码。真实支付链路必须使用真实交易订单号做幂等控制:
- 已支付订单不得再次创建扣款。
- 支付中的订单应继续确认原交易。
- 重复回调或查询结果不得重复履约。
## 密钥与二维码隔离
- `terminal_key`只保存在商户服务端。
- 浏览器、收银屏和展示设备不得获取签名密钥。
- 二维码只包含收钱吧返回的可展示内容,不嵌入商户密钥、用户隐私或调试信息。
- 日志记录二维码生成流水和返回状态即可,避免完整记录可支付链接。