PAYATHON 2026

沙箱环境H5支付提示“系统繁忙,请稍后再试”是什么原因?

支付阿杰

结论

这种情况通常与沙箱维护无关,也不能直接说明 alipay.trade.wap.pay 的请求参数或签名有误。

如果扫码支付、APP 支付以及通过 H5 拉起沙箱客户端都能正常完成,只有在浏览器内直接进行 H5 支付时提示“系统繁忙”,问题更可能出在支付宝沙箱的浏览器收银台链路。这条链路可能支持不完整,也可能暂时不可用。

沙箱无法完整模拟生产环境的全部收银台能力。“系统繁忙”也可能只是一个通用错误页面,不能据此认定服务器当前繁忙。

原因分析

H5 支付通常有两种链路:

  1. 浏览器跳转到支付宝收银台,再拉起支付宝客户端付款。
  2. 不拉起客户端,直接在浏览器收银台登录并付款。

第一种链路能够成功,通常说明以下环节基本正常:

  • 沙箱应用配置有效;
  • 请求可以到达沙箱网关;
  • 签名和主要业务参数基本正确;
  • 沙箱买家账号或沙箱客户端可以付款;
  • 异步通知、同步跳转等基础流程可以执行。

第二种链路还要依赖沙箱的浏览器收银台、登录验证、风控和账户认证等能力。这些能力可能受到终端、浏览器、沙箱账号或沙箱支持范围的限制。因此,即使测试时间不在维护窗口内,页面仍可能提示“系统繁忙,请稍后再试”。

排查步骤

1. 确认使用的是沙箱网关

沙箱请求地址应为:

https://openapi-sandbox.dl.alipaydev.com/gateway.do

不要混用生产网关、生产应用私钥、生产支付宝公钥或生产账号。

2. 检查 H5 支付参数

调用接口应为:

alipay.trade.wap.pay

核心业务参数至少应包含:

{
  "out_trade_no": "唯一商户订单号",
  "total_amount": "0.01",
  "subject": "沙箱H5支付测试",
  "product_code": "QUICK_WAP_WAY"
}

还需逐项检查:

  • out_trade_no 是否唯一;
  • total_amount 是否为合法的金额字符串;
  • product_code 是否为 QUICK_WAP_WAY;
  • return_url 和 notify_url 是否能够正常访问;
  • 请求编码是否为 UTF-8;
  • 签名算法和支付宝公钥是否与沙箱应用配置一致。

3. 查看网关的原始响应

如果网关已经返回支付表单或跳转 URL,错误是在打开收银台后出现的,问题通常不在接口签名阶段。

如果接口直接返回 JSON 错误,应记录:

  • code
  • sub_code
  • sub_msg
  • msg
  • trace_id(如果响应中存在)

不要只根据页面上的“系统繁忙”排查问题。这个通用页面可能没有显示真正的错误信息。

4. 更换终端和浏览器验证

可以分别测试:

  • Android 系统浏览器;
  • Chrome 等常规浏览器;
  • 支付宝沙箱客户端;
  • 普通支付宝客户端;
  • 应用内置 WebView。

沙箱客户端和部分沙箱支付能力可能存在平台限制。具体支持范围可能随支付宝沙箱环境调整,应以测试时开放平台发布的沙箱说明为准。

5. 使用生产环境的小额订单做最终验收

沙箱适合验证接口调用、签名、订单创建和通知处理,但无法证明生产环境中的所有收银台页面都能正常工作。

如果沙箱中只有浏览器内付款失败,可以等应用上线审核和产品权限准备完成后,使用生产环境的小额订单验证完整的 H5 支付链路。切换到生产环境时,必须同时替换:

  • 应用 ID;
  • 网关地址;
  • 应用私钥;
  • 支付宝公钥或证书;
  • 买家账号及相关环境配置。

Java 调用示例

AlipayClient alipayClient = new DefaultAlipayClient(
    "https://openapi-sandbox.dl.alipaydev.com/gateway.do",
    APP_ID,
    APP_PRIVATE_KEY,
    "json",
    "UTF-8",
    ALIPAY_PUBLIC_KEY,
    "RSA2"
);

AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
request.setReturnUrl("https://example.com/payment/return");
request.setNotifyUrl("https://example.com/payment/notify");

request.setBizContent("""
{
  "out_trade_no": "TEST202609130001",
  "total_amount": "0.01",
  "subject": "沙箱H5支付测试",
  "product_code": "QUICK_WAP_WAY"
}
""");

String paymentForm = alipayClient.pageExecute(request).getBody();

服务端取得 paymentForm 后,可以将其作为 HTML 响应返回,让浏览器自动提交到支付宝收银台:

response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(paymentForm);
response.getWriter().flush();

注意事项

  • 不要为了避开“系统繁忙”而反复修改订单参数,这样可能掩盖实际的环境问题。
  • H5 页面跳转成功不代表支付成功,应以异步通知中的交易状态为准。
  • 异步通知验签成功后,还要核对 app_id、out_trade_no、total_amount 和 seller_id。
  • return_url 只负责用户跳转,不能作为将订单更新为“已支付”的唯一依据。
  • 如果生产环境也能稳定复现,应保存发生时间、订单号、完整接口响应和 trace_id,再提交给支付宝技术支持排查。只提供“系统繁忙”页面,通常无法定位具体原因。

备注:内容仅供参考。