Alipay, China's leading third-party online payment solutionAlipay, China's leading third-party online payment solution

最佳实践

确保交易为终态

当面付交易存在一个中间状态WAIT_BUYER_PAY , 和三个最终状态, TRADE_SUCCESSTRADE_FINISHED,和 TRADE_CLOSED 。商户必须确保每笔交易都达到终态,同时,交易状态在商户系统,收银员端,和支付宝端必须一致。

默认情况下,一笔当面付交易三分钟内未完成支付,则会自动关闭。实际情况中,收银员大可不必等待三分钟。商户可根据具体业务要求设置自动关闭时间。

您可采取以下措施确保交易为终态:

  • 若交易结果在一定时间内未返回,如交易创建五秒后,使用查询接口,按每3-5秒一次的频率轮询。
  • 设置超时时间,如60秒,并在超时前持续进行结果轮询。
  • 若查询返回TRADE_SUCCESSTRADE_CLOSED,收银员将被通知交易结果。
  • 若查询结果一直是WAIT_BUYER_PAY,必须调用撤销接口将交易强制取消。关于撤销重试的详细逻辑,见错误处理

Note:

以下规则适用于所有产品。                    

有时收银员可能无法发起交易自动关闭操作。这时商户系统后台内必须进行配置,以对状态为WAIT_BUYER_PAY的交易进行自动关闭。该配置的触发时间可设置为稍晚于收银员端的自动关闭时间。


更多关于交易状态的信息,见交易状态

幂等

对支付宝接口而言,幂等指支付宝对重复提交的相同请求,仅返回唯一的结果。支付宝检查幂等,准确记录每一个请求的交易或退款结果。为了帮助支付宝检查幂等,您需要进行如下操作:

  • 对重复提交的支付请求,保持商户交易号(out_trade_no或partner_trans_id)一致。商户交易号相同的交易视为同一笔交易。
  • 对重复提交的退款请求,保持商户退款号out_return_nopartner_refund_id)一致。商户退款号相同的退款视为同一笔退款。

支付宝以如下方式检查支付和退款请求的幂等性:

  • 使用相同PID的支付请求:

收到支付请求后,支付宝检查商户交易号out_trade_no或partner_trans_id是否一致。商户交易号相同的交易视为对同一笔交易。之后检查其它信息,包括买家信息,交易金额等。若请求内其它信息同支付宝内部信息不一致,则会报错。否则,支付宝返回该笔交易的真实状态。

  • 使用相同PID的退款请求:

收到退款请求后,支付宝检查商户退款号out_return_nopartner_refund_id是否一致。商户退款号相同的退款视为对同一笔退款。之后检查其它信息,如退款金额等。若请求内其它信息同支付宝内部信息不一致,则会报错。否则,支付宝返回该笔退款的真实状态。

更多关于幂等的信息,见幂等