Java微信公众号开发(一)—— 简述
1 公众号与微信的区别
微信 | 公众号 | |
社交圈 |
大多都是认识的人 可进行一对一、多对多交流 |
包括个人在内的更大的社交圈 关注用户大多都不认识 |
定位 | 主要用于聊天、朋友圈等个人娱乐 |
更加倾向于商业用途 达到个人品牌的推广、企业品牌宣传等 |
使用方式 | 主要在手机端使用 | 主要在PC端使用 |
关注方式 | 可以相互关注 | 只能被用户关注 |
2 公众号类型
公众号类型一般分为:
- 订阅号
- 服务号
- 企业号
注:个人只能注册订阅号,更详细的信息请登录微信公众平台查看。
3 微信公众平台
微信公众品台是腾讯为了让用户申请和管理微信公众账号而推出的一个WEB平台。
4 功能介绍
本节所有内容都是基于编辑模式(微信公众号开发的两种模式之一)进行的。
4.1 自动回复
自动回复分为以下三种:
- 被添加自动回复:用户刚关注该公众号时回复此文本
- 消息自动回复:任意消息回复此文本(在关键词回复之后执行)
- 关键词自动回复:消息是关键词或包含关键词回复此文本
该操作较为简单,只需注意关键词自动回复中,关键词的“未全匹配”和“已全匹配”区别。
-
若选择了全匹配,在编辑页面则会显示“已全匹配”(如图):
对方发送的内容与设置的关键词须完全一样,才会触发关键字回复,不能多一个字符也不能少一个字符。比如设置“123”,仅回复“123”才会触发关键词回复。
-
若没有选择全匹配的情况下,编辑页面则会显示“未全匹配”(如图):
只要对方发送内容包含设置的完整关键词,就会触发关键词回复给对方。比如设置“123”,回复“1234”会触发,但回复不完整的关键词“12”则不会触发关键词回复。
4.2 素材管理
素材管理主要对图文消息、图片、语音、视频等四种类型的消息进行管理。
现微信公众平台已改版,群发消息需从该管理下才能发送给用户。
图文消息编辑界面如下:
用起来挺简单,左方图文列表可设置单图文和多图文模式,另需注意:图文消息编辑需将图片等资源先上传至图片。
注:单图文就是只有一篇消息(可展示摘要),多图文就是多篇消息(不展示摘要,只有标题)。
但其实微信公众平台的编辑(排版)并不完善,可优先考虑使用第三方编辑器,如秀米、135编辑器、i排版等工具。
4.3 自定义菜单
自定义菜单,即设置公众号最下方的以下菜单效果,可使菜单连接至网页、图文消息或小程序。
自定义菜单有两种类型:click类型和view类型。
- click类型:返回消息(发送消息,可选择四种类型的消息)
- view类型:类似于超链接,跳转至一个页面(跳转网页)
此编辑部分也较为简单,不做过多说明。
5 开发模式环境搭建
需要的工具:
- 微信公众号
- 外网映射工具(开发调试)
与微信对接的URL要具备以下条件:
- 在公网上能够访问
- 端口只支持80端口
5.1 映射工具
Ngork可以将内网映射到公网上面,这样就可以在公网访问您的本地网络服务。
用法:
- 方法一:ngrok 8080(不稳定)
- 方法二:ngrok -config ngrok.cfg -subdomain example 8080(目前已改)
帮助文档:http://www.tunnel.mobi/
【重要】
目前Ngrok已被微信屏蔽了(网址:http://ngrok.2bdata.com/),需要加群(费用:5元)才能下载客户端,客户端已下载至在G盘,将其复制到D盘,修改“star.bat”文件:
然后双击执行即可映射成功。
【使用】
映射完毕后,实际上,下面两条语句是等效的:
http://localhost:8080==http://qijunhui1773.tunnel.echomod.cn
即开启Tomcat后,输入“http://qijunhui1773.tunnel.echomod.cn” 即可访问Tomcat首页(tomcat服务器和Ngrok映射工具都要开启)。
同时可以在别人电脑打开该链接一样可以展示项目Dome。
6 开发者模式
开发模式与编辑模式是互斥的,只能使用其一:
6.1 数据交互原理
6.2 开发模式接入(Get方式)
6.2.1 接入操作
6.2.2 代码实现(Java)
见附件或Eclipse源码。
代码编写完成后,生成域名为:“http://qijunhui1773.tunnel.echomod.cn/Weixin/wx.do”
配置微信后台服务器:
提交后,配置成功,出现以下页面:
注:启用后,编辑模式将失效。
6.3 消息的接收与响应(POST方式)
6.3.1 消息操作
6.3.2 代码实现(Java)
见Eclipse中的源码。
- 1 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- 2
- 3 req.setCharacterEncoding("UTF-8");//转换编码方式
- 4 resp.setCharacterEncoding("UTF-8");
- 5 PrintWriter out = resp.getWriter();//通过PrintWriter返回消息至微信后台
- 6
- 7 //接收消息
- 8 try {
- 9 Map<String,String> map = MessageUtil.xmlToMap(req);
- 10 String fromUserName = map.get("FromUserName");//发送方帐号(一个OpenID)
- 11 String toUserName = map.get("ToUserName");//开发者微信号
- 12 String msgType = map.get("MsgType");//text//如果是文本消息的话,MsgType="text"
- 13 String content = map.get("Content");//文本消息内容
- 14
- 15 String message = null;
- 16 //判断是否为文本消息
- 17 if("text".equals(msgType)) {
- 18 com.po.TextMessage text = new com.po.TextMessage();
- 19 text.setFromUserName(toUserName);//注意,这里发送者与接收者调换了
- 20 text.setToUserName(fromUserName);
- 21 text.setMsgType("text");//文本类型
- 22 text.setCreateTime("" + new Date().getTime());//当前时间
- 23 text.setContent("您发送的消息是:" + content);//返回消息
- 24 //将文本消息转换为xml
- 25
- 26 message = MessageUtil.textMessageToXml(text);
- 27
- 28 System.out.println(message);
- 29 }
- 30
- 31 out.print(message);//返回消息
- 32 } catch (DocumentException e) {
- 33 e.printStackTrace();
- 34 } finally {
- 35 out.close();
- 36 }
- 37 }
主要在这部分进行文本的接收与发生。其他类都是辅助类,代码较为固定。
需要注意:微信后台都是以XML格式发送或接受数据的,所以在程序中需要以下两种方法:
- XML转文本对象(集合)->需使用dom4j.jar
- 文本对象转XML->需使用xstream.jar和xmlpull.jar
注:只要将jar包放置在WebContent->WEB-INF->lib文件夹下,Tomcat发布后会自动将其部署,不必再将其包复制到Tomcat文件夹下。