From 585b0ab63ff3771e69d1f8febb71809320a6216c Mon Sep 17 00:00:00 2001 From: jinyu Date: Wed, 21 Dec 2016 00:26:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=AF=B9=E8=B4=A6=E5=8D=95?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8E=8B=E7=BC=A9=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/foxinmy/weixin4j/api/PayApi.java | 61 ++++++++++++------- .../com/foxinmy/weixin4j/http/MimeType.java | 2 + .../weixin4j/payment/WeixinPayProxy.java | 7 ++- 3 files changed, 45 insertions(+), 25 deletions(-) diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/PayApi.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/PayApi.java index 8583da5f..db860ac0 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/PayApi.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/PayApi.java @@ -37,12 +37,14 @@ import com.foxinmy.weixin4j.type.CurrencyType; import com.foxinmy.weixin4j.type.IdQuery; import com.foxinmy.weixin4j.type.IdType; import com.foxinmy.weixin4j.type.SignType; +import com.foxinmy.weixin4j.type.TarType; import com.foxinmy.weixin4j.type.TradeType; import com.foxinmy.weixin4j.type.mch.BillType; import com.foxinmy.weixin4j.type.mch.RefundAccountType; import com.foxinmy.weixin4j.util.Consts; import com.foxinmy.weixin4j.util.DateUtil; import com.foxinmy.weixin4j.util.DigestUtil; +import com.foxinmy.weixin4j.util.IOUtil; import com.foxinmy.weixin4j.util.MapUtil; import com.foxinmy.weixin4j.util.RandomUtil; import com.foxinmy.weixin4j.util.StringUtil; @@ -604,6 +606,8 @@ public class PayApi extends MchApi { * REFUND,返回当日退款订单 * @param outputStream * 输出流 + * @param tarType + * 非必传参数,固定值:GZIP,返回格式为.gzip的压缩包账单。不传则默认为数据流形式。 * @since V3 * @see @@ -611,7 +615,7 @@ public class PayApi extends MchApi { * @throws WeixinException */ public void downloadBill(Date billDate, BillType billType, - OutputStream outputStream) throws WeixinException { + OutputStream outputStream, TarType tarType) throws WeixinException { if (billDate == null) { Calendar now = Calendar.getInstance(); now.add(Calendar.DAY_OF_MONTH, -1); @@ -624,36 +628,47 @@ public class PayApi extends MchApi { Map map = createBaseRequestMap(null); map.put("bill_date", formatBillDate); map.put("bill_type", billType.name()); + if (tarType != null) { + map.put("tar_type", tarType.name()); + } map.put("sign", weixinSignature.sign(map)); String param = XmlStream.map2xml(map); WeixinResponse response = weixinExecutor.post( getRequestUri("downloadbill_uri"), param); - BufferedReader reader = null; - BufferedWriter writer = null; - try { - writer = new BufferedWriter(new OutputStreamWriter(outputStream, - Consts.UTF_8)); - reader = new BufferedReader(new InputStreamReader( - response.getBody(), Consts.UTF_8)); - String line = null; - while ((line = reader.readLine()) != null) { - writer.write(line); - writer.newLine(); - } - } catch (IOException e) { - throw new WeixinException(e); - } finally { + if (TarType.GZIP == tarType) { try { - if (reader != null) { - reader.close(); - } - if (writer != null) { - writer.close(); - } - } catch (IOException ignore) { + IOUtil.copy(response.getBody(), outputStream); + } catch (IOException e) { ; } + } else { + BufferedReader reader = null; + BufferedWriter writer = null; + try { + writer = new BufferedWriter(new OutputStreamWriter( + outputStream, Consts.UTF_8)); + reader = new BufferedReader(new InputStreamReader( + response.getBody(), Consts.UTF_8)); + String line = null; + while ((line = reader.readLine()) != null) { + writer.write(line); + writer.newLine(); + } + } catch (IOException e) { + throw new WeixinException(e); + } finally { + try { + if (reader != null) { + reader.close(); + } + if (writer != null) { + writer.close(); + } + } catch (IOException ignore) { + ; + } + } } } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/MimeType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/MimeType.java index 9daa54a9..be0f89cb 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/MimeType.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/MimeType.java @@ -58,6 +58,8 @@ public class MimeType implements Serializable { STREAM_MIMETYPES.add(valueOf("image/*")); STREAM_MIMETYPES.add(valueOf("audio/*")); STREAM_MIMETYPES.add(valueOf("video/*")); + STREAM_MIMETYPES.add(valueOf("application/zip")); + STREAM_MIMETYPES.add(valueOf("application/x-gzip")); } public MimeType(String type) { diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java index 8fd882d2..596a6369 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java @@ -39,6 +39,7 @@ import com.foxinmy.weixin4j.sign.WeixinSignature; import com.foxinmy.weixin4j.type.CurrencyType; import com.foxinmy.weixin4j.type.CustomsCity; import com.foxinmy.weixin4j.type.IdQuery; +import com.foxinmy.weixin4j.type.TarType; import com.foxinmy.weixin4j.type.mch.BillType; import com.foxinmy.weixin4j.type.mch.RefundAccountType; import com.foxinmy.weixin4j.util.Weixin4jConfigUtil; @@ -511,6 +512,8 @@ public class WeixinPayProxy { * 下载对账单的类型 ALL,返回当日所有订单信息, 默认值 SUCCESS,返回当日成功支付的订单 * REFUND,返回当日退款订单 * @para outputStream 输出流 + * @param tarType + * 非必传参数,固定值:GZIP,返回格式为.gzip的压缩包账单。不传则默认为数据流形式。 * @since V2 & V3 * @see com.foxinmy.weixin4j.api.PayApi * @see