微信公众平台二次开发JAVA
来源:互联网 发布:国密算法实现 编辑:程序博客网 时间:2024/06/05 04:38
写这篇文章其实也是为了给期末的作业增添一项亮点,正好想了一下就把期末的作业总结一下吧。
首先介绍一下,期末的作业是做微信平台的二次开发。老师手底下正好有三位大神,可以分别在python 、java、php方面帮到我们。相对来说java语言是我最熟悉的,所以一开始就选择了java,看着确实很顺眼,但是做到后期发现了一些问题,于是开始改python,python我也是比较喜欢的。第二篇文章会介绍Python的开发。经历了这一个月,算是对两种语言的开发都有所了解吧。做个总结,也让自己别忘记了。
好废话不多说,接下来开始进入正题。
其实网上有很多的视频,教学,慕课网上就有一个比较详实的Java 微信开发的课程。就照着那个课堂上来吧。
一开始是关于微信公众号的介绍,直接跳过去了。。。
进入开发模式。
一、环境搭建。
我用的是myeclipse,本机装了tomcat服务器做测试,然后用了ngrok做外网映射。ngrok这个工具也是非常小巧的,也可以很方便的下载到,百度一搜就是,我就不介绍了。
使用的指令就是,在对应的目录下,输入ngrok http 80就可以把你本机的端口映射出去了。截图如下。
接下来再申请一个用来做测试的微信公众号
也是非常的简单。好,环境搭建,完成。
二、开发者模式接入。
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> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is a test]]></Content> <MsgId>1234567890123456</MsgId> </xml>在慕课网上的教程呢,是比较方便地用到了一个jar包,可以方便地把发送过来的数据流,按照元素节点,解析成对应的map,这个就非常方便了。这样到后面我们只要用Map即可。比如说,我们想看它的消息类型,就可以这么读取
String msgType = map.get("MsgType");同理,想看一下这个文本的内容,就可以这样看一下。
String content = map.get("Content")这样真的就非常方便了。大家可以根据类型,msgType去看,发来的到底是文本呢,还是图片呢,还是语音呢?
四、消息的发送。
<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[你好]]></Content></xml>
然后给它返回回去就行啦!
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哦。这样就可以进行一个交互啦。
好了,以发送消息为例,一个简单的微信二次开发就做完了。我觉得这篇文章的要点在于,有详实的代码,可以防止一些小白干瞪眼。当然,大家可以留言,大家一起交流。
- 微信公众平台二次开发JAVA
- nutz+微信公众平台二次开发
- java二次开发微信公众号授权
- 针对微信公众平台订阅号二次开发
- 配置微信公众号二次开发接口java代码
- 微信公众平台消息接口-java
- 微信公众平台java图文
- java实现微信公众平台
- 微信公众平台开发,java版
- 微信公众平台java开发详解
- java接入微信公众平台
- java微信公众平台分享朋友圈
- java验证微信公众平台
- java微信公众平台获取access_token
- 微信公众平台java开发详解
- 微信公众平台java开发详解
- 微信公众平台 java 接入 1
- 微信公众平台java接入
- 1090. Highest Price in Supply Chain (25)-PAT甲级真题
- 电路与Multisim基础 带锁型按钮开关
- 二维数组中的查找
- 电路与Multisim基础 电感的通直流阻交流的示例
- Linux下Kill多个同名进程
- 微信公众平台二次开发JAVA
- 2009 3
- 深入理解Java微服务架构Dubbo系列—— 第一回 结缘
- Ajax提交数据给后台
- 算法导论(2)
- 刷刷笔试题--[位运算编程题]
- JZOJ4769 【GDOI2017模拟9.9】graph CDQ分治+用按秩合并维护带撤销的并查集(BZOJ 4025)
- 电路与Multisim基础 电流源示例
- Direct3D顶点坐标变换