码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 微信公众号关注/取消关注事件推送开发记录


    一、奉上官方文档

    关注/取消关注事件 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html

    二、后端接口开发

    1.验证消息的合法性

    1. private Static String token = "微信配置的token,记得要改喔,不然配置提交会报token验证失败";
    2. public Boolean checkSignature(String timestamp,String nonce,String signature){
    3. String checkText = null;
    4. Boolean res = false;
    5. if(null != signature){
    6. //对Token,timestamp,nonce 按字典顺序
    7. String[] paramArr = new String[]{token,timestamp,nonce};
    8. Array.sort(paramArr);
    9. //将排序后的结果拼接成一个字符串
    10. String content = paramArr[0].concat(paramArr[1].concat.paramArr[2]);
    11. try{
    12. //对接后的字符串进行SHA-1加密
    13. MessageDigest md = MessageDigest.getInstance("SHA-1);
    14. byte[] digest = md.digest(digest);
    15. checkText = byteToStr(digest);
    16. //将加密后的字符串与signature对比
    17. res = checkTex!=null?checkText.equals(signature.toUpperCase()):false;
    18. }catch(NoSuchAlgorithmException e){
    19. e.printStackTrace();
    20. }
    21. }
    22. return res;
    23. }
    1. /**
    2. * 将字节数组转化十六进制字符串
    3. * @param byteArrays 字符数组
    4. * @return 字符串
    5. */
    6. private static String byteToStr(byte[] byteArrays){
    7. String str = "";
    8. for(int i=0;i<byteArrays.length;i++){
    9. str+= byteToHexStr(byteArrays[i]);
    10. }
    11. return str;
    12. }
    13. /**
    14. * 将字节转化为十六进制字符串
    15. * @param myByte 字节
    16. * @return 字符串
    17. */
    18. private static String byteToHexStr(byte myByte) {
    19. char[] Digit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    20. char[] tampArr = new char[2];
    21. tampArr[0] = Digit[(myByte >>> 4) & 0X0F];
    22. tampArr[1] = Digit[myByte & 0X0F];
    23. String str = new String(tampArr);
    24. return str;
    25. }

     2.验证

    进入到微信公众号:开发->基本配置->修改配置->填写相关配置->点击提交,日志打印出“接入认证”,并且返回正确的echostr,说明成功了。

    接下来关注该公众号,日志打印出“进入关注/取消关注事件推送-消息合法验证”,说明微信已经将消息发送到post方法里了,这时就可以写获取xml和相关的后台逻辑。

    哈哈哈,恭喜你完成一大步了。

    配置的时候需要注意,消息加密模式选择。如果选择明文,推送 XML 数据包示例:

    如果选择的是安全模式,推送xml数据包示例:

     

    Encrypt:经过加密后的参数串,需要进行解密再获取到相对应的参数值。

    三、解密参考下方链接(秘钥是配置填写的EncodingAESKey)

    05. 微信公众号消息加解密_一妍为定的博客-CSDN博客_微信公众号消息加密https://blog.csdn.net/rmy_20/article/details/119543386?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-4-119543386-null-null.pc_agg_new_rank&utm_term=%E5%9B%9E%E8%B0%83%E6%96%B9%E6%B3%95%E8%A7%A3%E5%AF%86+%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7&spm=1000.2123.3001.4430

    若出现Illegal key size报错。

    解决方法:

    1.链接:https://pan.baidu.com/s/106CXeIo1SMRsXoLgIfAEXQ
       提取码:lb4j

    下载好后,将两个文件放到jdk和jre的对应的文件夹下(\java\jdk\jre\lib\security和\java\jre\lib\security)

    2.升级jdk版本

    目前我使用的是第一个方法。第二个话的需要再问度娘。

  • 相关阅读:
    项目中缓存的使用
    Redis知识-实战篇(3)
    机器学习_LGB调参汇总(开箱即食)
    《微信小程序开发从入门到实战》学习二十四
    JVM:(十四)垃圾回收算法
    Django(九、choices参数的使用、多对多表的三种创建方式、Ajax技术)
    VMware安装CentOS Stream 8以及JDK和Docker
    2009(408)数据结构有关链表代码题
    华为ICT——第四章深度学习和积卷神经
    Vite创建Vue2项目中,封装svg-icon组件并使用——插件之vite-plugin-svg-icons和fast-glob
  • 原文地址:https://blog.csdn.net/weixin_42381713/article/details/125496940
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号