Javen205 / IJPay

IJPay 让支付触手可及,封装了微信支付、QQ支付、支付宝支付、京东支付、银联支付、PayPal 支付等常用的支付方式以及各种常用的接口。不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。右上角点下小星星✨
http://javen205.gitee.io/ijpay
Apache License 2.0
5.42k stars 1.34k forks source link

微信支付 WxPayApi.v3 IJPayHttpResponse 处理 gzip 数据报错 "Not in GZIP format" #73

Closed etalcmyb369 closed 1 year ago

etalcmyb369 commented 1 year ago

开发微信支付下载账单功能,想解压 gzip 数据出现异常,求做过的大佬指导下。

String params = UriComponentsBuilder.fromHttpUrl(downloadUrl).build().getQuery();
String urlSuffix = WxApiType.BILL_DOWNLOAD.toString().concat("?").concat(params);

IJPayHttpResponse response = WxPayApi.v3(
        method,
        WxDomain.CHINA.toString(),
        urlSuffix,
        mch.getMchId(),
        mch.getMerchantCert().getSerialNo(),
        mch.getPlatFormCert().getSerialNo(),
        privateKey,
        body
);

byte[] bytes = response.getBody().getBytes(StandardCharsets.UTF_8);
try {
    GZIPInputStream gzipInputStream = new GZIPInputStream(new ByteArrayInputStream(bytes));
} catch (IOException e) {
    throw new RuntimeException(e);
}
etalcmyb369 commented 1 year ago

查到原因了 IJPayHttpResponse 返回的 body 字符串是已经从 byte[] 通过 new String() 转换过了 再使用 IJPayHttpResponse.getBody().getBytes(StandardCharsets.UTF_8) 转换的 byte[] 与原始的 gzip byte[] 不一致