bill_type=trade 返回 isp.bill_not_exist 如何解决?
结论
bill_type = trade 返回 isp.bill_not_exist,通常说明按当前条件查询不到可下载的交易账单,不一定是接口权限或签名配置有误。
bill_type = signcustomer 能正常返回,只能证明签约客户账单存在,而且接口调用链路正常。trade 和 signcustomer 是两种不同的账单,其生成条件和数据范围也不同,因此不能据此判断交易账单一定存在。
常见原因
1. 查询日期内没有可入账的交易
trade 查询的是交易账单。如果指定日期内没有归属于当前商户、应用或授权主体的支付宝交易,平台可能不会生成当天的交易账单,并返回:
{
"code": "40004",
"msg": "Business Failed",
"sub_code": "isp.bill_not_exist",
"sub_msg": "账单不存在"
}
有业务订单不代表一定有支付宝交易账单。订单可能尚未支付、已经关闭,也可能由其他主体实际收款。
2. 账单尚未生成
交易账单并非实时生成。查询当天或时间较近的账单时,账单可能还没有完成汇总,因此接口会返回不存在。
具体生成时间以接口文档和支付宝后台的实际可下载时间为准。排查时,可以先查询一个更早且确认发生过成功交易的日期。
3. bill_date 格式或账期不符合要求
检查 bill_date 是否符合接口要求,例如:
2026-09-08
如果查询月账单,还需要确认当前接口和账单类型是否支持月账期,以及对应格式是否为:
2026-08
除了字符串格式,还要确认该日期处于接口允许查询的时间范围内。
4. 查询主体与实际收款主体不一致
需要逐项核对以下主体:
- 发起请求的
app_id - 应用签约主体
- 实际收款的支付宝商户
- 服务商代商户调用时的被授权商户
app_auth_token对应的授权主体
如果交易发生在商户 A 名下,却使用商户 B 的授权信息查询,即使日期正确,也可能返回账单不存在。
在服务商模式下,还要检查是否遗漏了 app_auth_token,或错用了、缓存了其他商户的 app_auth_token。
5. 交易不在当前接口的查询范围内
部分交易可能来自其他应用、其他商户主体或不同的资金产品。可以结合支付宝商家后台的交易记录确认:
- 交易是否确实归属于当前商户;
- 交易时间是否在所查询的账期内;
- 交易是否已经进入账单;
- 后台能否下载同一日期的交易账单。
建议的排查顺序
第一步:在商家后台确认账单是否存在
使用与接口查询主体相同的商户账号登录支付宝商家后台,确认目标日期是否有交易,以及是否有可下载的交易账单。
可以按以下情况判断:
- 后台也没有账单:优先检查当天是否有交易、账单是否已经生成,以及查询主体是否正确。
- 后台有账单,但接口返回不存在:重点检查
app_id、授权主体、app_auth_token、bill_date和请求环境。 - 后台交易属于其他商户:改用实际收款主体对应的应用或授权令牌查询。
第二步:选择确认有交易的历史日期测试
先不要查询当天。选择一个已经在后台看到成功交易,且账单已经生成的历史日期进行测试:
bill_type = trade
bill_date = 已确认存在交易账单的日期
如果历史日期能够正常查询,通常说明接口配置没有问题。原日期可能没有账单,或者账单尚未生成。
第三步:核对请求参数
可以按以下形式检查业务参数:
{
"bill_type": "trade",
"bill_date": "2026-09-08"
}
Java SDK 调用示例:
AlipayDataDataserviceBillDownloadurlQueryRequest request =
new AlipayDataDataserviceBillDownloadurlQueryRequest();
request.setBizContent("""
{
"bill_type": "trade",
"bill_date": "2026-09-08"
}
""");
AlipayDataDataserviceBillDownloadurlQueryResponse response =
alipayClient.execute(request);
System.out.println(response.getBody());
如果是服务商代商户调用,应使用该商户有效的授权令牌。具体使用哪个 SDK 重载方法,以当前 SDK 版本为准,例如:
AlipayDataDataserviceBillDownloadurlQueryResponse response =
alipayClient.execute(request, null, appAuthToken);
排查日志至少应记录:
app_id
bill_type
bill_date
app_auth_token 对应的授权商户(令牌本身应脱敏)
请求时间
支付宝返回的 code、sub_code、sub_msg
支付宝响应中的 request_id、trace_id 等链路标识(如果存在)
不要在日志或工单中提交应用私钥、支付宝公钥、完整访问令牌等敏感信息。
第四步:比较成功和失败请求
既然 signcustomer 可以成功,可以把两次请求放在一起比较,但不能只看 bill_type,还要确认:
app_id是否相同;bill_date是否相同;- 是否使用了同一个授权商户;
- 是否使用同一套生产环境配置;
app_auth_token是否相同且未过期;- 成功交易是否属于该授权商户。
提交工单时如何选择分类
支付宝工单入口和分类名称可能会调整,请选择最接近以下路径的分类:
开放平台 / API 接口问题
→ 资金或账务
→ 对账单 / 账单下载
→ 查询对账单下载地址
如果找不到“对账单”或“账单下载”分类,可以选择:
开放平台接口调用
→ 业务报错
→ 其他接口问题
问题标题可以直接写明:
alipay.data.dataservice.bill.downloadurl.query 查询 trade 账单返回 isp.bill_not_exist
不建议提交到签名、验签或网络异常分类。当前收到的是支付宝业务层返回的 40004 / isp.bill_not_exist,说明请求已经到达接口并得到处理。
工单需要提供的信息
建议一次提供以下信息,避免后续反复补充材料:
-
接口名称:
alipay.data.dataservice.bill.downloadurl.query -
调用环境:
生产环境或沙箱环境 -
精确到秒的调用时间,并注明时区。
-
app_id。 -
bill_type和bill_date:{ "bill_type": "trade", "bill_date": "2026-09-08" } -
完整响应内容:
{ "alipay_data_dataservice_bill_downloadurl_query_response": { "msg": "Business Failed", "code": "40004", "sub_msg": "账单不存在", "sub_code": "isp.bill_not_exist" } } -
响应中的
request_id、trace_id或其他链路编号,如果实际响应中存在。 -
商户支付宝账号或商户 PID。账号可以按工单要求脱敏,但提供的信息应足以让技术支持定位到对应主体。
-
是否由服务商代为调用。如果是,请提供被授权商户 PID、授权关系和脱敏后的授权令牌标识。
-
能够证明目标日期存在交易的支付宝交易号,例如:
trade_no out_trade_no 交易完成时间 收款商户 -
商家后台能否看到并下载同一日期的交易账单,最好附上相关截图。
-
一组成功的对照请求,例如同一主体下
signcustomer的成功结果。下载地址、令牌等敏感字段需要脱敏。
注意事项
signcustomer查询成功不代表trade账单存在,两种账单需要分别判断。- 不要反复查询当天账单,先用确认有交易的历史日期验证。
- 交易号必须属于当前查询的商户或授权商户。
- 提交工单前,确认请求来自生产环境还是沙箱环境。两个环境的数据不互通。
- 工单中不要提供应用私钥、完整
app_auth_token、AES 密钥等敏感凭证。 - 如果后台也没有目标日期的交易账单,先确认交易归属和账单生成情况。如果后台可以下载,但接口持续返回
isp.bill_not_exist,再携带请求链路信息提交工单定位。
备注:内容仅供参考。
