微信公共平台所有接口的SDK封装 java版本,你可以使用SDK简单快速开发微信公众账号。
只需三步就可以完成微信消息和一些事件的处理。
目前已经有两家 世界五百强 在使用该sdk
有问题可加群讨论
QQ群:313456207
1、配置微信服务号的token,修改配置文件wechat.properties
参数名 参数意思
token Token, 与接口配置信息中的Token要一致
appid 第三方用户唯一凭证
appSecret 第三方用户唯一凭证密钥
2、建立于微信交互的请求servlet:
/**
* 处理微信请求servlet
* @author caspar.chen
* @version 1.0
*
*/
public class WeChatServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 随机字符串
String echostr = request.getParameter("echostr");
PrintWriter out = null;
try {
out = response.getWriter();
// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,否则接入失败
if (SignService.checkSignature(request)) {
out.print(echostr);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
out.close();
out = null;
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setCharacterEncoding("UTF-8");
// 调用核心业务类接收消息、处理消息
String respMessage = CoreService.processWebchatRequest(request);
// 响应消息
PrintWriter out = null;
try {
out = response.getWriter();
out.print(respMessage);
} catch (IOException e) {
e.printStackTrace();
} finally {
out.close();
out = null;
}
}
}
3、创建处理消息的业务逻辑类
/**
* 处理微信发来的请求
*
* @param request
* @return String
*/
public static String processWebchatRequest(HttpServletRequest request) {
String respMessage = null;
try {
// xml请求解析
Map<String, String> requestMap = MessageUtil.parseXml(request);
// 消息类型
String msgType = requestMap.get("MsgType");
TextMessage textMessage = (TextMessage) MessageService
.bulidBaseMessage(requestMap,
ConstantWeChat.RESP_MESSAGE_TYPE_TEXT);
NewsMessage newsMessage = (NewsMessage) MessageService
.bulidBaseMessage(requestMap,
ConstantWeChat.RESP_MESSAGE_TYPE_NEWS);
String respContent = "";
// 文本消息
if (msgType.equals(ConstantWeChat.REQ_MESSAGE_TYPE_TEXT)) {
// 接收用户发送的文本消息内容
String content = requestMap.get("Content");
List<Article> articleList = new ArrayList<Article>();
// 单图文消息
if ("1".equals(content)) {
Article article = new Article();
article.setTitle("测试TITLE");
article.setDescription("测试Description");
article.setPicUrl("图片地址");
article.setUrl("http://m.baidu.com");
articleList.add(article);
// 设置图文消息个数
newsMessage.setArticleCount(articleList.size());
// 设置图文消息包含的图文集合
newsMessage.setArticles(articleList);
// 将图文消息对象转换成xml字符串
respMessage = MessageService.bulidSendMessage(newsMessage,
ConstantWeChat.RESP_MESSAGE_TYPE_NEWS);
} else if ("#".equals(content)) {
textMessage.setContent("###");
respMessage = MessageService.bulidSendMessage(textMessage,
ConstantWeChat.RESP_MESSAGE_TYPE_TEXT);
}
} else if (msgType.equals(ConstantWeChat.REQ_MESSAGE_TYPE_EVENT)) {
// 事件类型
String eventType = requestMap.get("Event");
if (eventType.equals(ConstantWeChat.EVENT_TYPE_SUBSCRIBE)) {
// 关注
respContent = "感谢您关注偶,这里会给您提供最新的公司资讯和公告!\n";
} else if (eventType
.equals(ConstantWeChat.EVENT_TYPE_UNSUBSCRIBE)) {
// 取消关注,用户接受不到我们发送的消息了,可以在这里记录用户取消关注的日志信息
} else if (eventType.equals(ConstantWeChat.EVENT_TYPE_CLICK)) {
// 事件KEY值,与创建自定义菜单时指定的KEY值对应
String eventKey = requestMap.get("EventKey");
// 自定义菜单点击事件
if (eventKey.equals("11")) {
respContent = "天气预报菜单项被点击!";
} else if (eventKey.equals("12")) {
respContent = "公交查询菜单项被点击!";
}
}
textMessage.setContent(respContent);
respMessage = MessageService.bulidSendMessage(textMessage,
ConstantWeChat.RESP_MESSAGE_TYPE_TEXT);
}
} catch (Exception e) {
e.printStackTrace();
}
return respMessage;
}