easy版:
LocalDate yesterday = LocalDate.now().minusDays(1);LocalDate selectDay = LocalDate.of(2025,9,15);String Mon = "2025-08";String billDate = yesterday.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));//获取支付宝账单String alipayBillDownloadUrl = getAlipayBillDownloadUrl(billDate);
/*** 调用支付宝接口获取对账单下载地址* @param billDate 账单日期 (格式 yyyy-MM-dd)* @return 下载地址URL*/private static String getAlipayBillDownloadUrl(String billDate) {// 1. 构造配置(可直接写死,排查配置问题)Config config = new Config();config.protocol = "https";config.gatewayHost = "openapi-sandbox.dl.alipaydev.com"; // 沙箱环境config.signType = "RSA2";config.appId = "XXXXX";config.merchantPrivateKey = "XXXXX";config.alipayPublicKey = "XXXXX";config.notifyUrl = "";config.encryptKey = "";// 2. 设置全局配置 Factory.setOptions(config);try {AlipayDataDataserviceBillDownloadurlQueryResponse response = Factory.Payment.Common().downloadBill("trade", billDate);if ("10000".equals(response.code)) {System.out.println("调用成功");System.out.println("账单下载地址:" + response.getBillDownloadUrl());System.out.println(response.httpBody); // downloadAndParseBill(response.getBillDownloadUrl());} else {System.out.println("调用失败");}return response.getBillDownloadUrl();} catch (Exception e) {System.out.println(e.getMessage());return null;}}
V3版本:
ApiClient defaultClient = Configuration.getDefaultApiClient();// 初始化alipay参数(全局设置一次) defaultClient.setAlipayConfig(getAlipayConfig());AlipayDataDataserviceBillDownloadurlApi api = new AlipayDataDataserviceBillDownloadurlApi();String billType = "trade";String billDate = "2025-09-20";String smid = "XXXXX";try {AlipayDataDataserviceBillDownloadurlQueryResponseModel response = api.query(billType, billDate, smid);System.out.println("new:"+ response.getBillDownloadUrl());} catch (ApiException e) {throw new RuntimeException(e);}
V3版对应的配置:
/*** 支付宝支付配置* @return*/private static AlipayConfig getAlipayConfig() {AlipayConfig alipayConfig = new AlipayConfig();alipayConfig.setServerUrl("https://openapi-sandbox.dl.alipaydev.com"); //沙箱环境alipayConfig.setAppId("XXXXX");alipayConfig.setPrivateKey("XXXXX");alipayConfig.setAlipayPublicKey("XXXXX");return alipayConfig;}
最后我有个疑问,我没用过正式的环境,这个沙箱环境不知道是不是不会有数据下载,我返回的响应是成功的代码,但我点返回的下载链接会直接跳ERROR的页面,30秒后再点也会弹过期的页面。
有懂的欢迎讨论下。
https://opendocs.alipay.com/support/01raze