## 接入规范和安全红线 ### 私钥安全规范 - 私钥不得保存在客户端。构造交易数据并签名必须在商家服务端完成,商家的应用私钥绝对不能保存在商家APP客户端中,也不能从服务端下发 - 私钥不得出现在日志中。私钥的保密等级往往比源码高得多,将会增加私钥泄露的风险,推荐将私钥信息储存在专用的私钥文件中 - 私钥不得上传公共仓库。私钥泄露将导致应用和支付宝交互的安全性完全丧失 ### 支付结果处理规范 **支付结果判断核心原则**: - 仅当 `trade_status` 为 `TRADE_SUCCESS` 或 `TRADE_FINISHED` 时,才可认定为买家付款成功 - 前台同步跳转结果仅作通知,**必须以异步通知或查询接口结果为准** - 未收到异步通知时,**必须调用查询接口**确认订单状态 **支付结果确认原则**:
由于网络异常、系统波动等原因,可能存在用户支付成功但商家未收到异步通知的情况。核心防范措施: | 风险类型 | 表现 | 防范措施 | | --- | --- | --- | | 商家资损 | 用户未付款但商家判定成功 | 不依赖前台同步结果,以异步通知或查询为准 | | 用户资损 | 用户已付款但商家判定失败,再次扣款 | 未确认支付结果前不要求用户再次付款,先退款再重新支付 | 核心原则: 1. 网络超时或未知异常时,必须调用查询接口确认订单状态 2. 支付结果以商家端查询结果为准,用户手机账单仅作参考 **退款处理核心规范**: - 退款周期:交易发生后 **12个月**内可退款(以签约协议为准) - 退款方式:资金原路返回用户账户 - 判断退款成功:退款接口返回 `fund_change=Y`,或退款查询接口返回 `refund_status=REFUND_SUCCESS` - 同一交易多次部分退款:每次必须使用不同的 `out_request_no`(退款请求号) ### 异步通知规范 - 收到异步通知后必须先验签 - 商户必须确保out_trade_no、total_amount、app_id、seller_id等关键业务字段为商户本身信息 - 异步通知必须进行幂等处理,过滤重复的通知结果数据 - 处理完成后返回字符串 `success`(仅此7个字符),否则支付宝会重试通知 **异步通知特性**: - 通知方式:POST 请求 - `notify_url` 要求:外网可访问、无空格和 HTML 标签、不能重定向 - 同一条异步通知重试时,`notify_id` 不变 - 异步回调地址 HTTP 状态码为 200 表示成功,404 或 500 表示服务器错误需排查