接入微信 使用 ngrok
http://knight-black-bob.iteye.com/blog/2244830
接受普通消息
源码下载 : http://download.csdn.net/download/knight_black_bob/9123671
WeichatServlet.java
package com.curiousby.cn; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.curiousby.cn.entity.TextMessage; import com.curiousby.cn.util.CommonUtils; import com.curiousby.cn.util.MessageUtil; import com.curiousby.cn.util.WeichatCheckUtils; /** * @author baoyou E-mail:curiousby@163.com * @version 创建时间:2015年9月20日 下午2:06:42 * des: */ public class WeichatServlet extends HttpServlet{ private static final long serialVersionUID = 1L; private String signature; //微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 private String timestamp; // 时间戳 private String nonce; //随机数 private String echostr; //随机字符串 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { signature = req.getParameter("signature"); timestamp = req.getParameter("timestamp"); nonce = req.getParameter("nonce"); echostr = req.getParameter("echostr"); System.out.println("signature timestamp nonce echostr " + signature +" " + timestamp +" " + nonce + " " + echostr ); PrintWriter out = resp.getWriter(); if (WeichatCheckUtils.checkSignature(signature, timestamp, nonce)) { out.print(echostr); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); resp.setCharacterEncoding("UTF-8"); PrintWriter out = resp.getWriter(); try { Map<String,String> map = MessageUtil.xmlToString(req); System.out.println(CommonUtils.mapToString(map)); String toUserName = map .get("ToUserName"); String fromUserName = map .get("FromUserName"); String createTime = map .get("CreateTime"); String msgType = map .get("MsgType"); String content = map .get("Content"); String msgId = map .get("MsgId"); String message =""; if ("text".equals(msgType)) { TextMessage text = new TextMessage(); text.setFromUserName(toUserName); text.setToUserName(fromUserName); text.setMsgType("text"); text.setCreateTime(new Date().getTime()); String recontent =""; try{ int aint = Integer.parseInt(content); recontent=" 您好,我是包包大人.\r\n 您发送的内容是 :"+(aint+1); }catch(Exception e){ recontent =" 您好,我是包包大人.\r\n 您发送的内容是 :"+content; } text.setContent(recontent); message = MessageUtil.textMessageToXml(text); } System.out.println(message); out.print(message); } catch (Exception e) { e.printStackTrace(); }finally{ out.close(); } } }
CommonUtils.java
package com.curiousby.cn.util; import java.util.Map; /** * @author baoyou E-mail:curiousby@163.com * @version 创建时间:2015年9月20日 下午2:24:27 * des: */ public class CommonUtils { public static String arrayToString (String [] arr){ StringBuffer sb = new StringBuffer(); for (int i = 0; i < arr.length; i++) { sb.append(arr[i]); } return sb.toString(); } public static String mapToString(Map<String,String> map){ StringBuffer sb = new StringBuffer(); sb.append("{"); for (String key : map.keySet() ) { sb.append(key+":"+map.get(key)+","); } sb.substring(0, sb.length()-1); sb.append("}"); return sb.toString(); } }
MessageUtil.java
package com.curiousby.cn.util; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import com.curiousby.cn.entity.TextMessage; import com.thoughtworks.xstream.XStream; /** * @author baoyou E-mail:curiousby@163.com * @version 创建时间:2015年9月20日 下午4:18:35 * des: */ public class MessageUtil { public static Map <String,String> xmlToString(HttpServletRequest request) throws Exception{ Map <String,String> map = new HashMap<String,String>(); SAXReader reader = new SAXReader(); InputStream is = request.getInputStream(); Document doc = reader.read(is); Element root = doc.getRootElement(); List<Element> llist = root.elements(); for (Element e : llist) { map.put(e.getName(), e.getText()); } is.close(); return map; } public static String textMessageToXml(TextMessage textMessage){ XStream xStream = new XStream(); xStream.alias("xml", textMessage.getClass()); return xStream.toXML(textMessage); } }
ShaUtils.java
package com.curiousby.cn.util; import java.security.MessageDigest; /** * @author baoyou E-mail:curiousby@163.com * @version 创建时间:2015年9月20日 下午2:36:04 * des: */ public class ShaUtils { private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; public static String getSha1(String str){ if (str == null || str.length() ==0) { return null; } try{ MessageDigest messageDigest = MessageDigest.getInstance("SHA1"); messageDigest.update(str.getBytes("UTF-8")); byte[] md = messageDigest.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++] =HEX_DIGITS[byte0 >>> 4 & 0xf ]; buf[k++] =HEX_DIGITS[byte0 & 0xf ]; } System.out.println(" before sha1 str :"+ str +"\r\n after sha1 string : "+new String(buf)); return new String(buf); }catch(Exception e){ return null; } } }
WeichatCheckUtils.java
package com.curiousby.cn.util; import java.util.Arrays; /** * @author baoyou E-mail:curiousby@163.com * @version 创建时间:2015年9月20日 下午2:14:46 * des: */ public class WeichatCheckUtils { private static final String TOKEN ="xxxxxx"; public static boolean checkSignature(String signature, String timestamp,String nonce){ String[] str = { TOKEN, timestamp, nonce }; Arrays.sort(str); // 字典序排序 String string = CommonUtils.arrayToString(str); String temp = ShaUtils.getSha1(string); return temp.equals(signature); } }
web.xml
<servlet> <servlet-name>weichatServlet</servlet-name> <servlet-class>com.curiousby.cn.WeichatServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>weichatServlet</servlet-name> <url-pattern>/weichat.do</url-pattern> </servlet-mapping>
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!
相关推荐
微信 开发 接受 普通 消息 http://knight-black-bob.iteye.com/blog/2244830 http://knight-black-bob.iteye.com/blog/2244839
微信开发-接收普通消息.pdf 微信开发-接收事件推送和语音识别结果.pdf 微信开发-交通查询功能实现.pdf 微信开发-快递查询功能-编码实操 - 副本.pdf 微信开发-新浪云的创建.pdf 微信开发-用户分组管理.pdf 微信...
微信公众帐号开发教程第 2 篇-微信公众帐号的类型(普通和会议).. 3 微信公众帐号开发教程第 3 篇-开发模式启用及接口配置.. 7 微信公众帐号开发教程第 4 篇-消息及消息处理工具的封装. 17 微信公众帐号开发教程第 ...
附件包含个人亲测的,企业微信和钉钉向普通用户发送消息的案例,个人研究几天,发出来希望帮助需要的人 有问题可邮箱492597119@qq.com
微信开发学习总结(三)——消息管理(2)-接受普通消息和被动回复用户消息——项目源码; 博客:微信开发学习总结(三)——消息管理(2)-接受普通消息和被动回复用户消息; ...
当普通微信用户向公众号发送消息或者与微信公众号进行互动触发某些事件时,微信服务器将会把这些消息或者事件以XML数据包格式POST到开发者在微信公众号管理平台中配置的服务器地址URL上,本工程对消息与事件处理进行...
微信开发学习总结(三)——消息管理—接收普通消息—(1)文本消息——项目源码; 参考博客: https://blog.csdn.net/qq_29914837/article/details/82903594
微信小程序开发环境的搭建是很简单的 首先我们需要是登录微信公众平台 微信公众平台 点击右上角立即注册 注册账号类型选择小程序 进入注册界面后按提示完成账号信息 邮箱激活 信息登记 注册完成后界面如下,点击...
当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上,着手开发之前先行阅读微信公众平台接收普通消息微信开发文档,对微信的这种消息处理机制有一定了解之后再着手开发(微信...
2. 微信公众帐号开发教程第2篇-微信公众帐号的类型(普通和会议) 3. 微信公众帐号开发教程第3篇-开发模式启用及接口配置 . 微信公众帐号开发教程第5篇-各种消息的接收与响应 6. 微信公众帐号开发教程第6篇-文本...
当用户和公众号产生特定动作的交互时(具体动作列表请见下方说明),微信将会把消息数据推送给开发者,开发者可以在一段时间内(目前修改为48小时)调用客服接口,通过POST一个JSON数据包来发送消息给普通用户。...
配置普通链接二维码规则 (此图片来源于网络,如有侵权,请联系删除! ) 生成二维码 访问https://cli.im/url,将https://test.com/linkcode?id=1_2生成二维码图片 小程序接收参数 if(option.q){ console.log...
小易Smalle博文微信公众平台开发【接收消息】接收普通消息http://blog.csdn.net/oldinaction/article/details/48000583所用示例源代码
该例子仅简单的对微信服务器验证和用户信息的自动回复做了处理,为初学者在怎样开始微信公众平台的开发毫无头绪的时候提供一点儿帮助. 本例子使用了.net4.0框架,直接用VS2010打开网站,找到该文件夹,打开即可. 将...
主要介绍了Java开发微信公众号接收和被动回复普通消息的相关资料,需要的朋友可以参考下
微信将会把消息数据推送给开发者,开发者在一段时间内(目前修改为48小时)可以调用客服消息接口,通过POST一个JSON数据包来发送消息给普通用户,在48小时内不限制发送次数。此接口主要用于客服等有人工消息处理环节...
微信公众帐号开发教程第2 篇-微信公众帐号的类型(普通和会议) 微信公众帐号开发教程第3 篇-开发模式启用及接口配置 微信公众帐号开发教程第4 篇-消息及消息处理工具的封装 微信公众帐号开发教程第5 篇-各种消息的...
经过这3个公众帐号的开发,对目前微信公众平台开放的api算是比较熟悉了,像文本消息、图文消息、音乐消息、语音消息、位置消息等全部用到过,菜单也使用过。所以,就有了写微信公众帐号开发教程的想法,将学习到的...
微信开发token验证文件。可以通过这个文件验证通过微信开发者平台的验证。
Yii-wechat 是基于 Yii2 实现的微信模块, 集成微信模拟器、多公众号管理、扩展开发接口,只需关注功能,微信开发的强劲引擎.注意如果是全新使用Yii2和Yii2-wechat,你可以使用 Yii2-app-wechat 微信应用模板(可在该模板...