微信公众平台二次开发JAVA

微信公众平台二次开发JAVA写这篇文章其实也是为了给期末的作业增添一项亮点 正好想了一下就把期末的作业总结一下吧 首先介绍一下 期末的作业是做微信平台的二次开发 老师手底下正好有三位大神 可以分别在 python java php 方面帮到我们 相对来说 java 语言是我最熟悉的 所以一开始就选择了 java 看着确实很顺眼 但是做到后期发现了一些问题 于是开始改 python python 我也是比较喜欢的 第二篇文章会介绍 Py

写这篇文章其实也是为了给期末的作业增添一项亮点,正好想了一下就把期末的作业总结一下吧。

首先介绍一下,期末的作业是做微信平台的二次开发。老师手底下正好有三位大神,可以分别在python 、java、php方面帮到我们。相对来说java语言是我最熟悉的,所以一开始就选择了java,看着确实很顺眼,但是做到后期发现了一些问题,于是开始改python,python我也是比较喜欢的。第二篇文章会介绍Python的开发。经历了这一个月,算是对两种语言的开发都有所了解吧。做个总结,也让自己别忘记了。

好废话不多说,接下来开始进入正题。

其实网上有很多的视频,教学,慕课网上就有一个比较详实的Java 微信开发的课程。就照着那个课堂上来吧。

一开始是关于微信公众号的介绍,直接跳过去了。。。

进入开发模式。

一、环境搭建。

     我用的是myeclipse,本机装了tomcat服务器做测试,然后用了ngrok做外网映射。ngrok这个工具也是非常小巧的,也可以很方便的下载到,百度一搜就是,我就不介绍了。

使用的指令就是,在对应的目录下,输入ngrok http 80就可以把你本机的端口映射出去了。截图如下。

接下来再申请一个用来做测试的微信公众号微信公众平台二次开发JAVA

也是非常的简单。好,环境搭建,完成。

二、开发者模式接入。

开发者模式接入,对很多小白来说就是第一关。不过跟着教程走,认真仔细听,应该很快就会跨过去的。
https://mp.weixin..com/wiki?t=resource/res_main&id=mp&token=&lang=zh_CN
这个是微信公众号的开发文档。这里就有有关,接入的方法。用到了这几个变量,
signature,timestamp,nonce,echostr。验证的方法呢,也是非常简单。



1)将token、timestamp、nonce三个参数进行字典序排序

2)将三个参数字符串拼接成一个字符串进行sha1加密

3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

为了保证能让所有的小白看懂,我把我的代码也贴一下吧。

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("here"); String signature = req.getParameter("signature"); String timestamp = req.getParameter("timestamp"); String nonce = req.getParameter("nonce"); String echostr = req.getParameter("echostr"); System.out.println(signature+","+timestamp+","+nonce+","+echostr); String arr[] = {signature,timestamp,nonce}; PrintWriter out = resp.getWriter(); if(CheckUtil.checkSignature(signature,timestamp,nonce)){ out.print(echostr); System.out.println("OK"); } else{ out.print("abc"); } }

忘记交代了,这个接入验证,是一个GET请求,所以要在get方法里验证。这是我的servlet。另外把checkutil的内容也贴一下。

