聚合支付API接入科普:下单、回调验签、幂等与联调
支付接入的技术本质,是把商户业务系统与支付服务方的交易接口通过安全、可重试、可观测的方式连接起来。本文讨论聚合支付或四方支付模式下的API对接流程、回调验签、幂等处理和联调注意事项,仅作技术科普,不涉及真实收款操作,也不对费率作任何承诺。
一、先明确接口边界。接入前应确认订单创建、支付发起、支付结果查询、退款申请、退款查询、订单关闭等接口的职责,并统一金额单位、币种、时间格式、字符编码和状态码含义。商户订单号应由业务系统生成,具备唯一性和可追溯性;支付服务方订单号用于对账和排障,不应与商户订单号混用。异步通知地址必须是公网可访问的HTTPS地址,能够处理重复通知和超时重试。
二、API对接的基本流程。典型流程是:商户服务端创建订单并调用下单接口,携带商户号、商户订单号、金额、商品描述、通知地址和附加字段,按约定算法生成请求签名;支付服务方返回支付参数、二维码链接或跳转地址;用户在支付页面完成操作后,支付服务方通过异步通知告知结果;商户服务端验签并更新业务状态,同时可调用查询接口做主动补偿。退款和关闭订单也应遵循同样的签名、幂等和状态校验原则。
三、回调验签要点。接收异步通知时,应保留原始报文,不要先反序列化再验签,避免字段丢失或顺序变化导致验签失败。按接口文档要求提取签名版本、时间戳、随机串、商户号、订单号、金额、状态等字段,使用平台公钥或约定密钥进行验签。验签通过后,还要校验商户号是否属于当前系统、订单号是否存在、金额是否与本地订单一致、状态是否合法。建议校验时间戳窗口并记录随机串,防止重放。处理完成后返回平台约定的成功应答;业务处理失败时返回失败或非成功应答,便于平台按策略重试。
四、幂等处理设计。幂等应贯穿下单、回调、查询和退款。下单侧可用商户订单号作为业务唯一键,数据库建立唯一索引;重复请求返回首次结果或明确的状态。回调侧不能假设通知只到达一次,应先落库通知记录,再以商户订单号加状态机做条件更新,只允许合法状态迁移,例如待支付到支付成功、支付成功到退款中。重复回调应返回成功应答,避免平台持续重试。退款接口同样需要退款请求号和唯一约束,防止重复退款。分布式环境下可结合事务、唯一索引和短锁,但最终一致性仍应以数据库状态为准。
五、联调注意事项。联调应使用沙箱环境和测试商户,不使用真实收款数据。密钥、证书和测试账号应分环境管理,日志中脱敏手机号、证件号、银行卡号和签名原文。检查服务器时间是否同步,避免时间戳校验失败;检查金额单位和编码是否一致;检查通知地址是否可从公网访问,以及IP白名单和防火墙策略。要覆盖超时、重复通知、验签失败、金额不一致、订单不存在、状态冲突、退款重复提交等异常场景。对重试策略设置上限和退避,避免雪崩;对关键接口增加监控、告警和链路追踪。上线前建议用对账文件或查询接口核对订单状态,验证业务幂等和补偿机制是否闭环。
总体而言,支付API接入的关键不是把请求发出去,而是让每一次请求和通知都可验签、可重试、可幂等、可追踪。把状态机、唯一约束和异常补偿设计清楚,才能降低联调成本,并为后续风控规则和异常交易识别留出扩展空间。