PAYATHON 2026

订单码支付与手机网站支付的有效期如何计算?

支付阿杰

结论

订单码支付

订单码支付生成的二维码默认通常在 2 小时内有效。

以下参数都可以用来设置期限,但用途不同:

  • qr_code_timeout_express:设置二维码的相对有效期。
  • timeout_express:设置交易允许付款的相对时长。
  • time_expire:设置交易允许付款的绝对截止时间。

这三个参数不能简单地理解为都在修改“二维码有效期”。即使二维码仍可识别,只要关联交易超过付款期限,就无法继续支付。实际可支付时间同时受二维码有效期和交易有效期限制。

有效期也不是从扫码、打开收银台或输入支付密码时开始计算:

  • qr_code_timeout_express、timeout_express 等相对时间,一般从支付宝成功受理 alipay.trade.precreate 请求、创建预下单交易并生成二维码时起算。
  • time_expire 是绝对时间,没有单独的起算点,到达指定时间后即失效。

手机网站支付

手机网站支付的未付款交易默认通常在 15 天内有效。如果当前接口支持 time_expire,商户可以指定一个更早的绝对截止时间,缩短订单有效期。

有效期并不是从“用户输入正确支付密码”时开始计算。输入正确密码属于支付确认过程,此时交易通常已经创建。

手机网站支付采用页面跳转模式。商户服务器通过 SDK 生成表单或支付 URL 时,支付宝不一定已经创建交易。默认有效期一般从用户浏览器提交支付请求、支付宝接收请求并创建交易时起算。

设置 time_expire 后,则直接以该绝对时间为准,与用户何时进入收银台或输入密码无关。

参数应如何使用

订单码支付

如果需要控制二维码的展示时长,可以设置 qr_code_timeout_express:

{
  "out_trade_no": "ORDER_202609090001",
  "total_amount": "100.00",
  "subject": "测试订单",
  "qr_code_timeout_express": "30m"
}

这段配置将二维码的相对有效期设置为 30 分钟。

如果需要限制交易必须在多长时间内完成付款,可以设置 timeout_express:

{
  "out_trade_no": "ORDER_202609090002",
  "total_amount": "100.00",
  "subject": "测试订单",
  "timeout_express": "90m"
}

如果业务系统已经计算出明确的截止时间,建议使用 time_expire:

{
  "out_trade_no": "ORDER_202609090003",
  "total_amount": "100.00",
  "subject": "测试订单",
  "time_expire": "2026-09-09 18:30:00"
}

这里的日期仅用于展示格式。实际请求中的时间必须晚于支付宝受理请求的时间,并符合接口允许的范围。

手机网站支付

手机网站支付可以通过 time_expire 指定绝对截止时间:

{
  "out_trade_no": "WAP_202609090001",
  "total_amount": "100.00",
  "subject": "手机网站订单",
  "product_code": "QUICK_WAP_WAY",
  "quit_url": "https://merchant.example.com/order",
  "time_expire": "2026-09-09 18:30:00"
}

仅生成这些请求参数或支付表单,并不代表支付宝已经收到请求。通常要等用户浏览器提交表单并进入支付宝支付流程后,支付宝才会实际受理请求。

建议的处理步骤

  1. 业务系统创建商户订单时,先记录统一的业务截止时间。
  2. 订单码支付应根据业务需求设置二维码期限,同时设置交易付款期限。
  3. 手机网站支付优先通过 time_expire 传递明确的绝对截止时间。
  4. 到达业务截止时间后,商户端应停止展示二维码或支付入口。
  5. 不要只依靠前端倒计时判断订单状态。最终交易状态应通过支付宝查询接口或异步通知确认。
  6. 如果订单仍处于待支付状态,可以根据业务需要调用交易关闭接口,避免商户订单与支付宝交易状态不一致。

注意事项

  • qr_code_timeout_express 控制二维码期限,timeout_express 和 time_expire 主要控制交易付款期限,三者不能完全混为一谈。
  • 相对时间参数通常使用 m、h、d 等单位,具体格式和取值范围以当前接口的参数说明为准。
  • time_expire 必须采用接口规定的时间格式,同时注意商户服务器与支付宝使用的时区及系统时间偏差。
  • 同时传入多个有效期参数时,不要自行判断优先级,应以当前版本的接口文档为准。如果文档没有明确说明,建议只选用一种交易期限参数,以免产生歧义。
  • 默认 2 小时和默认 15 天是未明确设置有效期时的平台规则,不能代替商户自己的超时管理。
  • 自定义期限仍受支付宝接口允许范围和平台上限约束,不能通过传入任意值无限延长。
  • 用户输入支付密码的时间既不是订单码支付的起算点,也不是手机网站支付的起算点。密码校验完成时,订单可能已经接近或超过截止时间,最终应以支付宝返回的交易结果为准。

备注:内容仅供参考。