PAYATHON 2026

直付通模式下电脑支付报错 SECONDARY_MERCHANT_NOT_MATCH

支付阿杰

结论

SECONDARY_MERCHANT_NOT_MATCH 表示当前交易指定的二级商户,与直付通签约、进件或订单中记录的二级商户信息不一致。

订单号生成只说明支付宝收到了请求,不代表收银台已经创建成功。电脑网站支付在校验二级商户归属关系时失败,因此不会显示付款页面。

常见原因

可以从以下几方面排查:

  1. sub_merchant.merchant_id 填写有误,比如填成了平台商户 PID、app_id、登录账号或商户编号。
  2. 二级商户未通过当前平台完成直付通进件,或者进件状态尚未生效。
  3. 二级商户归属于其他平台商户,当前应用或平台 PID 无权为其发起交易。
  4. 创建订单和调起电脑收银台时,使用的二级商户编号不同。
  5. 混用了沙箱和生产环境的商户、应用或密钥配置。
  6. 通过应用授权调用时,app_auth_token 对应的商户与交易中的二级商户关系不匹配。
  7. 复用了已有的 out_trade_no,但新请求传入了不同的二级商户信息。

解决步骤

1. 确认二级商户编号

检查请求中的以下内容:

{
  "sub_merchant": {
    "merchant_id": "2088xxxxxxxxxxxx"
  }
}

merchant_id 应填写该笔交易实际收款方在直付通体系中的二级商户 PID,不能填写以下信息:

  • 平台商户 PID
  • 支付宝开放平台 app_id
  • 商户登录账号
  • 企业统一社会信用代码
  • 直付通进件申请单号

具体字段名称仍以当前接口的官方参数定义为准。

2. 核对商户归属和状态

在支付宝商家平台或开放平台中确认:

  • 二级商户已经完成直付通进件;
  • 审核状态正常,相关产品权限已经生效;
  • 二级商户归属于当前平台商户;
  • 当前 app_id 确实由该平台商户配置,并用于直付通交易;
  • 签约环境与请求环境一致。

如果二级商户刚完成进件,还要确认产品权限是否已经正式生效。进件申请已经提交,不等于相关权限已经可以使用。

3. 保持各阶段的商户信息一致

如果业务流程是先创建订单,再调用电脑网站支付,以下信息在整个过程中必须保持一致:

  • out_trade_no
  • app_id
  • 平台商户身份
  • sub_merchant.merchant_id
  • app_auth_token,如果使用
  • 生产或沙箱环境

如果订单创建时使用了错误的二级商户信息,不建议继续复用原来的 out_trade_no。确认配置无误后,请使用新的商户订单号重新测试。

请求示例

以下示例只展示与本问题有关的结构。实际参数需根据所用 SDK 和接口文档补充:

{
  "out_trade_no": "ORDER_202609120001",
  "total_amount": "100.00",
  "subject": "测试订单",
  "product_code": "FAST_INSTANT_TRADE_PAY",
  "sub_merchant": {
    "merchant_id": "2088xxxxxxxxxxxx"
  }
}

Java SDK 可以按类似方式设置二级商户信息:

AlipayTradePagePayModel model = new AlipayTradePagePayModel();
model.setOutTradeNo("ORDER_202609120001");
model.setTotalAmount("100.00");
model.setSubject("测试订单");
model.setProductCode("FAST_INSTANT_TRADE_PAY");

SubMerchant subMerchant = new SubMerchant();
subMerchant.setMerchantId("2088xxxxxxxxxxxx");
model.setSubMerchant(subMerchant);

AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
request.setBizModel(model);
request.setReturnUrl(returnUrl);
request.setNotifyUrl(notifyUrl);

AlipayTradePagePayResponse response = alipayClient.pageExecute(request);

不同版本 SDK 的模型类名称和设置方式可能不同。如果当前 SDK 没有 setSubMerchant 方法,请查阅该版本的接口文档,通过 biz_content 传递参数,或者升级到支持相应字段的 SDK。不要自行修改字段名称。

排查时应记录的信息

向支付宝技术支持提交问题时,建议提供:

  • app_id
  • 平台商户 PID
  • 二级商户 PID
  • 接口名称
  • 请求时间
  • 支付宝返回的 code、sub_code、sub_msg
  • request_id 或支付宝交易相关流水标识
  • 脱敏后的 biz_content

不要提交应用私钥、支付宝公钥、完整授权令牌或用户敏感信息。

注意事项

SECONDARY_MERCHANT_NOT_MATCH 通常与浏览器、前端跳转或回调地址无关。修改页面跳转逻辑或反复刷新收银台,一般无法解决这个问题。应先核对二级商户 PID、平台归属、进件状态和授权调用关系。

如果这些配置均一致但错误仍然出现,需要由支付宝进一步核查该二级商户与平台应用之间的签约关系和产品权限。

备注:内容仅供参考。