如何设置支付宝电脑网站支付二维码刷新时间?
支付老李
结论
支付宝电脑网站支付(alipay.trade.page.pay)收银台中的二维码由支付宝控制刷新时间,商户无法通过接口参数直接设置。
如果需要限制二维码对应订单的可支付时长,可以设置 timeout_express。这个参数设置的是订单最晚付款时间,与二维码页面的刷新频率无关。
设置订单支付时限
调用 alipay.trade.page.pay 时,在业务参数中传入 timeout_express:
{
"out_trade_no": "ORDER_202609130001",
"total_amount": "99.00",
"subject": "测试商品",
"product_code": "FAST_INSTANT_TRADE_PAY",
"timeout_express": "30m"
}
例如,30m 表示订单创建后可在 30 分钟内付款。订单超时后的最终交易状态需要通过支付宝查询接口确认,不能仅凭浏览器中的倒计时判断。
Java SDK 示例:
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
request.setReturnUrl("https://www.example.com/alipay/return");
request.setNotifyUrl("https://www.example.com/alipay/notify");
request.setBizContent("""
{
"out_trade_no": "ORDER_202609130001",
"total_amount": "99.00",
"subject": "测试商品",
"product_code": "FAST_INSTANT_TRADE_PAY",
"timeout_express": "30m"
}
""");
AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
if (response.isSuccess()) {
String paymentForm = response.getBody();
// 将支付宝返回的表单内容输出到浏览器
}
可用的时间单位以及最小值、最大值可能随接口规则调整,请以支付宝开放平台当前发布的 alipay.trade.page.pay 接口文档中对 timeout_express 的说明为准。
如果需要自定义“刷新”效果
商户可以在自己的订单页面显示倒计时,并在倒计时结束后查询订单状态:
const expireAt = Date.now() + 30 * 60 * 1000;
const timer = setInterval(async () => {
const remaining = expireAt - Date.now();
if (remaining <= 0) {
clearInterval(timer);
// 向商户服务端查询订单状态,
// 服务端再调用 alipay.trade.query 或读取异步通知处理结果。
await queryOrderStatus();
}
}, 1000);
如果需要重新发起支付,应由服务端先根据订单状态判断是否创建新的支付请求。不要定时刷新支付宝收银台页面,也不要在原订单状态尚未明确时反复生成支付页面,以免出现重复订单或支付状态判断错误。
注意事项
timeout_express设置的是订单支付期限,不是支付宝二维码的刷新间隔。- 支付结果应以支付宝异步通知和
alipay.trade.query的查询结果为准。 - 前端倒计时仅用于界面提示,不能据此判定订单已经关闭或支付失败。
return_url是用户付款后的页面跳转地址,不能用于可靠地确认支付结果。- 处理异步通知时,应校验签名、商户订单号、金额和商户身份等重要字段。
- 如果使用的不是
alipay.trade.page.pay,而是由商户自行展示二维码的其他支付产品,应按对应接口规定的二维码有效期和订单超时规则处理。
备注:内容仅供参考。
