PAYATHON 2026

直付通二级商户调用alipay.trade.wap.pay是否需要传smid

支付老李

结论

在直付通模式下,平台调用 alipay.trade.wap.pay 为二级商户收款时,需要传入该二级商户的 smid。

smid 不是 alipay.trade.wap.pay 的独立顶层参数,应通过 biz_content 中的 sub_merchant.merchant_id 传递:

{
  "sub_merchant": {
    "merchant_id": "二级商户的smid"
  }
}

不要将 smid 填入 seller_id、extend_params.sys_service_provider_id 或应用授权相关参数。这些字段各有不同含义。

传参规则

直付通交易一般由平台应用发起,实际经营和收款主体则是已经完成进件的二级商户。支付宝通过 sub_merchant 判断交易属于哪个二级商户。

各字段的填写方式如下:

字段填写内容
sub_merchant.merchant_id二级商户完成直付通进件后获得的 smid
product_code手机网站支付固定填写 QUICK_WAP_WAY
out_trade_no平台侧唯一订单号
total_amount订单金额,单位为元
subject订单标题

如果当前使用的不是直付通模式,是否需要传入 sub_merchant,应以相应产品的接口契约为准。直付通的规则不能直接用于普通当面付或普通手机网站支付。

JSON 示例

biz_content 可以使用以下结构:

{
  "out_trade_no": "ORDER_202609090001",
  "total_amount": "100.00",
  "subject": "商品订单",
  "product_code": "QUICK_WAP_WAY",
  "sub_merchant": {
    "merchant_id": "2088XXXXXXXXXXXX"
  }
}

其中:

2088XXXXXXXXXXXX

需要替换为二级商户进件成功后取得的真实 smid,不能填写平台的支付宝用户 ID、应用 app_id 或商户自行生成的编号。

Java SDK 示例

使用支付宝 Java SDK 时,可以通过 SubMerchant 模型设置二级商户信息:

AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();

AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
model.setOutTradeNo("ORDER_202609090001");
model.setTotalAmount("100.00");
model.setSubject("商品订单");
model.setProductCode("QUICK_WAP_WAY");

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

request.setBizModel(model);
request.setReturnUrl("https://example.com/pay/return");
request.setNotifyUrl("https://example.com/pay/notify");

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

不同版本的 Java SDK 可能采用不同的模型类包名或字段封装方式。如果当前 SDK 中的 AlipayTradeWapPayModel 没有 setSubMerchant 方法,可以升级到支持该字段的版本,也可以直接通过 setBizContent 传入 JSON:

request.setBizContent("""
{
  "out_trade_no": "ORDER_202609090001",
  "total_amount": "100.00",
  "subject": "商品订单",
  "product_code": "QUICK_WAP_WAY",
  "sub_merchant": {
    "merchant_id": "2088XXXXXXXXXXXX"
  }
}
""");

常见错误

将 smid 传给 seller_id

seller_id 表示交易卖家账号标识,并不是传递直付通二级商户编号的通用位置。直付通的 smid 应传入:

sub_merchant.merchant_id

将 smid 传给 sys_service_provider_id

extend_params.sys_service_provider_id 通常用于传递系统服务商相关标识,与二级商户的 smid 不是同一类标识。

使用进件申请编号代替 smid

进件申请单号、平台内部商户编号和 smid 是三种不同的标识。支付请求只能使用二级商户进件成功后返回或查询到的正式 smid。

二级商户状态尚未生效

参数结构正确并不代表交易一定能够成功。如果二级商户尚未完成签约、审核没有通过、状态不可用,或未开通相应的支付能力,交易仍可能失败。

遇到这种情况,应先查询二级商户的进件和签约状态,再结合支付宝返回的 code、sub_code 和 sub_msg 排查原因。

注意事项

支付请求中的 sub_merchant.merchant_id 必须与实际履约、收款的二级商户一致,不能在多个二级商户之间混用。

如果还使用了直付通分账、结算或其他资金处理能力,需要按照对应产品的规则另行填写结算参数。传入 sub_merchant.merchant_id 只能确定交易归属,不能代替结算或分账配置。

实际接入时,应以当前开放平台对 alipay.trade.wap.pay 的接口定义,以及直付通产品对 sub_merchant 字段的最新要求为准。如果线上接口文档与所用 SDK 模型不一致,应优先按照接口实际支持的 JSON 字段传参,并根据支付宝返回的错误码确认参数校验结果。

备注:内容仅供参考。