public static boolean checkSignature(String signature, String timestamp, String nonce){ String arr[] = {timestamp,nonce,TOKEN}; //1排序 Arrays.sort(arr); //2生成字符串 StringBuffer sbf = new StringBuffer(); for(String str:arr){ sbf.append(str); } String sig_ = getSha1(sbf.toString()); return sig_.equals(signature); } public static String getSha1(String str){ if (null == str || 0 == str.length()){ return null; } char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try { MessageDigest mdTemp = MessageDigest.getInstance("SHA1"); mdTemp.update(str.getBytes("UTF-8")); byte[] md = mdTemp.digest(); int j = md.length; char[] buf = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; buf[k++] = hexDigits[byte0 >>> 4 & 0xf]; buf[k++] = hexDigits[byte0 & 0xf]; } return new String(buf); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; } }

代码如此详细,应该大家都能看懂了吧。

三、消息的接收。

同样是看到了开发者文档。一个普通的文本消息格式如下,这些元素节点就不用我解释了吧,开发文档都有。我们要返回的时候呢,就同样按照格式,给它返回一个xml格式的文本。


 
    
    
      toUser 
     
    
      fromUser 
     
     
     
    
      text 
     
    
      this is a test 
     
    
      23456 
     
   

在慕课网上的教程呢,是比较方便地用到了一个jar包,可以方便地把发送过来的数据流,按照元素节点,解析成对应的map,这个就非常方便了。这样到后面我们只要用Map即可。比如说,我们想看它的消息类型,就可以这么读取

String msgType = map.get("MsgType");

同理,想看一下这个文本的内容,就可以这样看一下。

String content = map.get("Content")

这样真的就非常方便了。大家可以根据类型,msgType去看,发来的到底是文本呢,还是图片呢,还是语音呢?

当然也可以根据发来的文本的内容,做具体的解析。比如说,发来1,代表了什么含义,有什么要求。就赶紧做对应的反应,并封装好信息,回传回去。

四、消息的发送。

要回复文本消息呢,也是非常的简单。按照开发者文档,只要成为这样一个格式的,

               toUser                fromUser                          text                你好         

然后给它返回回去就行啦!

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding("UTF-8"); PrintWriter out = resp.getWriter(); String returnStr = WechatService.ProcessMessage(req); System.out.println(returnStr); out.print(returnStr); out.close(); }

不嫌丢人,我把我自己的代码传上来吧。大家看到,刚开始需要设置编码,以防取参数,和最后服务器端编码的时候,产生了乱码。

第二呢,就是所有发送回去的,都是一个String,当然是按照拼装好格式的url哦。这样就可以进行一个交互啦。

好了,以发送消息为例,一个简单的微信二次开发就做完了。我觉得这篇文章的要点在于,有详实的代码,可以防止一些小白干瞪眼。当然,大家可以留言,大家一起交流。











版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225331.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午9:33
下一篇 2026年3月17日 上午9:34


相关推荐

  • 利用Thumbnails 根据坐标裁剪图片

    利用Thumbnails 根据坐标裁剪图片问题描述 今天工作中需要用户上传个人头像 然后后台根据传来的坐标以及宽度高度来裁剪并存到 mysql 数据库 用 Thumbnails 来进行裁剪图片一 建立数据库 CREATETABLE tb sys user photo nbsp user no varchar 20 NOTNULLCOMME 用户名 nbsp user photo longblobCOMM 用户头像 nbsp

    2026年3月17日
    2
  • 2019.12.31 Day1练习题

    2019.12.31 Day1练习题寒假培训Day1

    2022年10月18日
    5
  • JavaScript在控制台打印正方形、三角形

    JavaScript在控制台打印正方形、三角形varstr 定义空字符串 for vari 0 i lt 10 i 外层循环控制行数 for varj 0 j lt 10 j 内层循环控制列数 str str str 字符串的拼接 str str n 打印 10 个 换行 console log str varstr for vari 0 i lt 10 i for varj i j lt 10 j

    2026年3月26日
    2
  • mac进入路径_mac终端找不到命令

    mac进入路径_mac终端找不到命令如果你想将当前commandline会话切换到其他目录,需要用到三个命令:pwd,ls和cd。pwd的含义是“printworkingdirectory”,会显示当前目录的绝对路径。 ls的含义是“listdirectorycontents”,它会列出当前目录的内容。这个命令还有其他参数可选。 cd的含义是“changedirectory”,它会改变当…

    2022年10月10日
    4
  • 百度爬虫类型(Baiduspider)及robots设置方法

    百度爬虫类型(Baiduspider)及robots设置方法Baiduspider 的 user agent 是什么 百度各个产品使用不同的 user agent table b 产品名称 b b 对应 user agent b 无线搜索 Baiduspider mobile 图片搜索 Baiduspider image 视频搜索 Baiduspider video 新闻搜索 Baiduspider news

    2026年3月16日
    3
  • Android Studio安装及环境配置教程

    Android Studio安装及环境配置教程前言 首先需要确定好电脑是否有安装 java 环境 即是否安装有 JDK 验证方法 直接电脑桌面 win R 输入 cmd 然后在黑窗口中分别输入 java javac javadoc java version enter 键 注意是输入一个指令按一次 enter 键 如果成功的有输出 说明 java 环境已经有安装过且安装成功 如果不成功则需要重新安装 JAVAJDK 并完成 java 环境的配置 相关

    2026年3月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号