版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w_t_y_y/article/details/86692907
前面的博客已经可以接受消息了,现在实现互动,给用户发送各种消息。
一、普通消息:如现在把普通用户发送的消息原样返回发送给用户。只需要把touser和fromuser反过来就可以了。
1、文本消息:MsgType值为text:
if("text".equals(type)){
String toUserName = reqMsg.getToUserName();
reqMsg.setFromUserName(toUserName);
reqMsg.setMsgType("text");
reqMsg.setToUserName(fromUserName);
}
此时完整的handleMessage处理消息代码为:
/**
* 处理微信消息
* @param request request
* @param reqMsg 请求消息
* @param respMsg 回复消息
* @param remoteIp remoteIp
*/
private void handleMessage(HttpServletRequest request, WechatMsg reqMsg, String remoteIp){
String type = reqMsg.getMsgType();
String fromUserName = reqMsg.getFromUserName();
String event = reqMsg.getEvent();
String eventKey = reqMsg.getEventKey();
//event事件开始
if(type.equals("event")){
//关注事件
if("subscribe".equals(event)){
WechatUser dbWechatUser = wechatUserService.getByOpenId(fromUserName);
if(dbWechatUser == null){
//还没有关注过
System.out.println("还没有关注过");
WechatUser wechatUser = new WechatUser();
wechatUser.setCreateTime(new Date());
wechatUser.setIsDelete(false);
wechatUser.setUpdateTime(new Date());
wechatUser.setUserOpenId(fromUserName);
wechatUserService.insert(wechatUser);
}
}
//取消关注事件
if("unsubscribe".equals(event)){
WechatUser dbWechatUser = wechatUserService.getByOpenId(fromUserName);
wechatUserService.delete(dbWechatUser);
}
//扫描带参数二维码关注事件(scene_id)
if("subscribe".equals(event) && eventKey.startsWith("qrscene_")){
//去掉前缀
Long key = Long.valueOf(eventKey.replace("qrscene_", ""));
if(sceneId == key || sceneId.equals(key)){
System.out.println("扫描带参数二维码关注");
QrCodeUser dbQrCodeUser = qrCodeUserService.getByOpenId(fromUserName);
if(dbQrCodeUser == null){
//还没有记录过
QrCodeUser qrCodeUser = new QrCodeUser();
qrCodeUser.setCreateTime(new Date());
qrCodeUser.setIsDelete(false);
qrCodeUser.setOpenId(fromUserName);
qrCodeUser.setSceneId(String.valueOf(sceneId));
qrCodeUser.setUpdateTime(new Date());
qrCodeUserService.insert(qrCodeUser);
}
}
}
//扫描带参数二维码浏览(已关注)事件(scene_id)
if("SCAN".equals(event)){
Long key = Long.valueOf(eventKey);
if(sceneId == key || sceneId.equals(key)){
System.out.println(fromUserName+"扫描带参数二维码已经关注");
}
}
/*//扫描带参数二维码关注事件(scene_str)
if("subscribe".equals(event) && eventKey.startsWith("qrscene_")){
//去掉前缀
String key = eventKey.replace("qrscene_", "");
if(scendStr.equals(key)){
System.out.println("扫描带参数二维码关注(scene_str)");
QrCodeUser dbQrCodeUser = qrCodeUserService.getByOpenId(fromUserName);
if(dbQrCodeUser == null){
//还没有记录过
QrCodeUser qrCodeUser = new QrCodeUser();
qrCodeUser.setCreateTime(new Date());
qrCodeUser.setIsDelete(false);
qrCodeUser.setOpenId(fromUserName);
qrCodeUser.setSceneId(String.valueOf(sceneId));
qrCodeUser.setUpdateTime(new Date());
qrCodeUserService.insert(qrCodeUser);
}
}
}
//扫描带参数二维码浏览(已关注)事件(scene_str)
if("SCAN".equals(event)){
if(scendStr.equals(eventKey)){
System.out.println(fromUserName+"扫描带参数二维码已经关注(scene_str)");
}
}*/
}
//event事件结束
//text事件开始
if("text".equals(type)){
String toUserName = reqMsg.getToUserName();
reqMsg.setFromUserName(toUserName);
reqMsg.setMsgType("text");
reqMsg.setToUserName(fromUserName);
}
}
测试,发送文本消息正常回复,发送图片,会出现异常。下面实现图片回复功能。
2、图片消息: