在网上稍微搜了一下,有一篇介绍了如何处理,但那时候的对账单数据与我现在下载下来的似乎有点误差,在这里我不谈论对方的方法对错,我只写下自己的处理过程.

首先,先看下获取的对账单数据:

2019-03-13 17:20:09,wx10796e586721729e,1526775301,0,,4200000257201903132495667456,555439938150072320,o-YLy5CNWR2_tR-pzvgs5kzU-82g,JSAPI,SUCCESS,COMM_CREDIT,CNY,1.00,0.00,0,0,0.00,0.00,,,天虹基金管理会,PAYMENT_EXPERIENCE_FEE,0.01000,0.60%,1.00,0.00,\\r\\n2019-03-13 17:33:55,wx10796e586721729e,1526775301,0,,4200000257201903132495667456,555439938150072320,o-YLy5CNWR2_tR-pzvgs5kzU-82g,JSAPI,REFUND,COMM_CREDIT,CNY,0.00,0.00,50000010172019031308710710739,1038374382019031324956674561552469612,1.00,0.00,ORIGINAL,SUCCESS,天虹基金管理会,PAYMENT_EXPERIENCE_FEE,-0.01000,0.60%,0.00,1.00,\\r\\n

如上,这是稍加处理的数据,把文字头去掉以及后面汇总数据还有单点`符号(后面会贴处理代码).

拿到这样的一份数据,其实大家应该都能看出来只需要截取\\r\\n就可以取出两份字符串数组了,但是今天在截取这个"回车换行"符的时候着实折腾了半天,算是与大家分享一下自己踩得坑吧.我在网上搜了半天,找到说用"\r?\n"或者"\\r?\\n"代替的,但是最终都没有实现.最终,我还是在群里问了一下,说是先用replace方法把"\\r\\n"替换掉,再去用替换的字符分割,还有就是千万不要用string的replaceAll方法,而是用replace方法...

@Scheduled(cron = "0 0 10 * * ?")public void doDownloadBill() throws Exception {WXPay wxpay = new WXPay(WXPayConfigImpl.getInstance());HashMap<String, String> data = new HashMap<String, String>();data.put("bill_date", DateTimeUtil.getTimeShortString(DateUtils.addDateDays(new Date(), -1)));data.put("bill_type", "ALL");try {Map<String, String> r = wxpay.downloadBill(data);String result = JsonMapper.obj2String(r);String tradeMsg = result.substring(result.indexOf("`"));String tradeInfo = tradeMsg.substring(0, tradeMsg.indexOf("总")).replace("`", "");// 去掉汇总数据,并且去掉'`'String[] tradeArray = tradeInfo.replace("\\r\\n", " wc").split("wc"); // i wanna say nothingfor (String tradeDetailInfo : tradeArray) {String[] tradeDetailArray = tradeDetailInfo.split(",");BillEntity bill = BillEntity.builder().id(IdGenerator.nextId()).tradedate(DateUtils.stringToDate(tradeDetailArray[0])).commonid(tradeDetailArray[1]).businessno(tradeDetailArray[2]).specialbusinessno(tradeDetailArray[3]).deviceno(tradeDetailArray[4]).wxorderno(tradeDetailArray[5]).businessorderno(Long.valueOf(tradeDetailArray[6])).usertype(tradeDetailArray[7]).tradetype(tradeDetailArray[8]).tradestatus(tradeDetailArray[9]).paybank(tradeDetailArray[10]).moneytype(tradeDetailArray[11]).payordermoney(new BigDecimal(tradeDetailArray[12])).paperreplacemoney(new BigDecimal(tradeDetailArray[13])).wxrefundno(tradeDetailArray[14]).businessrefundno(tradeDetailArray[15]).refundamount(new BigDecimal(tradeDetailArray[16])).rechargerefundamount(new BigDecimal(tradeDetailArray[17])).refundtype(tradeDetailArray[18]).refundstatus(tradeDetailArray[19]).businessname(tradeDetailArray[20]).businessdata(tradeDetailArray[21]).fee(new BigDecimal(tradeDetailArray[22])).feerate(tradeDetailArray[23]).orderamount(new BigDecimal(tradeDetailArray[24])).applyrefundamount(new BigDecimal(tradeDetailArray[25])).feeratenote(tradeDetailArray[26]).createdate(new Date()).build();billMapper.insert(bill);}} catch (Exception e) {e.printStackTrace();}}

微信小程序支付sdk二次封装(开箱即用)

最近,做微信退款时遇到点小问题,就直接在这下面更新:由于拉取对账单不需要证书,因此我就项目中初始化了一下并没有注意,现在退款需要读取证书内容转化为字节数组.之前,我是将证书放在服务器上固定路径,代码中直接读取文件,后来由于线上环境麻烦,因此就讲证书放在了项目下的resource文件中,因而遇到了读取不到的问题

这里有一篇介绍读取springboot中resource下文件的介绍

下面贴出我在微信支付sdk中初始化证书时的操作:

