沙箱环境下调用alipay.data.dataservice.bill.downloadurl.query (查询对账单下载地址)接口JAVA版本小样

来自    沙箱环境 | 
作者:颠覆白的黑  |  更新于:2017-06-14 17:00:10     
最近碰到商户使用沙箱下载对账单报错的,这里写一个使用接口和本地下载的简单demo
这是官方文档,先看一下:https://docs.open.alipay.com/api_15/alipay.data.dataservice.bill.downloadurl.query

我这里稍作整理,直接上代码,这个是直接使用代码下载自动下载到本地某文件夹下的
public class Test {
        //初始化实例请求对象
        public static String APP_ID = "2016091300501441";   
        public static String APP_PRIVATE_KEY = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCbIE5coYixmwd8Kq8cZ/veQbdVba8cQF0ac9XcekJvAW1qoxO86EHzYCaTSHpZeILub5N3IKclm1qP29ELqb/9TeHzDBAsCHBgW2Jp8YEuAK5jvG+fheakp2uJ+L8yxptdu2WdJKc02U9EtA0N81T4Gy4JtMaa0NMvu+1tYy8QhpNA7GlBmxf2v6zws6LEyv/8jWpXOw+NI38Wt8cObdSfbdNXi8gsXkKb3yb5rYrAInUagHE+suN8oycYAi+VPaL3DeHJb81cSUcAQP38/9DDENDF3duOp8DyBo4Qp/nhFClOZOZoBhYnqeKaFEZ2qeKoVr1M/DEe3evpYp8RfaAxAgMBAAECggEBAJG3CgTXM6jpoGFRUwYS4zOGdWlIy7l0+D/V2WjuayMMqzQFFZBYd0Le6b1l0o/itNK2ekXnpTqdMLd7W2ViQdb15q3AghxqnOzWSp6L3bVRrH5BTnUBeYLnRQvoXembR+wHEM9I08u/6Ub2/mBBV2prVZaGehyI1ie7lq4vAdG5rdgHr+QrAcv9+rvMIjwMRR83a7FawXG1Ivp1dpCZhhYZF9oMuDE1O15xOhCImFd/xusa/hppFxcwnAOjKwWqIjYbEfj58W/zTjmchBY8SveckrlMgp5eEo0VeC1Bz3bItYTIIG16AnSvUw2dwuZ151hGY+9nIyfjnJToz1BGTgECgYEA5Vo3pb5Gj4W4h1b7hPJAJBIRv2f7LsIKojjJjj6XUJc1Ph8eY5rfuBFMIrdfO+ajND5eGbGip0ZrxGv1Xiv1ExMM29OVUb57jicb5EfxcKns03NzAuvy3bT+PMIfQr0qa8CQSloD7d2Jt+cLGwrBMcK2v28/Sd2986x4lpl8f2ECgYEArSZUHvzVQB4GkNpIxeyH4pFG/y+t2ZBhlEYpM5WbPwx4YeiLdScTvaNLQG7j7SZjBy2bfoOn+MbZc/IC84yEf6vs/uhLAnFopTh2Yy4lMB0q+5JenuMm2/9zE7zM3q02d51eOJXp+NJiGs0/WjhYOwDfVj0jIPyGARfk0DIm4tECgYEArFc0hYkLQIG8/YXxDh9y7yfcyjV6W9JXZzrAyfBih5531axQi4wvHANzcIrWNw7CCFntH+WJUaTrCfgNsqvZRnIEMZM2GuzFrzXYEZu143Dskp+oBsQCBXMhr8o271Fx9PIH+rbVSQI1oEku4S0dqySjagpQRlMnj1lEa/X9xUECgYBFvnCX4sOLBg0i/6ncf3/klRwB4hSm0+9aKECkVJip9r3uwhqaX9klw8al94S7m4C7/XTqquFX5dDlURA7RdiBDKFzs+Gy5DeAhZO6M3YrQTR1DOosGdcnOmgCBUSIVUDhQXQYWtpZrXRy00W3c4amjZ1oQUwLF2xquFMkQW9EYQKBgQCruV08yf2v61WaEBcV2g7E5bqz5Enrvdzc/9mp9CZQFRfoh//G05Lh4mER7FhOsDZsFwFaTpXBkES6QbHYFD6vfqcboLMYxC7sCewHFCx1nSVZnqvKJ3+DvtpXNUUujf6zCDsSS9OPVwjNcCgIOcUFQT2WM6Asjfzus4yCQ9xVJg==";
        public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvdGfp41Nc/HrcvcVgGJDPZg8zrOTMRb6JgUjWblKTYpuwmgbbYZaEm+czS4YKbQOK5p/k0ZUGW78jX5zfRzBHCjSCKSxbKw2RpmwcHbx6rZKStMB3Ke3MDPx/p8kayKDVKXfYH4b9ZwdMRPLrxbEiH727k4DO6K5LR6++X6nYRDPeO007uMcBJ+Lfof2s1o0Kfi5O0Mt9Z1IwoKJTFyh6OMtmhJwWrR6W1hRToMGusv1PP9rc7jUHBgPZ1zLEY1paDwEL0xXSzscN/G0Zgl7bAclW2KP5IdpavuWGes64zI7T5HU4WwpCAJMD2VsFEQUwU/qifrW0mtNT6pVq7dPTQIDAQAB";
        public static AlipayClient alipayClient = new DefaultAlipayClien("https://openapi.alipaydev.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", "GBK",ALIPAY_PUBLIC_KEY,"RSA2");
 
public static void main(String[] args) {
               bill_download_url ();//下载对账单接口
        }
 
public static void  bill_download_url (){
                 
         AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest();
                 request.setBizContent("{" +
                 "    \"bill_type\":\"trade\"," +
                 "    \"bill_date\":\"2017-06-13\"" +
                 "  }");
                 AlipayDataDataserviceBillDownloadurlQueryResponse response = null;
                try {
                        response = alipayClient.execute(request);
                        System.out.println(response.getBillDownloadUrl());  
                         
                } catch (AlipayApiException e) {
                        e.printStackTrace();
                }
          if(response.isSuccess()){
          //将接口返回的对账单下载地址传入urlStr  
         String urlStr=response.getBillDownloadUrl(); 
         //指定希望保存的文件路径
          String filePath = "/Users/fund_bill_20170614.csv.zip";
          URL url = null;
          HttpURLConnection httpUrlConnection = null;
          InputStream fis = null;
          FileOutputStream fos = null;
          try {
              url = new URL(urlStr);
              httpUrlConnection = (HttpURLConnection) url.openConnection();
              httpUrlConnection.setConnectTimeout(5 * 1000);
              httpUrlConnection.setDoInput(true);
              httpUrlConnection.setDoOutput(true);
              httpUrlConnection.setUseCaches(false);
              httpUrlConnection.setRequestMethod("GET");
              httpUrlConnection.setRequestProperty("CHARSET", "UTF-8");
              httpUrlConnection.connect();
              fis = httpUrlConnection.getInputStream();
              byte[] temp = new byte[1024];
              int b;
              fos = new FileOutputStream(new File(filePath));
              while ((b = fis.read(temp)) != -1) {
                  fos.write(temp, 0, b);
                  fos.flush();
              }
          } catch (MalformedURLException e) {
              e.printStackTrace();
          } catch (IOException e) {
              e.printStackTrace();
          } finally {
              try {
                  if(fis!=null) fis.close();
                  if(fos!=null) fos.close();
                  if(httpUrlConnection!=null) httpUrlConnection.disconnect();
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
              }
        }
}


注意点:
1.自定义保存到的文件后缀名为.csv.zip,不要搞错了,目前文档中的那个示例有误是.csv


2.以上代码可以拿去直接运行测试,可能发帖后有些字段会隐藏 ,初始化信息字段换成自己沙箱账号内的信息即可
app_id会被隐藏,这里是app_id:2-0-1-6-0-9-1-3-0-0-5-0-1-4-4-1,要是你们测试可以去除这个符号  -  即可


3.沙箱查询对账单下载地址,仅测试该接口在沙箱环境中是否可以成功下载对账单,下载的CSV对账单仅为账单模板(数据为空),实际数据请使用生产环境

仙武大圣 | 2017-06-18 18:05:33
还不错 点赞
Young | 2017-07-11 10:21:48
code":"20000","msg":"Service Currently Unavailable","sub_code":"aop.unknow-error","sub_msg":"系统繁忙  返回这些错误什么问题呢
颠覆白的黑 | 2017-07-11 12:01:39
Young:code":"20000","msg":"Service Currently Unavailable","sub_code":"aop.unknow-error","sub_msg":"系统繁忙  返回这些错误什么问题呢回到原帖
用我这个例子调试一下,
还有报错提供报错截图以及完整的请求参数过来
Young | 2017-07-11 14:19:12
颠覆白的黑:用我这个例子调试一下,
还有报错提供报错截图以及完整的请求参数过来
回到原帖
现在竟然好了 晕哦   下载下来的文件是不是解压 会报错呢   还有 签名必须是rsa2吗 那如果用RSA我该怎么使用这个接口呢
颠覆白的黑 | 2017-07-11 14:37:36
Young:现在竟然好了 晕哦   下载下来的文件是不是解压 会报错呢   还有 签名必须是rsa2吗 那如果用RSA我该怎么使用这个接口呢回到原帖
推荐使用RSA2的但不是必须使用,RSA2的更安全一些,
如果使用rsa的,在初始化参数时填写rsa,并将其你参数配置中的公私钥和支付宝公钥换成对应的rsa的即可
rsa密钥生成以及配置:https://docs.open.alipay.com/291/106097
Young | 2017-07-11 14:53:46
颠覆白的黑:推荐使用RSA2的但不是必须使用,RSA2的更安全一些,
如果使用rsa的,在初始化参数时填写rsa,并将其你参数配置中的公私钥和支付宝公钥换成对应的rsa的即可
rsa密钥生成以及配置:https://docs.open.alipay.c...
回到原帖
你好 我公私钥 都是RSA配置 然后 参数是这样的正是商户
public static AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", "GBK",
                    ALIPAY_PUBLIC_KEY,"RSA");

运行时候报错呢    com.alipay.api.AlipayApiException: RSA私钥格式不正确,请检查是否正确配置了PKCS8格式的私钥
颠覆白的黑 | 2017-07-11 15:21:53
Young:你好 我公私钥 都是RSA配置 然后 参数是这样的正是商户
public static AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay...
回到原帖
检查你自己这个参数APP_PRIVATE_KEY的配置是否是java版本所需要填写的pkcs8格式的私钥
java语言开发,rsa格式使用我上一楼提供的密钥生成工具使用pkcs8+1024位的格式生成对应的公私钥然后将私钥配置在项目中,公钥配置在开放平台对应的地方
Young | 2017-07-11 16:16:52
颠覆白的黑:检查你自己这个参数APP_PRIVATE_KEY的配置是否是java版本所需要填写的pkcs8格式的私钥
java语言开发,rsa格式使用我上一楼提供的密钥生成工具使用pkcs8+1024位的格式生成对应的公私钥然后将私钥配置在项目中,公钥...
回到原帖
at com.alipay.api.internal.util.AlipaySignature.rsa256Sign(AlipaySignature.java:141)
at com.alipay.api.internal.util.AlipaySignature.rsaSign(AlipaySignature.java:102)
at com.alipay.api.DefaultAlipayClient.getRequestHolderWithSign(DefaultAlipayClient.java:316)


用RSA2竟然也会报错 是不是要需要私钥 Java版本的格式 同时还要在开放平台重新配置对应的公钥吗  感觉这样好麻烦  如果服务端是.NET开发的 支付接口 那么对账端 是用Java开发的账单接口 那开放平台咋配置呢 岂不是无法解决了吗
颠覆白的黑 | 2017-07-11 17:32:02
Young:at com.alipay.api.internal.util.AlipaySignature.rsa256Sign(AlipaySignature.java:141)
at com.alipay.api.internal.util.Al...
回到原帖
你要是java版本在调试这个接口就使用私钥为pkcs8格式的,按照我楼上的方法生成并配置

还有你说的这个场景,私钥是可以使用密钥生成工具进行转的,这样对应的应用公钥就都是一个,你上传这个应用公钥后,在不同的开发环境语言中配置其不同的应用私钥即可
Young | 2017-07-12 08:58:34
颠覆白的黑:你要是java版本在调试这个接口就使用私钥为pkcs8格式的,按照我楼上的方法生成并配置

还有你说的这个场景,私钥是可以使用密钥生成工具进行转的,这样对应的应用公钥就都是一个,你上传这个应用公钥后,在不同的开发环境语言中配置其不同的应用私...
回到原帖
按照你的方式 我把。net的私钥转换为Java的私钥格式后 重新调试成功了 谢谢啊
颠覆白的黑 | 2017-07-12 10:43:45
Young:按照你的方式 我把。net的私钥转换为Java的私钥格式后 重新调试成功了 谢谢啊回到原帖
搞好了就好
Young | 2017-07-25 10:56:39
颠覆白的黑:搞好了就好回到原帖
你好 为什么对账单下载的文件只有业务明细账单两个文件 而没有账务账单明细这样导致我无法对账
f1 | 2017-07-31 17:28:48
必须用GBK吗,我调用返回40004, 入参不合法,这个什么原因?
廉大叔 | 2017-08-24 16:54:37
String urlStr = alipay_response.getBillDownloadUrl();
 
