一、什么是微信公众账号
如下面图所示,展示了一个微信公众账号。
二、开发原理
我们所要做的主要工作为:解码 -> 实现自己的业务 -> 编码后返回结果。很简单的一个流程。
三、账号申请与配置
账号申请
申请不多说了。地址:https://mp.weixin.qq.com
配置
主要配置三个信息:URL、Token、EncodingAESKey。
URL :微信服务器收到消息将会推送到此URL
Token:任意填写,用于验证消息是否来自微信服务器
EncodingAESKey:用作消息体加解密密钥
四、开发一个简单的程序
get:微信服务器会先get消息进行确认。
加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识
该请求来源于微信
4.成功原样返回参数中的echostr
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 (true) {
out.print(echostr);
}
out.close();
out = null;
}
post:get确认成功后,post推送用户消息。
根据用户消息处理业务并返回回复消息
/**
* 处理微信服务器发来的消息
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String respMessage = RequestManager.processRequest(request);
// 响应消息
PrintWriter out = response.getWriter();
out.print(respMessage);
out.close();
}
public static String processRequest(HttpServletRequest request) {
String respMessage = "出错鸟!";
try {
Map<String, String> requestMap = MessageUtil.parseXml(request); //这里解析
String fromUserName = requestMap.get("FromUserName");
String toUserName = requestMap.get("ToUserName");
String msgType = requestMap.get("MsgType");
TextMessage txtMsg = new TextMessage("呵呵!");
txtMsg.setToUserName(fromUserName);
txtMsg.setFromUserName(toUserName);
txtMsg.setCreateTime(new Date().getTime());
txtMsg.setFuncFlag(0);
respMessage = txtMsg.toXml(); //这里转换格式返回给微信服务器 具体做法都很简单
} catch (Exception e) {
e.printStackTrace();
}
return respMessage;
}
开发者文档
更多详细信息可以参考官方文档:http://mp.weixin.qq.com/wiki/index.php
五:最后
主要是把简单流程给大家介绍了一下。希望大家有个基本了解。具体细节可以参考官方开发文档。
大家不要把开发想的太复杂。有好的点子才更重要。
希望多多支持。
有不足之处和不正确的地方希望斧正!
示例微信公众账号:mmcxzs