文章目录

  • 前言
  • 一、需求来源
  • 二、解题思路
  • 总结

前言

微信对账单官方地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_6

一、需求来源

公司需要做一个邮费支付的核验机制,其原理就是第二天轮询昨天的微信对账单数据,看是否存在已经支付过的数据而我这边的数据没有改变,如果存在,则调用相关方法改变数据状态

二、解题思路

1.封装请求参数,调用微信对账单接口

appid:公众号id
mchId:商户号
pub32tr2:API密钥(key)
以上参数我是通过@Value注解的方式添加进去的。
其中WxPayUtil方法如下,直接调用即可:

public class WxPayUtil {public static  String MD5Encode(String origin, String charsetname) {String resultString = null;try {resultString = new String(origin);MessageDigest md = MessageDigest.getInstance("MD5");if (charsetname == null || "".equals(charsetname)) {resultString = byteArrayToHexString(md.digest(resultString.getBytes()));} else {resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));}} catch (Exception exception) {}return resultString;}private static String byteArrayToHexString(byte b[]) {StringBuffer resultSb = new StringBuffer();for (int i = 0; i < b.length; i++) {resultSb.append(byteToHexString(b[i]));}return resultSb.toString();}private static String byteToHexString(byte b) {int n = b;if (n < 0) {n += 256;}int d1 = n / 16;int d2 = n % 16;return hexDigits[d1] + hexDigits[d2];}private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5","6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };public static String getRequestXml(SortedMap<Object, Object> parameters) {StringBuffer sb = new StringBuffer();sb.append("<xml>");Set es = parameters.entrySet();Iterator it = es.iterator();while (it.hasNext()) {Map.Entry entry = (Map.Entry) it.next();String k = entry.getKey().toString();String v = entry.getValue().toString();if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k) || "sign".equalsIgnoreCase(k)) {sb.append("<" + k + ">" + "<![CDATA[" + v + "]]></" + k + ">");} else {sb.append("<" + k + ">" + v + "</" + k + ">");}}sb.append("</xml>");return sb.toString();}public static String getRandomString(int length) {String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";Random random = new Random();StringBuilder sb = new StringBuilder();for (int i = 0; i < length; i++) {int number = random.nextInt(62);sb.append(str.charAt(number));}return sb.toString();}}

2.解析返回的数据

// 2.解析微信返回的数据ArrayList<String> ywlshList = new ArrayList<>();ArrayList<String> orderList = new ArrayList<>();ArrayList<String> moneyList = new ArrayList<>();String tradeMsg = data.substring(data.indexOf("`"));String tradeInfo =tradeMsg.substring(0, tradeMsg.indexOf("总")).replace("`", "").replace("\r\n", "");String[] tradeArray = tradeInfo.split("%");HashMap<String, String> mapList = new HashMap<>();for (String tradeDetailInfo : tradeArray) {String[] tradeDetailArray = tradeDetailInfo.split(",");// 在这个步骤你就可以通过实体类保存相关字段信息了(如支付金额:tradeDetailArray[12])mapList.put(tradeDetailArray[6], tradeDetailArray[5] + "_" + tradeDetailArray[12]);}

3.通过相关数据进行判断……(涉及公司代码暂不提供)

总结

整个流程大概是这样,其实只要将对账单数据解析出来就可以了,而且下一步感觉也还可以通过下载excel表单的形式返回给用户,但是具体需要我们自己去研究。
新手小白,刚上路,有许多知识不清楚,有许多的不足之处,还望大家多多指点一下我,谢谢啦。

Java 微信对账单相关推荐

  1. java微信对账单解析为bean

    最近发现对账单的 格式变了 重新写了一下 官网地址: https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_6 有问题留言 ...

  2. java 微信 下载对账单_java下载微信对账单,实现与微信实收对账和日清日结对账...

    最近接手了一个棘手的工作:微信下载对账单. 刚接手完全懵逼,怎么和微信对接啊.然后就是百度.. 终于找到了组织: 微信支付|开发文档 :点击跳转 通过文档我们可以看到,首先是: 1.下载对账单开放接口 ...

