PAYATHON 2026

沙箱支付宝买家扫码后一直提示“系统有点忙碌”

支付小周

结论

出现「卖家买家账号不能相同」,说明二维码已进入支付宝沙箱的交易流程,但登录账号与收款账号相同,因此触发了正常的业务校验。

换用买家账号后,如果页面提示「系统有点忙碌」,通常不能直接判断为服务器繁忙。沙箱客户端可能会用这条统一提示代替具体错误。常见原因有:

  • 使用正式版支付宝扫描沙箱二维码,导致客户端与网关环境不一致;
  • 买家账号、卖家账号或应用 app_id 不属于同一套沙箱环境;
  • 私钥、公钥或签名方式配置错误;
  • 订单参数不合法、订单重复或二维码已经失效;
  • 沙箱应用、沙箱账号或客户端状态异常。

排查时应先确认客户端和账号环境,再检查应用配置及支付宝接口的完整响应,不能只凭扫码页面上的「系统有点忙碌」判断原因。

为什么卖家账号不能付款

沙箱卖家账号是这笔交易的收款方。用同一个账号扫码付款,相当于自己向自己付款,支付宝会直接拒绝交易:

卖家买家账号不能相同,不能继续交易

看到这条提示,通常意味着以下环节已经基本正常:

  • 请求已到达支付宝沙箱网关;
  • 二维码可以正常识别;
  • 支付宝识别出了当前交易的卖家;
  • 客户端已经进入付款校验流程。

测试付款必须使用沙箱提供的买家账号,不能使用卖家账号,也不能随意换成正式环境账号。

优先检查客户端和账号环境

先确认扫描二维码的是支付宝沙箱客户端,而不是正式版支付宝。正式客户端、正式账号、沙箱客户端和沙箱账号不能混用。

可以按以下步骤重新验证:

  1. 退出支付宝客户端中的现有账号。
  2. 清除沙箱客户端缓存,必要时重新安装。
  3. 使用沙箱控制台当前显示的买家账号和登录密码重新登录。
  4. 确认买家账号与卖家账号不同。
  5. 重新创建订单并生成新的二维码。
  6. 立即扫描新二维码,不要使用历史截图或已经过期的二维码。

开放平台提供的沙箱客户端和登录方式可能随时间调整,应以当前沙箱控制台的说明为准。如果平台已经不再要求使用专用沙箱客户端,就按照控制台指定的测试入口操作。

检查网关和应用配置

整个请求流程必须使用同一套沙箱配置:

网关:https://openapi-sandbox.dl.alipaydev.com/gateway.do
app_id:沙箱应用 APPID
应用私钥:与该沙箱应用对应的私钥
支付宝公钥:沙箱环境中配置或下载的支付宝公钥
账号:该沙箱环境提供的买家账号和卖家账号

检查时重点关注这些问题:

  • 是否误用了正式环境的 app_id;
  • 是否把「应用公钥」错当成「支付宝公钥」;
  • 应用私钥是否与上传到开放平台的应用公钥配对;
  • sign_type 是否与实际使用的签名算法一致;
  • 修改密钥后,程序是否仍在加载旧配置;
  • 存在多套配置时,沙箱网关是否误读了正式环境的密钥。

如果使用证书模式,还需确认应用证书、支付宝公钥证书和支付宝根证书均来自对应环境。公钥模式和证书模式的配置也不能混用。

检查接口返回的原始内容

生成二维码时,应完整记录支付宝接口的返回值,不能只保存 qr_code。至少要检查:

code
msg
sub_code
sub_msg
out_trade_no
qr_code

只有业务响应成功后,才应向用户展示 qr_code。例如:

AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();

AlipayTradePrecreateModel model = new AlipayTradePrecreateModel();
model.setOutTradeNo(outTradeNo);
model.setSubject("沙箱支付测试");
model.setTotalAmount("0.01");

request.setBizModel(model);

AlipayTradePrecreateResponse response = alipayClient.execute(request);

