众所周知,腾讯的文档是给内部人员看的,官方Demo不够完全,以致新手入门困难,这里通过调用第三方封装接口,将部分流程进行简化

第三方封装官网:https://javen205.gitee.io/ijpay/
微信官方文档:https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_8.shtml

此项目的GitHub地址: https://github.com/qingyiyezhou/WechatPayDemo/tree/master

一、Maven引入


<dependency><groupId>com.github.javen205</groupId><artifactId>IJPay-All</artifactId><version>2.7.4</version>
</dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.25</version>
</dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version>
</dependency>

功能:下载交易账单

1.申请交易账单核心方法

    /*** 申请交易账单** @param billDate 账单日期(仅支持三个月内的账单下载申请)* @return 交易账单返参*/public WechatTradeBillDownloadResp tradeBill(String billDate) {try {if (CharSequenceUtil.isEmpty(billDate)) {Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());calendar.add(Calendar.DATE, -1);billDate = DateUtil.format(calendar.getTime(), "YYYY-MM-dd");}Map<String, String> params = new HashMap<>(12);params.put("bill_date", billDate);params.put("bill_type", "ALL");// 返回格式为.gzip的压缩包账单,不设置默认为数据流//params.put("tar_type", "GZIP");IJPayHttpResponse result = WxPayApi.v3(RequestMethod.GET,WxDomain.CHINA.getType(),WxApiType.TRADE_BILL.toString(),wechatConfig.getMchId(),wechatConfig.getSerialNo(),null,getPrivateKey(),params);// 根据证书序列号查询对应的证书来验证签名结果checkedSignature(result);if (result.getStatus() != 200) {throw new RuntimeException("申请交易账单失败," + result.getBody());}return JSON.parseObject(result.getBody(), WechatTradeBillDownloadResp.class);} catch (Exception e) {e.printStackTrace();}return null;}

2.下载交易账单核心方法

 /*** 下载交易账单** @param token token* @return 交易账单数据*/public HttpResponse billDownload(String token) throws Exception {long timestamp = System.currentTimeMillis() / 1000;String authType = "WECHATPAY2-SHA256-RSA2048";// 生成随机字符串String nonceStr = WxPayKit.generateStr();String urlSuffix = WxApiType.BILL_DOWNLOAD.toString().concat("?").concat("token=" + token);// 拼接urlString url = WxDomain.CHINA.getType() + urlSuffix;// 构建签名String authorization = WxPayKit.buildAuthorization(RequestMethod.GET, urlSuffix,wechatConfig.getMchId(), wechatConfig.getSerialNo(),getPrivateKey(), "", nonceStr, timestamp, authType);Map<String, String> headers = WxPayApi.getHeaders(authorization, wechatConfig.getSerialNo());return HttpRequest.get(url).addHeaders(headers).execute();}

3.Service调用

public TradeBillDataResp downloadTradeBill(String date) {WechatPayV3 wechatPayV3 = new WechatPayV3(wechatConfig);// 申请交易账单WechatTradeBillDownloadResp wechatTradeBillDownloadResp = wechatPayV3.tradeBill(date);// 解析交易账单下载地址,获取tokenString downloadUrl = wechatTradeBillDownloadResp.getDownloadUrl();UrlBuilder urlBuilder = UrlBuilder.ofHttp(downloadUrl, CharsetUtil.CHARSET_UTF_8);String token = urlBuilder.getQuery().get("token").toString();try (// 获取交易账单数据流HttpResponse httpResponse = wechatPayV3.billDownload(token);) {if (httpResponse.getStatus() != 200){return null;}// 异步备份交易账单文件(建议使用线程池,此处简略操作)new Thread(() -> {File folder = new File(WECHAT_TEMP_PATH);if (!folder.exists() && !folder.isDirectory()) {boolean mkdirs = folder.mkdirs();Assert.isTrue(mkdirs, "创建微信交易账单文件夹失败");}// 文件名String targetPath = WECHAT_TEMP_PATH.concat(wechatConfig.getMchId()).concat("All").concat(date).concat(".csv");IOUtil.backUpFile(httpResponse.bodyStream(), targetPath);});// 解析数据流return parseBody(httpResponse.body());} catch (Exception e) {throw new RuntimeException(e);}}
  @GetMapping("/downloadTradeBill")TradeBillDataResp downloadTradeBill(@RequestParam String date) {return wechatBillService.downloadTradeBill(date);}

4.测试


最后吐槽一下,微信支付的文档真的烂

微信支付V3-下载交易账单相关推荐

  1. php微信商户下载对账单,浅析微信支付:下载对账单和资金账单

    本文是[浅析微信支付]系列文章的第九篇,主要讲解商户下载对账单接口和资金账单接口的实现和一些注意事项. 浅析微信支付系列已经更新九篇了哟-,没有看过的朋友们可以看一下哦. 在商户平台中,商家也可以下载 ...

  2. 微信支付v3版本npm包

    wechatpay-node-v3 # 微信支付v3 支持在ts和js中使用 欢迎大家加入一起完善这个api 前言 微信官方在2020-12-25正式开放了v3版本的接口,相比较旧版本v2有了不少改变 ...

  3. SpringBoot集成微信支付V3

    河南循中网络科技有限公司 - 精心创作,详细分解,按照步骤,均可成功! 文章目录 吐槽! 此文章包含实现了哪些接口? 学习资料 集成微信支付V3 什么是"商户证书"?什么是&quo ...

  4. springboot集成微信支付V3 SDK

    微信支付开通支付方法在这里可以参考一下:申请开通微信支付教程_个人怎么申请微信支付_郑鹏川的博客-CSDN博客 因为微信支付回调需要一个外网可访问的地址,我本地调试是采用的内网穿透的方式进行调试的. ...

  5. java异步调用微信接口_微信支付V3 SDK(Java版,支持同步异步调用)

    我们在开发微信支付时,发现微信官方已经对SDK做了升级,V3版本的SDK从设计上符合RESTful规范. 我们再在开源库中寻找是否有现成de开箱即用.并且支持响应式编程的SDK版本.经过一凡寻找,令我 ...

  6. 微信公众号之微信支付(V3版)jsp页面jsapi统一下单调启支付(java版)

    web项目 按顺序一步一步来 准备: 申请了微信支付接口的微信公众号一枚 , 备案的域名网站一枚, (如果有没有的这两个东西会耽误你很久,因为微信支付必须是线上,无法本地调试,) 这里说一下 如果有经 ...

  7. java微信支付v3系列——3.订单创建准备操作

    目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...

  8. 微信h5支付 php sdk_微信支付V3版,H5,APP微信支付PHP服务端使用方式

    使用步骤: 1.导入下载好的微信V3版本SDK public function __construct() { parent::__construct(); //引入微信支付 Vendor('Wxpa ...

  9. springboot利用官方SDK(wechatpay-apache-httpclient)接入微信支付V3

    利用微信官方提供的SDK wechatpay-apache-httpclient 实现.以微信小程序支付为例,其他支付也是一样的,就是参数和接口地址不同. 微信支付V3文档 首先要在微信商户平台设置好 ...

最新文章

  1. python中使用flask实现人脸实时检测
  2. Xamarin XAML语言教程模板页面TemplatedPage
  3. tf.nn.conv2d 与tf.layers.conv2d的区别
  4. zookeeper源码分析之二客户端启动
  5. 27 | 案例篇:为什么我的磁盘I/O延迟很高?
  6. 利用ISA实现网站发布协议重定向
  7. 我的世界java版如何加披风_我的世界正版披风怎么换
  8. 用友-凭证辅助项打印不出来的原因
  9. python判断是不是整数_python判断整数
  10. kdj买卖指标公式源码_买卖点KDJ (副图指标 源码 )
  11. 桃李春风一杯酒 江湖夜雨十年灯
  12. 软件测试工程师有哪些要求
  13. party_bid_core三种数据结构分析
  14. 64位电脑安装32位系统不能引导启动
  15. SIM900A通过基站定位
  16. 初识Java+JDK的安装与环境变量的配置+IDEA的安装
  17. Java使用数组几个数字比较大小进行排序
  18. Matlab 矩阵论 矩阵分解的计算实现(六)矩阵的正交三角分解
  19. 微软Google等互联网公司经典面试智力题和解答
  20. ueditor 工具栏配置_Ueditor文本编辑工具栏自定义

热门文章

  1. 【转】我从罗振宇、脱不花得到的10点
  2. 计算机教室规则英语作文,班级规则初中英语作文
  3. mysql 如何存带有特殊符号的微信昵称
  4. c语言从键盘输入十个整数,冒泡法从大到小排序
  5. 激活数字营销新引擎,亚马逊云科技为企业带来数字化营销新体验
  6. Window alert() 方法
  7. html病毒DropFileName,王国平博客-HTML 感染 DropFileName = “svchost.exe” Ramnit 蠕虫病毒 查杀解决办法...
  8. android 微信好友,朋友圈分享
  9. 试玩广告及SmartAd平台介绍
  10. 《痞子衡嵌入式半月刊》 第 66 期