PAYATHON 2026

H5支付提示沙箱模式商户合作协议已到期怎么办?

支付阿杰

结论

这个提示与订单号无关,原因是当前沙箱商户的 H5 支付合作协议或产品权限已经失效,更换 out_trade_no 不能解决问题。

PC 网站支付正常,并不代表 H5 支付协议仍然有效,因为两者属于不同的产品能力:

  • H5 支付通常调用 alipay.trade.wap.pay,product_code 为 QUICK_WAP_WAY
  • PC 网站支付通常调用 alipay.trade.page.pay,product_code 为 FAST_INSTANT_TRADE_PAY

原因分析

商户号 2088621987647163 和 APPID 2021000121616576 所属的沙箱环境可能存在以下情况:

  1. H5 支付产品的沙箱协议已经到期;
  2. 沙箱账号或应用曾被重置,导致原有产品授权失效;
  3. 沙箱规则更新后,需要重新确认协议或开通手机网站支付能力;
  4. 请求调用了 H5 支付接口,但当前应用只有 PC 网站支付权限;
  5. 应用、商户账号和签约产品不属于同一套沙箱配置。

这类错误通常出现在支付请求到达支付宝后,是商户协议或产品权限校验未通过,不是订单重复、金额格式错误或签名失败。

解决步骤

1. 检查沙箱应用与账号

登录支付宝开放平台,在沙箱环境中逐项确认:

  • 当前应用的 APPID 是否为 2021000121616576;
  • 沙箱商家账号是否对应商户号 2088621987647163;
  • 应用是否仍然存在,状态是否正常;
  • 手机网站支付能力是否已经开通;
  • 页面上是否有重新签署、确认协议或续期的入口。

开放平台的页面可能会调整。如果找不到明确的续期入口,请以当前控制台显示的产品状态和操作提示为准。

2. 重新开通 H5 支付能力

进入该沙箱应用的产品或能力管理页面,找到”手机网站支付”或对应的 H5 支付产品,然后根据页面状态处理:

  • 显示未开通时,重新添加并开通;
  • 显示协议到期时,按提示重新确认协议;
  • 显示异常但无法操作时,可以尝试重置沙箱环境或重新创建沙箱应用。

重置或重建后,APPID、沙箱商户号和支付宝公钥等配置可能发生变化,需要同步更新项目配置。

3. 核对接口和产品代码

H5 支付应调用:

alipay.trade.wap.pay

业务参数应使用:

{
  "product_code": "QUICK_WAP_WAY"
}

不能用 PC 网站支付的 FAST_INSTANT_TRADE_PAY 代替 H5 产品代码。

4. 核对沙箱网关

沙箱请求应发送到:

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

正式环境网关为:

https://openapi.alipay.com/gateway.do

应用、商户账号、密钥和网关必须属于同一环境,沙箱与正式环境的配置不能混用。

Java 调用示例

以下代码只展示 H5 支付的核心调用结构。私钥、公钥和回调地址等内容需要替换成实际配置:

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

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

AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
model.setOutTradeNo("TEST_" + System.currentTimeMillis());
model.setTotalAmount("0.01");
model.setSubject("H5支付测试");
model.setProductCode("QUICK_WAP_WAY");
model.setQuitUrl("https://example.com/order");

request.setBizModel(model);

AlipayTradeWapPayResponse response = alipayClient.pageExecute(request);

if (response.isSuccess()) {
    String form = response.getBody();
    // 将 form 返回给浏览器,由浏览器自动提交或直接渲染
} else {
    System.out.println("code=" + response.getCode());
    System.out.println("subCode=" + response.getSubCode());
    System.out.println("subMsg=" + response.getSubMsg());
}

如果使用通用请求方式,业务参数至少应包含:

{
  "out_trade_no": "TEST_202609130001",
  "total_amount": "0.01",
  "subject": "H5支付测试",
  "product_code": "QUICK_WAP_WAY",
  "quit_url": "https://example.com/order"
}

注意事项

  • 不要反复更换订单号来排查这个错误。协议到期后,无论订单号怎么变化,请求都会被拒绝。
  • out_trade_no 在同一商户下仍需保持唯一,以免协议恢复后发生订单重复。
  • PC 网站支付和手机网站支付的签约状态需要分别检查。
  • 重置沙箱环境前,请保存现有配置。重置后需要重新核对 APPID、商户号、应用私钥、支付宝公钥和沙箱买家账号。
  • 支付结果应以异步通知和主动查询为准,不能只看同步跳转页面。
  • 如果控制台显示 H5 产品状态正常,但接口仍提示协议到期,请保存完整的 code、sub_code、sub_msg 和请求时间,并通过支付宝开放平台的技术支持渠道核查对应沙箱商户的状态。不要公开应用私钥、支付签名或完整的敏感请求内容。

备注:内容仅供参考。