2.第一个小程序(微信公众号开发实战)
来源:互联网 发布:ubuntu 17.04 163源 编辑:程序博客网 时间:2024/05/17 08:30
项目结构
导入jar包:
dom4j-1.6.1.jar
xstream-1.3.1.jar
话不多说,直接上代码。
TextMessage
package com.jiuzhouchedai.po;public class TextMessage { private String ToUserName; //开发者微信号 private String FromUserName; //发送方帐号(一个OpenID) private long CreateTime; //消息创建时间 (整型) private String MsgType; //text private String Content; //文本消息内容 private String MsgId; //消息id,64位整型 public String getToUserName() { return ToUserName; } public void setToUserName(String toUserName) { ToUserName = toUserName; } public String getFromUserName() { return FromUserName; } public void setFromUserName(String fromUserName) { FromUserName = fromUserName; } public long getCreateTime() { return CreateTime; } public void setCreateTime(long createTime) { CreateTime = createTime; } public String getMsgType() { return MsgType; } public void setMsgType(String msgType) { MsgType = msgType; } public String getContent() { return Content; } public void setContent(String content) { Content = content; } public String getMsgId() { return MsgId; } public void setMsgId(String msgId) { MsgId = msgId; }}
weixinServlet
package com.jiuzhouchedai.servlet;public class weixinServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String signature=request.getParameter("signature"); String timestamp=request.getParameter("timestamp"); String nonce=request.getParameter("nonce"); String echostr=request.getParameter("echostr"); PrintWriter out=response.getWriter(); if (CheckUtil.checkSignature(signature, timestamp, nonce)) { out.write(echostr); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); PrintWriter out=response.getWriter(); try { Map<String, String> map=MessageUtil.xmlToMap(request); String toUserName=map.get("ToUserName"); String fromUserName= map.get("FromUserName"); String msgType=map.get("MsgType"); String content=map.get("Content"); String message=null; if("text".equals(msgType)){ TextMessage text=new TextMessage(); text.setFromUserName(toUserName); text.setToUserName(fromUserName); text.setMsgType("text"); text.setCreateTime(new Date().getTime()); text.setContent("您输入的内容为:"+content); message=MessageUtil.textMessageToXml(text); } out.print(message); } catch (Exception e) { e.printStackTrace(); }finally{ out.close(); } }}
CheckUtil
package com.jiuzhouchedai.util;public class CheckUtil { public static final String token="xxxxx"; public static boolean checkSignature(String signature,String timestamp,String nonce){ String[] arr=new String[]{token, timestamp, nonce}; //字典排序 Arrays.sort(arr); //生成字符串 StringBuffer content=new StringBuffer(); for (int i = 0; i < arr.length; i++) { content.append(arr[i]); } //sha1加密 String temp = getSha1(content.toString()); return temp.equals(signature); } public static String getSha1(String str){ if(str==null||str.length()==0){ 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 (Exception e) { // TODO: handle exception return null; } }}
MessageUtil
package com.jiuzhouchedai.util;public class MessageUtil { public static Map<String, String> xmlToMap(HttpServletRequest request) throws Exception{ Map<String, String> map=new HashMap<String, String>(); SAXReader reader=new SAXReader(); InputStream ins = request.getInputStream(); Document doc = reader.read(ins); Element root = doc.getRootElement(); List<Element> list = root.elements(); for (Element e : list) { map.put(e.getName(), e.getText()); } ins.close(); return map; } public static String textMessageToXml(TextMessage textMessage){ XStream stream=new XStream(); stream.alias("xml", textMessage.getClass()); return stream.toXML(textMessage); }}
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>weixintest</display-name> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>weixinServlet</servlet-name> <servlet-class>com.jiuzhouchedai.servlet.weixinServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>weixinServlet</servlet-name> <url-pattern>/wx.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list></web-app>
0 0
- 2.第一个小程序(微信公众号开发实战)
- 4.第二个小程序(微信公众号开发实战)
- 微信小程序实战(1)——微信公众平台小程序开放公测
- 3.消息类型(微信公众号开发实战)
- 6.图文回复(微信公众号开发实战)
- 微信公众号菜单添加小程序,miniprogram,pagepath参数详解,php开发公众号
- 微信公众号如何关联小程序(小程序如何开发)
- 小程序开发接口,微信公众平台开发地址
- 5.使用 公众平台测试账号 进行开发(微信公众号开发实战)
- 5.使用 公众平台测试账号 进行开发(微信公众号开发实战)
- 微信公众平台-小程序开发工具源码
- 微信公众号如何关联小程序-微信小程序开发-视频教程19
- 微信公众号及小程序开发使用weui无效解决方法
- 工程师教你如何快速开发微信公众号小程序
- 深入浅出微信公众平台实战开发(一)
- 微信公众平台应用开发实战
- 微信公众平台应用开发实战
- 微信公众平台应用开发实战
- ansys工作平面平移转动
- OpenCL实现序列卷积
- C. Polycarp at the Radio
- JAVA基本语法注意事项总结
- OJ-上海交大-1021. 从前有座山
- 2.第一个小程序(微信公众号开发实战)
- codeforces281CRectangle Puzzle+矩形旋转+面积交
- 289. Game of Life
- LayoutInflater的inflate()函数解释
- String类探讨
- c# windows小程序manager
- Manacher 模板 最长回文串
- 认识CSS样式(第三部分-盒子模型)
- Java与RabbitMQ(六)RabbitMQ几个重要的概念、术语详解