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

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

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. BZOJ 1426 收集邮票 ——概率DP
  2. 书评 - 《展望敏捷软件测试》
  3. selenium截图模糊_Selenium截屏 图片未加载的问题解决--【懒加载】
  4. ajax加载vue数据,详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
  5. IntelliJ IDEA使用教程(很全)
  6. 中ridge_10种线性代数在数据科学中的强大应用(内附多种资源)
  7. 提高 10 倍性能,揭秘淘宝、天猫背后的图片存储如何扛住双十一巨流?| 问底中国 IT 技术演进...
  8. nis+nfs+autofs
  9. leetcode 125 valid-palindrome
  10. docker tensorflow_Docker环境下如何使用TensorBoard
  11. Python科学计算(一)
  12. 基于python的车牌识别系统设计与实现
  13. Chromium OS并行运行Linux chroot安装Linux
  14. 进销存管理系统——商品管理
  15. Typora的历史版本下载地址
  16. 设计模式(博客园精华集)
  17. Spring MVC整合FreeMarker
  18. DataLossError : corrupted record at XXXXXXX,BERT预训练报错
  19. 猫哥教你写爬虫 032--爬虫初体验-BeautifulSoup
  20. IP 分类地址、子网划分你还在混淆不清吗?别怕!今天全家桶来喽

热门文章

  1. 怎么把cad转换成pdf格式
  2. 新能源车融资租赁市场现状研究分析报告 -
  3. 手把手教你怎么做计网综合实验
  4. Neo4j 图形数据库
  5. 消除Word目录小三角
  6. 科普:PCI-E插槽都有哪些样子?
  7. 面试前必备技能get:如何知彼?
  8. 计算机远程桌面删除记录,win10系统删除远程桌面历史记录的处理方法
  9. 三星a9s参数_【三星GalaxyA9s评测】智能场景优化 三星A9s随手一拍让女友心满意足(全文)_三星 Galaxy A9s_手机评测-中关村在线...
  10. 邮件客户端用IMAP还是POP3,为什么?Thunderbird 雷鸟和免费腾讯企业邮箱