PAYATHON 2026

服务商为商家下载对账单是否只需传入二级商户smid?

支付阿杰

结论

不能只传二级商户的 smid。

smid 只用于标识要查询的二级商户。调用 alipay.data.dataservice.bill.downloadurl.query 时,通常还要提供以下内容:

  • bill_type:账单类型,例如交易账单。
  • bill_date:账单日期,具体格式和可查询范围以当前接口文档为准。
  • 服务商应用调用接口所需的公共参数及签名信息,例如 app_id、method、charset、sign_type、timestamp、version、sign。
  • 采用商家授权模式代商家调用时,还要传入该商家的 app_auth_token。

所以,smid 不能替代账单类型、账单日期或授权凭证。

为什么不能只传 smid

接口需要确认以下信息:

  1. 要查询哪个商家或二级商户的账单;
  2. 要查询哪种类型的账单;
  3. 要查询哪一天或哪一期的账单。

smid 只能确定第一个信息。如果缺少 bill_type 或 bill_date,接口就无法判断需要生成哪份账单的下载地址。

smid 和 app_auth_token 的用途也不同:

  • smid 是二级商户标识;
  • app_auth_token 表示商家已授权服务商应用。

是否需要同时使用两者,要看服务商接入的产品模式、商户签约关系,以及该接口当前的代调用规则。两者不能相互替代。

推荐调用步骤

1. 确认调用身份

先确认具体的查询场景:

  • 服务商应用查询自身账单;
  • 服务商通过商家授权查询商家账单;
  • 服务商查询其名下二级商户的账单。

如果通过商家授权代调用,应使用目标商家对应的 app_auth_token,不要误用其他商家的授权令牌。

2. 准备业务参数

业务参数至少要包含账单类型和账单日期。如果需要定位二级商户,再按照接口文档加入 smid。

示意结构如下:

{
  "bill_type": "trade",
  "bill_date": "2026-09-12",
  "smid": "目标二级商户的smid"
}

bill_type 的可选值、bill_date 的格式,以及 smid 是否受支持或必须填写,都应以当前支付宝开放平台接口文档和实际签约产品为准。

3. 设置商家授权令牌

服务商以商家授权身份调用时,可以在支付宝 SDK 请求中设置:

AlipayClient alipayClient = new DefaultAlipayClient(
    gatewayUrl,
    appId,
    privateKey,
    "json",
    "UTF-8",
    alipayPublicKey,
    "RSA2"
);

AlipayDataDataserviceBillDownloadurlQueryRequest request =
    new AlipayDataDataserviceBillDownloadurlQueryRequest();

request.setBizContent("""
{
  "bill_type": "trade",
  "bill_date": "2026-09-12",
  "smid": "目标二级商户的smid"
}
""");

// 仅在服务商代已授权商家调用时设置
request.putOtherTextParam("app_auth_token", "商家的app_auth_token");

AlipayDataDataserviceBillDownloadurlQueryResponse response =
    alipayClient.execute(request);

不同版本的 SDK 可能采用不同方式设置 app_auth_token,请以所用 SDK 的请求类定义为准。

4. 检查返回结果

调用完成后,除了 HTTP 状态,还要检查业务响应:

if (response.isSuccess()) {
    String downloadUrl = response.getBillDownloadUrl();
    // 及时下载并妥善保存账单
} else {
    System.out.println(response.getCode());
    System.out.println(response.getSubCode());
    System.out.println(response.getSubMsg());
}

注意事项

  • smid 必须在当前服务商的可查询范围内。即使参数格式正确,也可能因为商户关系或权限校验而失败。
  • app_auth_token 必须属于目标商家,且授权范围要覆盖该接口。
  • 账单通常不会实时生成,查询当天账单时可能尚未出账。
  • 下载地址一般有有效期,获取后应及时下载,不要长期保存后反复使用。
  • 不同账单类型支持的日期格式、查询周期和历史范围可能不同。
  • 如果提示“参数缺失”,应重点检查 bill_type、bill_date 和公共请求参数。如果提示“无权限”或“商户关系不存在”,应重点检查 app_auth_token、smid、应用权限和签约关系。
  • 支付宝开放平台可能调整字段和代调用规则。正式接入前,请以当前 alipay.data.dataservice.bill.downloadurl.query 接口文档、应用授权模式及对应产品的签约说明为准。

备注:内容仅供参考。