System.out.println("code=" + response.getCode());
System.out.println("msg=" + response.getMsg());
System.out.println("subCode=" + response.getSubCode());
System.out.println("subMsg=" + response.getSubMsg());
System.out.println("qrCode=" + response.getQrCode());
System.out.println("body=" + response.getBody());

if (!response.isSuccess()) {
    throw new IllegalStateException(
        "创建支付宝订单失败:"
            + response.getCode() + ", "
            + response.getSubCode() + ", "
            + response.getSubMsg()
    );
}

客户端初始化示例:

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

这段代码用于说明网关、APPID、密钥和签名方式必须保持一致。具体使用哪些类和方法,应以项目当前使用的支付宝 SDK 为准。

检查订单参数

扫码前还要检查订单本身:

  • out_trade_no 必须由商户生成,并在商户系统内保持唯一;
  • total_amount 应使用字符串形式的合法金额,例如 "0.01";
  • subject 不能为空,也不要包含异常控制字符;
  • 不要重复使用已经支付、关闭或状态异常的订单号;
  • 不要长期复用旧二维码;
  • 服务器时间应保持准确,以免触发与订单时间有关的校验异常;
  • 参数应交给 SDK 编码和签名,签名完成后不要再次修改。

每次排查时,建议生成一个全新的订单号:

String outTradeNo = "SANDBOX_" + System.currentTimeMillis();

如果怀疑二维码本身有问题,可以记录 qr_code 的原始字符串,并确认二维码图片确实由该字符串生成,其中没有多余的空格、换行、HTML 转义或内容截断。

主动查询交易状态

扫码页面给出的提示过于模糊时,可以调用 alipay.trade.query 查询订单,判断问题出在订单创建、扫码确认还是支付阶段。

AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();

AlipayTradeQueryModel model = new AlipayTradeQueryModel();
model.setOutTradeNo(outTradeNo);
request.setBizModel(model);

AlipayTradeQueryResponse response = alipayClient.execute(request);

System.out.println("code=" + response.getCode());
System.out.println("subCode=" + response.getSubCode());
System.out.println("subMsg=" + response.getSubMsg());
System.out.println("tradeStatus=" + response.getTradeStatus());
System.out.println("body=" + response.getBody());

可以根据查询结果继续排查:

  • 查询不到订单:检查订单是否创建成功,以及查询时是否使用了相同的沙箱 app_id 和卖家配置;
  • 订单存在但尚未付款:检查买家账号、客户端环境和二维码有效性;
  • 返回签名或权限错误:重新核对密钥、签名方式和应用权限;
  • 订单已经关闭或完成:更换新的 out_trade_no 后重新测试。

如果异步通知地址 notify_url 无法从公网访问,通常只会影响支付完成后的通知,一般不会直接导致扫码阶段显示「系统有点忙碌」,所以不必优先排查这一项。

推荐排查顺序

按以下顺序检查,通常可以更快找到问题:

  1. 确认正在使用正确的沙箱客户端,或当前平台指定的测试入口。
  2. 使用控制台当前提供的沙箱买家账号登录。
  3. 确认买家账号与卖家账号不同。
  4. 确认网关、app_id、私钥和支付宝公钥属于同一套沙箱应用。
  5. 生成全新的 out_trade_no 和二维码。
  6. 查看预创建接口的完整响应,重点检查 sub_code 和 sub_msg。
  7. 调用 alipay.trade.query 查询订单状态。
  8. 清除客户端缓存或重新安装沙箱客户端,再次测试。
  9. 如果多套买家账号都失败,且接口参数和签名均正常,再考虑沙箱服务自身异常。

沙箱环境偶尔会出现账号或服务不稳定,但仅凭「系统有点忙碌」还不能认定是平台故障。向平台支持提交问题时,应准备沙箱 app_id、接口名称、out_trade_no、请求时间、完整响应体和客户端截图。不要提交或公开私钥、完整签名串及账号密码。

备注:内容仅供参考。