 String filePath = "E:/fund_bill_20170614.csv.zip";
           URL url = null;
           HttpURLConnection httpUrlConnection = null;
           InputStream fis = null;
           FileOutputStream fos = null;
           try {
               url = new URL(urlStr);
               httpUrlConnection = (HttpURLConnection) url.openConnection();
               httpUrlConnection.setConnectTimeout(5 * 1000);
               httpUrlConnection.setDoInput(true);
               httpUrlConnection.setDoOutput(true);
               httpUrlConnection.setUseCaches(false);
               httpUrlConnection.setRequestMethod("GET");
               httpUrlConnection.setRequestProperty("CHARSET", "UTF-8");
               httpUrlConnection.connect();
               fis = httpUrlConnection.getInputStream();
               byte[] temp = new byte[1024];
               int b;
               fos = new FileOutputStream(new File(filePath));
               while ((b = fis.read(temp)) != -1) {
                   fos.write(temp, 0, b);
                   fos.flush();
               }
           } catch (MalformedURLException e) {
               e.printStackTrace();
           } catch (IOException e) {
               e.printStackTrace();
           } finally {
               try {
                   if(fis!=null) fis.close();
                   if(fos!=null) fos.close();
                   if(httpUrlConnection!=null) httpUrlConnection.disconnect();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
我的回复
回复数
  29
阅读数
  6084

返回顶部