Java 微信对账单_java 微信资金账单-程序员宅基地

技术标签: Java  spring boot  java  微信  开发语言  


前言

微信对账单官方地址: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表单的形式返回给用户,但是具体需要我们自己去研究。
新手小白,刚上路,有许多知识不清楚,有许多的不足之处,还望大家多多指点一下我,谢谢啦。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44415787/article/details/123076992

智能推荐

JSP与servlet的区别_jsp和servlet区别-程序员宅基地

文章浏览阅读6.3k次。一、了解Servlet的概念Servlet定义:Servlet是基于Java技术的Web组件,由容器管理并产生动态的内容。Servlet引擎作为WEB服务器的扩展提供支持Servlet的功能。Servlet与客户端通过Servlet容器实现的请求/响应模型进行交互。注意:Servlet不是从命令行启动的,而是由包含Java虚拟机的Web服务器进行加载1)Servlet是按照Servlet规范编写的Java类。2)Servlet应用请求/响应模型,扩展了服务器的功能。Servlet是WEB_jsp和servlet区别

Educoder练习-String&StringBuilder&StringBuffer类_string类和stringbuffer类练习-程序员宅基地

文章浏览阅读1.2k次。补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。测试输入:https://www.educoder.net/预期输出:educoderEDUCODERpublic class StringTest { public static void main(String[] args) { Scanner sc = new..._string类和stringbuffer类练习

Django中使用admin的多选widget插件FilteredSelectMultiple_django widget插件filteredselectmultiple复选框的显示数据-程序员宅基地

文章浏览阅读7.5k次,点赞3次,收藏3次。Django 的自带后台admin中多于manytomany类型可以进行_django widget插件filteredselectmultiple复选框的显示数据

计算机小学数学辅助教学缺点及对策 论文,小学数学第二学段图形与几何领域的作业设计研究...-程序员宅基地

文章浏览阅读2.6k次。本研究的学段是第二学段。在教学实施过程中采用的教材是北京师范大学出版社出版的《义务教育教科书》数学(教育部审定2013)。下面是第二学段图形与几何领域教学内容图形与几何(一)图形的认识1.结合实例了解线段、射线和直线。2.体会两点间所有连线中线段最短,知道两点间的距离。3.知道平角与周角,了解周角、平角、钝角、直角、锐角之间的大小关系。4.结合生活情境了解平面上两条直线的平行和相交(包括垂直)关系..._小学数学第二学段“图形与几何”非书面作业设计与研究的重难点

计算机网络与通信的心得体会,计算机网络与通信技术课程学习心得.doc-程序员宅基地

文章浏览阅读4.6k次。计算机网络与通信技术课程学习心得,计算机课程学习心得,计算机通信专业课程,课程游戏化学习心得,网络课程学习心得,课程学习心得,课程学习心得体会,学习微课程心得体会,微课程学习心得,信息技术课程学习心得计算机网络与通信技术课程学习心得2012级机电工程学院机电一体化4班姓名:徐丹丹学号:201216010439经过这学期的学习,这门课终于顺利得以结课,在这里有很多话想说,在学习这门课后,感觉有更多的..._通信系统学习心得

实训总结_CSDN Java班 乔晓松_java实训报告拨号系统-程序员宅基地

文章浏览阅读5.7k次。Csdn实训总结 CSDN Java班 乔晓松 111307156 为期7天的暑假实训结束了,我感觉我的收获很大。实训让我了解到了以前不曾了解的信息,使我重新确立了我的目标,不像以前那样迷茫。实训更加的让我体会到了团队精神,我身处其中,我很欣慰、很开心,享受团队的力量。实训前5天,是企业老师给我们授课,讲的是android的开发,都是一些基本知识,让我们有个初步的了解,暑假有时_java实训报告拨号系统

随便推点

STIHL(斯蒂尔集团) EDI解决方案_德国stihl集团规模怎样-程序员宅基地

文章浏览阅读606次。STIHL斯蒂尔集团德国斯蒂尔集团STIHL是一家具有92年历史的顶尖机械用具品牌,发明了世界上第一台电锯,被称作“电锯之父”和“世界电锯之王”。2016年,知行软件助力供应商实现了与STIHL的EDI直连对接, 通过知行RSSBus EDI系统,供应商可以直接接收到STIHL的物料需求计划,并发送提前发货通知给STIHL。满足STIHL对于业务数据安全传输要求,增强供应商国际竞争力。业..._德国stihl集团规模怎样

R语言︱异常值检验、离群点分析、异常值处理_r语言异常值处理-程序员宅基地

文章浏览阅读10w+次,点赞43次,收藏393次。笔者寄语:本文是《R语言数据分析与挖掘实战》异常值处理一般分为以下几个步骤:异常值检测、异常值筛选、异常值处理。其中异常值检测的方法主要有:箱型图、简单统计量(比如观察极值)异常值处理方法主要有:删除法、插补法、替换法。提到异常值不得不说一个词:鲁棒性。就是不受异常值影响,一般是鲁棒性高的数据,比较优质。一、异常值检验异常值大概包括缺失值、离群值、重复值_r语言异常值处理

Risc-v 技术架构_risc-v开放架构设计之道-程序员宅基地

文章浏览阅读2k次。RISC-V ISA 是一种可扩展的、模块化的指令集,它被设计为适用于各种各样的硬件和软件场景。RISC-V 的成功不仅在于其优秀的设计,更在于它的开放性和社区。通过开放的标准和活跃的社区,RISC-V 能够吸引全球各地的人才和资源,使得其在硬件和软件领域的应用越来越广泛。高效性:由于 RISC-V 指令集的简洁性和灵活性,它可以轻松地进行优化,以实现高效的处理能力和低功耗的设计。可扩展性:RISC-V 的指令集具有可扩展性,可以通过添加新的扩展指令集,从而实现更多的功能和性能提升。_risc-v开放架构设计之道

EndNoteX9 使用笔记_endnote 9笔记-程序员宅基地

文章浏览阅读2.6k次,点赞3次,收藏15次。EndNoteX9 使用笔记 文章目录 EndNoteX9 使用笔记1、endnote导入文献的方式1.1. 直接检索1.2.网站输出1.3. PDF导入1.4. 手动导入1.5. 软件之间数据的交换 2、endnote的详细功能2.1. 实现功能2.2. 管理功能 3、编辑参考文献格式3.1. 如何插入参考文献3.2. 如何编辑参考文献格式3.3. 如何手动修改参考文献格式 4、利用endnot..._endnote 9笔记

exe4j打包成的exe中提取jar包_exe4jlib.jar-程序员宅基地

文章浏览阅读3.4k次。以前碰到过的打包的java程序都可以用winrar解压得到jar文件从而进行进一步的反编译,然而今天碰到一个用exe4j打包的程序,无法直接用winrar解压,上网查资料未果。后来想到这个程序的原理是将jar全部解压然后调用java运行库执行,于是到temp文件夹中搜索*.jar,果然找到了目标程序。很简单的原理,供后来者参考。_exe4jlib.jar

强化学习在电商环境下的若干应用与研究-程序员宅基地

文章浏览阅读538次。背景随着搜索技术的持续发展,我们已经逐渐意识到监督学习算法在搜索场景的局限性:搜索场景中,只有被当前投放策略排到前面的商品,才会获得曝光机会,从而形成监督学习的正负样本,而曝光出来的商品,只占总的召回商品中的很小一部分,训练样本是高度受当前模型的bias影响的。监督学习的损失函数,和业务关注的指标之间,存在着不一致性用户的搜索、点击、购买行为,..._电商 算法 reward

推荐文章

热门文章

相关标签