private WXPayConfigImpl() throws Exception {String certPath = WXPayConstants.APICLIENT_CERT;// File file = new File( certPath );ClassPathResource resource = new ClassPathResource( certPath );// File file = ResourceUtils.getFile( certPath );// InputStream certStream = new FileInputStream( file );InputStream certStream = resource.getInputStream();byte[] buffer = new byte[1024];int len = 0;ByteArrayOutputStream bos = new ByteArrayOutputStream();while( ( len = certStream.read( buffer ) ) != -1 ) {bos.write( buffer, 0, len );}bos.flush();// this.certData = new byte[(int) file.length()];// certStream.read( this.certData );this.certData = bos.toByteArray();certStream.close();}

希望对大家有用^_^

如何处理微信小程序支付下载下来的对账单以及证书读取相关推荐

  1. 微信小程序支付(已调试通过)

    微信小程序支付(已调试通过) 1.安装证书 解压后找到apiclient_cert.p12 双击apiclient_cert.p12 ,输入密钥. 不知道密钥的话,可以尝试输入商户号 2.支付调试中出 ...

  2. 实战:微信小程序支付开发具体流程

    2019独角兽企业重金招聘Python工程师标准>>> 来源:授权地址 作者:会编码的熊 该文章纪录了我在开发小程序支付过程中的具体流程 1. 申请微信支付 小程序认证后进入微信支付 ...

  3. (一)微信小程序支付前后台

    最近在做一个微信小程序的蓝牙项目.用户通过微信小程序支付后,通过蓝牙将指定的数据包写入设备,设备启动. 大致的流程图就是这样子: 这里面涉及到两个部分,一个小程序的蓝牙通讯,一个是小程序的支付.我今天 ...

  4. 微信支付之微信小程序支付

    今天给大家介绍一下微信小程序是如果实现支付的流程,在开发之前我们首先要获取到商户的appId和mchId最后就是商户的key值了.这些值在商户申请成功之后都会通过邮件的形式发送给商户,所以如果还没有拿 ...

  5. 微信小程序引用php函数,php微信小程序支付讲解(JSAPI)

    在早起的某篇文章中我们已经简单介绍了小程序支付, 这里我们在这篇文章中详细的介绍一个微信小程序支付, 顺便附带小程序端的部分支付代码. 微信小程序支付文档地址(微信小程序支付) 微信完整支付类下载地址 ...

  6. Java微信小程序支付篇

    在做完一个仿美团的应用,我将其中涉及到的一些技术点进行总结和整理,当下次遇到类似的问题就能省下不少时间,避免踩坑. 一.微信小程序支付的使用 微信支付有官方提供的SDK,但要自己处理的东西比较多.我使 ...

  7. 微信小程序支付以及退款功能(超详细)

    Springboot整合微信小程序支付 第一步: 第二步:导入微信支付的依赖 第三步:在springboot核心配置文件中配置参数 第四步:创建配置类WxPayAppConfig 第五步:支付方法 s ...

  8. 微信小程序支付组件开发实战

    该文章纪录了我在开发小程序支付过程中的具体流程 1. 申请微信支付 小程序认证后进入微信支付申请小程序的微信支付 填写企业信息对公账户并上传凭证后,微信支付会打一笔随机金额到对公账户,输入金额完成验证 ...

  9. 微信小程序支付开发具体步骤

    一.支付业务流程图展示  地址:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=2      ...

最新文章

  1. netty服务器返回信息关闭,netty4 服务端同步客户端返回的结果
  2. LeetCode-28 实现strStr()
  3. 如何一次性复制带有markdown/mathjax/latex的博客内容
  4. python pandas 排序_Pandas的排序和排名(Series, DataFrame) + groupby
  5. numpy 中的axis轴问题
  6. mysql 字符串运算_使用MySQL字符串运算实施精巧化SQL注入攻击
  7. python文件hadoop_采用Python来访问Hadoop HSFS存储实现文件的操作
  8. linux ip命令dhcp,嵌入式linux通过DHCP自动获取IP地址实现获取
  9. Hibernate笔记——hql总结
  10. 如何使用海康威视网络相机(激活+修改ip)
  11. 浏览器内核的解析和对比
  12. Matlab之linspace函数
  13. 双硬盘分别装windows和linux,双硬盘分别安装windows和Ubuntu20双系统
  14. 漫谈CRM体系化建设1 – CRM与客户管理综述
  15. 模型的参数verbose用法详解
  16. (译)使用Go语言从零编写PoS区块链
  17. e431装linux系统恢复,Mac、Linux、Windows三系统的备份恢复以及引导修复思路记录
  18. python-docx 不改变原文件调整段落行间距的问题
  19. SaaS、PaaS、IaaS简介
  20. Web安全之防止短信炸弹

热门文章

  1. 作业7-2 求矩阵各行元素之和
  2. android5.0虚拟定位,流畅度爆棚 搭Android 5.0系统新机一览
  3. NEO战略投资深脑链,助力区块链驱动人工智能行业
  4. Java键盘录入的三种方式
  5. 联想打印机提示激光器故障
  6. 基于android 的智能家居系统+论文
  7. java计算机毕业设计基于安卓Android的金融保险app(源码+系统+mysql数据库+Lw文档)
  8. SQL中各种join的区别,一目了然
  9. mybatis的一级缓存、二级缓存、sqlsession、sqlsessionfactory什么意思?
  10. 美图美妆由Try Try接手运营