您的位置:首页 > 移动开发 > 微信开发

微信公众号开发<关键字匹配回复随机内容>

2017-08-05 18:14 239 查看
最后我实现的功能是用户回复公众号电影名称,公众号自动回复网盘链接,回复“美女”“搞笑”等关键词自动回复随机一张类别图片

1.公众号配置好开发地址

/**
* 接入微信
*
* @param request  request
* @param response response
* @throws IOException IOException
*/
@RequestMapping(value = "/wechatconnect")
@ResponseBody
public void wechatconnect(HttpServletRequest request,
HttpServletResponse response) throws IOException {
// 将请求、响应的编码均设置为UTF-8(防止中文乱码)
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
boolean isGet = request.getMethod().toLowerCase().equals("get");
PrintWriter out = response.getWriter();
try {
if (isGet) {
String signature = request.getParameter("signature");// 微信加密签名
String timestamp = request.getParameter("timestamp");// 时间戳
String nonce = request.getParameter("nonce");// 随机数
String echostr = request.getParameter("echostr");//随机字符串

// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
if (SignUtil.checkSignature(signature, timestamp, nonce)) {
logger.info("Connect the weixin server is successful.");
response.getWriter().write(echostr);
} else {
logger.error("Failed to verify the signature!");
}
} else {
String respMessage = "异常消息!";

try {
respMessage = weixinPost(request);
out.write(respMessage);
logger.info("The request completed successfully");
logger.info("to weixin server " + respMessage);
} catch (Exception e) {
e.printStackTrace();
logger.error("Failed to convert the message from weixin!");
}
}
} catch (Exception e) {
logger.error("Connect the weixin server is error.");
} finally {
out.close();
}
}


然后做关键词匹配的功能,用户给公众号发送的消息都会通过腾讯request请求到你配置的开发者地址上,然后就是实现自己的逻辑,包括自动回复相关内容;

public String weixinPost(HttpServletRequest request) {
String respMessage = null;
try {

// xml请求解析
Map<String, String> requestMap = MessageUtil.xmlToMap(request);

// 发送方帐号(open_id)
String fromUserName = requestMap.get("FromUserName");
// 公众帐号
String toUserName = requestMap.get("ToUserName");
// 消息类型
String msgType = requestMap.get("MsgType");
// 消息内容
String content = requestMap.get("Content");

logger.info("---------------FromUserName is:" + fromUserName + ", ToUserName is:" + toUserName + ", MsgType is:" + msgType + content);

// 文本消息
if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
//这里根据关键字执行相应的逻辑,只有你想不到的,没有做不到的
PicturePool pp = wechatResourceService.selectPictureWechat(content);
MoviePool mp = wechatResourceService.selectMovieWechat(content);
if (pp != null) {
//自动回复图片
ImgMessage imgMessage = new ImgMessage();
WechatPicture wechatPicture = wechatResourceService.getPicture(pp.getId());
Image image = new Image();
image.setMediaId(wechatPicture.getMedia_id());
imgMessage.setImage(image);
imgMessage.setToUserName(fromUserName);
imgMessage.setFromUserName(toUserName);
imgMessage.setCreateTime(new Date().getTime());
imgMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_IMAGE);
respMessage = MessageUtil.imgMessageToXml(imgMessage);
} else if (mp != null) {
//自动回复
TextMessage text = new TextMessage();
text.setContent(mp.getAddress());
text.setToUserName(fromUserName);
text.setFromUserName(toUserName);
text.setCreateTime(new Date().getTime());
text.setMsgType(msgType);
respMessage = MessageUtil.textMessageToXml(text);
} else {
TextMessage text = new TextMessage();
text.setContent("亲,关键词匹配不上呢,请检查一下是否有同音字吧~\n" +
"回复“美女”“男神”“海报”“搞笑”等命令,可以获得相对应的精美图片。\n" +
"回复“电影”或者您想看的电影名称,即可得到在线观看的网址或云盘资源的链接。\n");
text<
b3e8
span class="hljs-preprocessor">.setToUserName(fromUserName);
text.setFromUserName(toUserName);
text.setCreateTime(new Date().getTime());
text.setMsgType(msgType);
respMessage = MessageUtil.textMessageToXml(text);
}
} else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {// 事件推送
String eventType = requestMap.get("Event");// 事件类型

if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {// 订阅
TextMessage text = new TextMessage();
text.setContent("客官,您来啦~\n" +
"\n" +
"回复“美女”“男神”“海报”“搞笑”等命令,可以获得相对应的精美图片。\n" +
"回复“电影”或者您想看的电影名称,即可得到在线观看的网址或云盘资源的链接。\n" +
"小编今日推荐:\n" +
"菊豆\n" +
"色戒\n" +
"春光乍泄\n" +
"苹果\n" +
"生于妓院\n" +
"(直接回复电影名称即可)");
text.setToUserName(fromUserName);
text.setFromUserName(toUserName);
text.setCreateTime(new Date().getTime());
text.setMsgType(msgType);
respMessage = MessageUtil.textMessageToXml(text);
} else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {// 自定义菜单点击事件
String eventKey = requestMap.get("EventKey");// 事件KEY值,与创建自定义菜单时指定的KEY值对应
logger.info("eventKey is:" + eventKey);
if (eventKey.equals("zhaodianying")) {
TextMessage text = new TextMessage();
text.setContent("回复“电影” 或 直接回复电影名称,小编就会很快回复您观看网址噢。\n" +
"回复“美女”“男神”“海报”“搞笑”等命令,可以获得相对应类型的精美图片。\n" +
"您还可以添加客服微信:girlnevercryy进入“逗芽电影福利红包群”,各种福利,任性红包满天飞~~~");
text.setToUserName(fromUserName);
text.setFromUserName(toUserName);
text.setCreateTime(new Date().getTime());
text.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
respMessage = MessageUtil.textMessageToXml(text);
}
if (eventKey.equals("qiuziyuan")) {
TextMessage text = new TextMessage();
text.setContent("如果亲没有找到自己中意的电影资源,请添加客服微信:jfwx-hrd 把想要的电影资源名称留言给小编,小编就会立刻马不停蹄的免费去帮您找噢~\n");
text.setToUserName(fromUserName);
text.setFromUserName(toUserName);
text.setCreateTime(new Date().getTime());
text.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
respMessage = MessageUtil.textMessageToXml(text);
}
}
}
} catch (Exception e) {
logger.error("error......");
e.printStackTrace();
}
return respMessage;


最终实现效果如图所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息