主题
上线验收与常见问题
后台与环境
- [ ] 商户及应用启用,密钥只保存在商户服务端。
- [ ] 支付通道、渠道参数、费率、限额正确,上游产品权限已开通。
- [ ] 收银台、网关 HTTPS 可达,静态资源及 API 代理路径正确。
- [ ] JSAPI 授权域名、应用身份及渠道配置齐全,扫码场景不误要求 JSAPI 身份。
- [ ] 数据库、业务 Redis、队列 Redis、共享存储符合部署文档,查单/通知/过期任务运行。
- [ ] 结算分账策略确认,未开放能力不作为上线依赖。
商户系统验收
| 验收项 | 预期 |
|---|---|
| 正确签名 / 修改金额仍用旧签名 | 正常通过 / 篡改被拒绝 |
| 中文、0、false、空串、JSON 扩展 | 签名一致,不丢失 0/false |
| 下单 code=0、orderState=0/1 | 不发货,等待最终结果 |
| 支付成功通知 | 验签,核对单号/金额/币种,提交事务后返回纯文本 SUCCESS |
| 同一通知并发、重复或延迟 | 仅入账或发货一次 |
| 断连、超时、上游未知 | 原单查询,不创建第二笔扣款 |
| 返回页先到、通知后到 | 从商户服务端获取结果,不仅按跳转参数发货 |
| 退款受理 state=1 | 查询原退款单,state=2 才确认完成 |
| 通知不可达后恢复 | 支持重发与主动查单补偿 |
| 跨商户查单 | 被拒绝;同商户内按实际查询范围设计权限 |
支付和退款查询当前按商户归属校验,不额外按 appId 隔离同商户订单。调用应用仍需认证通过并属于该商户。
收银台专项
- [ ] 普通浏览器、微信、支付宝打开测试链接,可用项符合开通产品及环境。
- [ ] API 返回 payurl;商户端测试二维码打开的是原订单链接。
- [ ] 金额、状态正确,选择页不展示商户名称及渠道标识。
- [ ] 二维码、图片、钱包链接、Bridge 按返回类型处理;Scheme 被阻止时可手动操作。
- [ ] 刷新恢复原展示,重复点击对应同一笔渠道支付,不能换项重复扣款。
- [ ] 过期、关闭、成功停止展示支付信息,支付中不能本地取消。
- [ ] 授权失败、支付失败、退出钱包、未知结果均有明确提示。
常见问题
code=0 为什么没有支付成功?
只表示接口受理成功。下单看 orderState,查询看 state,支付成功为 2。收银台 confirm 还要检查内层 code。
超时能生成新单号重付吗?
先查询原单。超时可能发生在渠道已受理之后,直接换号会形成重复支付。
收银台没有支付方式?
检查订单是否仍为状态 0、是否过期、创建时有无候选通道,以及当前渠道、应用配置和环境。不在前端写死选项绕过服务器校验。
可以打开链接却不能自动唤起钱包?
浏览器限制 Scheme、跨应用跳转及用户手势,JSAPI 还需要钱包环境及身份。保留二维码或手动入口,最终结果以服务端为准。
退款没有通知?
当前 notifyUrl 仅保存,商户退款通知尚未实现。必须使用退款查询。
如何排查验签失败?
检查环境、应用密钥、全部实际发送的非空参数、忽略大小写排序、原始中文和 JSON 文本。签名前不做 URL 编码;响应验签 data,通知验签全部非空字段。不把密钥或含密钥的签名原文贴到公开日志。