  3. java 对比两个表的字段的差异_Joolun小程序商城 2.2.2版本上线了——Java微信快速开发平台...

    Joolun是一款基于spring-boot的微信快速开发平台,目前拥有公众号基础版和小程序商城版两个版本.Joolun采用目前流行的前后端分离技术所写,是一款高效.易用的java微信开发框架平台,二 ...

  4. 慕课网_《Java微信公众号开发进阶》学习总结

    时间:2017年08月12日星期六 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc.com 教学源码:http://img.mukewang.com/down/... 学习 ...

  5. java微信公众号开发token验证失败的问题及解决办法

    java微信公众号开发token验证失败的问题及解决办法 参考文章: (1)java微信公众号开发token验证失败的问题及解决办法 (2)https://www.cnblogs.com/beardu ...

  6. 捷微jeewx , 免费开源(java)微信公众账号管家系统发布

    JeeWx, 微信管家平台,简称"捷微". 捷微是一款免费开源的JAVA微信公众账号开发平台.   平台介绍: 一.捷微Jeewx简介 Jeewx是一个开源.高效.敏捷的微信开发平 ...

  7. java 微信退款接口_java版微信和支付宝退款接口

    本文实例为大家分享了java微信退款接口和支付宝退款接口的具体代码,供大家参考,具体内容如下 1.微信退款接口 相对来说我感觉微信的退款接口还是比较好调用的,直接发送httppost请求即可: /** ...

  8. Java微信公众平台开发--番外篇,对GlobalConstants文件的补充

    转自:http://www.cuiyongzhi.com/post/63.html 之前发过一个[微信开发]系列性的文章,也引来了不少朋友观看和点评交流,可能我在写文章时有所疏忽,对部分文件给出的不是 ...

  9. Java微信订单查询

    版权声明:本文首发 http://asing1elife.com ,转载请注明出处. https://blog.csdn.net/asing1elife/article/details/8262004 ...

  10. java微信支付代码_Java微信支付之服务号支付代码示例

    Java微信支付之服务号支付实现,网上的java微信支付sdk和Demo基本上是水的,看着头疼所以我决心自己开始写Java微信支付之公众号支付,多的不说见下面源码,为了方便使用我分别用了两个Servl ...

最新文章

  1. 干货 | 斯坦福的人工智能4年路线!
  2. RequestResponse总结
  3. Python入门(06) -- 正则表达式
  4. Android零基础入门第64节:揭开RecyclerView庐山真面目
  5. linux程序已经在后台运行冻结了_让linux下程序永远后台运行
  6. linux下的C语言开发(多线程编程)
  7. 1051. 复数乘法 (15)-PAT乙级真题
  8. Spring源码之ApplicationContext(六)注册BeanPostProcessor
  9. Instruments工具的使用
  10. 【收藏】一千行 MySQL 学习笔记
  11. Android应用APP: 基于MobileNet和EfficientNet的图像分类模型_调试运行以及打包Tensorflow官方提供的Image classification demo
  12. 电商商品中心类目体系
  13. word2007 计算机考试题库,2015年职称计算机考试题库word2007
  14. 更改微信会员卡包内展示信息
  15. 关于某日头条_signature参数逆向生成纯补环境
  16. java计算机毕业设计计算机office课程平台MyBatis+系统+LW文档+源码+调试部署
  17. 【三维目标检测】VoteNet(一)
  18. CPU性能测试工具coremark使用
  19. 基于CTP的程序化交易系统开…
  20. 【最强大脑vs人工智能】脑王水哥王昱珩惜败人工智能, 这不可能. - 图像识别到底是什么鬼

热门文章

  1. 利用spring集成redis使用
  2. Leetcode应该怎么刷?【笔试】
  3. Android应用市场应用转让申请流程
  4. linux mbr转gpt分区,免重装!迄今为止最详细的MBR转GPT分区攻略
  5. Java 面试简答题
  6. java exchange类,JAVA5---Exchange使用
  7. 考研复试问题之数据库概论
  8. 苹果笔记本显卡性能测试软件,苹果Mac Pro性能测试:好厉害的“垃圾桶”
  9. 参数化曲线-微分几何
  10. Windows11 0x80190001错误解决