收款与开票:钱到账才算成功
收款链路的设计目标是:钱到账才算成功,没到账绝不给成功回执。 这一条决定了掉单率的下限,也决定了出问题时你能不能对得清。
一、三种收款方式
| 方式 | 适合场景 | 到账确认 |
|---|---|---|
| 在线支付(扫码) | 个人用户小额充值、订阅续费 | 支付平台异步通知,服务端验签后入账 |
| 二维码收款 | 无商户号时的过渡方案 | 人工核对后手工核销 |
| 对公转账 | 企业客户大额预充 | 财务确认到账后核销并开票 |
二、配置在线支付(以微信支付 v3 为例)
- 在后台「支付渠道」新增一条渠道,一个渠道一行;
- 填商户号、APIv3 密钥、证书序列号、私钥,以及微信支付公钥(公钥模式);
- 保存后密钥只存在服务端,列表里只回显掩码;后续编辑留空即表示不修改;
- 跑一次「渠道自检」:它会用一个不存在的订单号去探活,并反验公钥是否正确;
- 自检通过后再小额实付一笔,确认回调入账。
为什么一定要自检:公钥贴错时下单是成功的,只有等回调验签才会失败—— 那时候用户已经付了钱,你却入不了账。宁可在收款前拦下。
三、回调与掉单
回调处理是 fail-closed 的:配置缺失返回失败、验签失败返回失败、入账失败返回失败。 只有真正入账成功才回成功。这样支付平台会持续重试,直到你这边修好为止。
如果发现某笔订单「用户说付了、系统没到账」:
- 先在订单列表按订单号查状态;
- 查支付渠道后台的订单状态;
- 确认已付款但未入账的,按工单走人工补单,并记录原因; 不要直接改余额,否则对账时对不上。
四、发票
个人与企业都能在线申请开票。实名信息里的敏感字段(如身份证号)加密存储, 后台开票详情才可见明文,前端一律脱敏展示。开票记录与订单绑定,可随时回查。
五、踩坑清单
| 现象 | 原因与处置 |
|---|---|
| 下单报「商户订单号错误」 | 订单号长度不在 6–32 位之间。系统生成的订单号已满足要求,但如果二次开发自己拼号,务必守这个长度区间。 |
| 用户付了钱但余额没变 | 回调验签失败(公钥/密钥填错)或回调地址公网不可达。先跑渠道自检,再看回调日志。 |
| 收银台链接被人改订单号 | 不可能生效:链接带签名,改任何参数都会校验失败。 |
| 改完渠道配置不生效 | 密钥类字段留空表示「不修改」;想真正清空要显式操作。 |
| 退款怎么走 | 当前由人工审批处理:用户提交工单 → 你核对订单与到账 → 线下/渠道后台退款 → 系统内登记。 不要把退款做成直接改余额。 |

