流程图
代码实现
封装各种消息的属性
响应消息基类
package com.gzc.weixin.message.response;
/**
*
* @Description: 响应消息基类(公众账号→普通用户)
* @Parameters:
* @Return:
* @Create Date:
* @Version: V1.00
* @author: 来日可期
*/
public class BaseMessage {
//接收方账号(收到的OpenID)
private String ToUserName;
//开发者微信号
private String FromUserName;
//消息创建时间(整型)
private long CreateTime;
//消息类型(text/music/news)
private String MsgType;
//星标刚收到的消息
private int FuncFlag;
public String getToUserName() {
return ToUserName;
}
public void setToUserName(String toUserName) {
ToUserName = toUserName;
}
public String getFromUserName() {
return FromUserName;
}
public void setFromUserName(String fromUserName) {
FromUserName = fromUserName;
}
public long getCreateTime() {
return CreateTime;
}
public void setCreateTime(long createTime) {
CreateTime = createTime;
}
public String getMsgType() {
return MsgType;
}
public void setMsgType(String msgType) {
MsgType = msgType;
}
public int getFuncFlag() {
return FuncFlag;
}
public void setFuncFlag(int funcFlag) {
FuncFlag = funcFlag;
}
}
图片消息
package com.gzc.weixin.message.response;
import com.gzc.weixin.message.Image;
/**
*
* @Description: 图片消息
* @Parameters:
* @Return:
* @Create Date:
* @Version: V1.00
* @author: 来日可期
*/
public class ImageMessage extends BaseMessage{
private Image image;
public Image getImage() {
return image;
}
public void setImage(Image image) {
this.image = image;
}
}
package com.gzc.weixin.message;
/**
*
* @Description: 图片model
* @Parameters:
* @Return:
* @Create Date:
* @Version: V1.00
* @author: 来日可期
*/
public class Image {
//媒体文件ID
private String MediaId;
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
}
音乐消息
package com.gzc.weixin.message.response;
import com.gzc.weixin.message.Music;
/**
*
* @Description: 音乐消息
* @Parameters:
* @Return:
* @Create Date:
* @Version: V1.00
* @author:来日可期
*/
public class MusicMessage extends BaseMessage{
//音乐
private Music music;
public Music getMusic() {
return music;
}
public void setMusic(Music music) {
this.music = music;
}
}
package com.gzc.weixin.message;
/**
*
* @Description: 音乐model
* @Parameters:
* @Return:
* @Create Date:
* @Version: V1.00
* @author:来日可期
*/
public class Music {
//音乐标题
private String Title;
//音乐描述
private String Description;
//音乐链接
private String MusicUrl;
//高品质音乐链接,Wi-Fi环境优先使用该链接播放音乐
private String HQMusicUrl;
//缩略图的媒体ID,通过上传多媒体文件得到的ID
private String ThumbMediaId;
public String getTitle() {
return Title;
}
public void setTitle(String title) {
Title = title;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
public String getMusicUrl() {
return MusicUrl;
}
public void setMusicUrl(String musicUrl) {
MusicUrl = musicUrl;
}
public String getHQMusicUrl() {
return HQMusicUrl;
}
public void setHQMusicUrl(String hQMusicUrl) {
HQMusicUrl = hQMusicUrl;
}
public String getThumbMediaId() {
return ThumbMediaId;
}
public void setThumbMediaId(String thumbMediaId) {
ThumbMediaId = thumbMediaId;
}
}
图文消息
package com.gzc.weixin.message.response;
import java.util.List;
import com.gzc.weixin.message.Article;
/**
*
* @Description: 图文消息
* @Parameters:
* @Return:
* @Create Date:
* @Version: V1.00
* @author: 来日可期
*/
public class NewsMessage extends BaseMessage{
//图文消息个数,限制为10条以内
private int ArticleCount;
//多条图文消息信息,默认第一个item为大图
private List<Article> Articles;
public int getArticleCount() {
return ArticleCount;
}
public void setArticleCount(int articleCount) {
ArticleCount = articleCount;
}
public List<Article> getArticles() {
return Articles;
}
public void setArticles(List<Article> articles) {
Articles = articles;
}
}
package com.gzc.weixin.message;
/**
*
* @Description: 图文model
* @Parameters:
* @Return:
* @Create Date:
* @Version: V1.00
* @author: 来日可期
*/
public class Article {
//图文消息名称
private String Title;
//图文消息描述
private String Description;
//图片链接,支持JPG、PNG格式,较好的效果为大图640像素*320像素,小图80像素*80像素
private String PicUrl;
//点击图文消息跳转链接
private String Url;
public String getTitle() {
return Title;
}
public void setTitle(String title) {
Title = title;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
public String getPicUrl() {
return PicUrl;
}
public void setPicUrl(String picUrl) {
PicUrl = picUrl;
}
public String getUrl() {
return Url;
}
public void setUrl(String url) {
Url = url;
}
}
文本消息
package com.gzc.weixin.message.response;
/**
*
* @Description: 文本消息
* @Parameters:
* @Return:
* @Create Date:
* @Version: V1.00
* @author: 来日可期
*/
public class TextMessage extends BaseMessage{
//回复的消息内容
private String Content;
public String getContent() {
return Content;
}
public void setContent(String content) {
Content = content;
}
}
视频
package com.gzc.weixin.message.response;
import com.gzc.weixin.message.Video;
/**
*
* @Description:视频
* @Parameters:
* @Return:
* @Create Date:
* @Version: V1.00
* @author: 来日可期
*/
public class VideoMessage extends BaseMessage{
private Video video;
public Video getVideo() {
return video;
}
public void setVideo(Video video) {
this.video = video;
}
}
package com.gzc.weixin.message;
/**
*
* @Description: 视频model
* @Parameters:
* @Return:
* @Create Date:
* @Version: V1.00
* @author: 来日可期
*/
public class Video {
//媒体文件ID
private String MediaId;
//视频消息缩略图的媒体ID
private String ThumbMediaId;
public String getMediaId() {
return MediaId;
}
public void setMediaId(String mediaId) {
MediaId = mediaId;
}
public String getThumbMediaId() {
return ThumbMediaId;
}
public void setThumbMediaId(String thumbMediaId) {
ThumbMediaId = thumbMediaId;
}
}
语音消息
package com.gzc.weixin.message.response;
import com.gzc.weixin.message.Voice;
/**
*
* @Description: 语音消息
* @Parameters:
* @Return:
* @Create Date:
* @Version: V1.00
* @author: 来日可期
*/
public class VoiceMessage extends BaseMessage{
private Voice voice;
public Voice getVoice() {
return voice;
}
public void setVoice(Voice voice) {
this.voice = voice;
}
}
package com.gzc.weixin.message;
/**
*
* @Description: 语音model
* @Parameters:
* @Return:
* @Create Date:
* @Version: V1.00
* @author: 来日可期
*/
public class Voice {
//语音消息媒体ID
private String mediaId;
public String getMediaId() {
return mediaId;
}
public void setMediaId(String mediaId) {
this.mediaId = mediaId;
}
}
将关注回复消息等写成方法
/**
* 微信消息处理,将关注回复消息等写成方法
*/
package com.b505.weixin.util;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.b505.Message.model.Article;
import com.b505.config.WebConfigBean;
import com.b505.service.UserService;
import com.b505.tool.EncodeUTF8;
import com.b505.weixin.message.resp.NewsMessage;
import com.b505.weixin.message.resp.TextMessage;
import com.b505.weixin.pojo.WeixinMessageInfo;
/**
* <p>Company: B505信息技术研究所 </p>
* @Description: 封装微信回复消息,各种回复消息对应不同的方法
* @Create Date: 2017年10月23日上午11:33:36
* @Version: V1.00
* @Author:来日可期
*/
@Component
public class WeixinMessageModelUtil {
@Autowired
private WeixinMessageUtil weixinMessageUtil;
@Autowired
private WebConfigBean webConfigBean;
@Autowired
private UserService userService;
@Autowired
private EncodeUTF8 encodeUT8;
/**
* @Description: 当系统出错时,默认回复的文本消息
* @Parameters: WeixinMessageModelUtil
* @Return: 系统出错回复的消息
* @Create Date: 2017年10月23日上午11:55:17
* @Version: V1.00
* @author:来日可期
*/
public String systemErrorResponseMessageModel(WeixinMessageInfo weixinMessageInfo ){
// 回复文本消息
TextMessage textMessage = new TextMessage();
textMessage.setToUserName(weixinMessageInfo.getFromUserName());
textMessage.setFromUserName(weixinMessageInfo.getToUserName());
textMessage.setCreateTime(new Date().getTime());
textMessage.setMsgType(weixinMessageUtil.RESP_MESSAGE_TYPE_TEXT);
textMessage.setFuncFlag(0);
textMessage.setContent("系统出错啦,请稍后再试");
return weixinMessageUtil.textMessageToXml(textMessage);
}
/**
* @Description: 用户关注时发送的图文消息
* @Parameters: WeixinMessageModelUtil
* @Return: 用户关注后发送的提示绑定用户的图文消息
* @Create Date: 2017年10月23日下午2:01:34
* @Version: V1.00
* @author:来日可期
*/
public String followResponseMessageModel(WeixinMessageInfo weixinMessageInfo){
// 关注时发送图文消息
NewsMessage newsMessage = new NewsMessage();
newsMessage.setToUserName(weixinMessageInfo.getFromUserName());
newsMessage.setFromUserName(weixinMessageInfo.getToUserName());
newsMessage.setCreateTime(new Date().getTime());
newsMessage.setMsgType(weixinMessageUtil.RESP_MESSAGE_TYPE_NEWS);
newsMessage.setFuncFlag(0);
// 图文消息
List<Article> articleList=new ArrayList<Article>();
Article article = new Article();
// 设置图文消息的标题
String string = "尊敬的用户,欢迎关注国家纤维局会议系统,点击查看会议。";
article.setTitle(string);
article.setPicUrl(webConfigBean.getWeixinPicture()+"meetingLogo2.png");
article.setUrl(webConfigBean.getDoMainNameurl()+"/WeixinParticipantFouce");
articleList.add(article);
newsMessage.setArticleCount(articleList.size());
newsMessage.setArticles(articleList);
return weixinMessageUtil.newsMessageToXml(newsMessage);
}
/**
* @Description: 用户取消关注,先判断用户是否绑定,如果已经绑定则解除绑定
* @Parameters: WeixinMessageModelUtil
* @Return: void
* @Create Date: 2017年11月20日上午10:54:26
* @Version: V1.00
* @author:来日可期
*/
public void cancelAttention(String fromUserName){
if (userService.isAlreadyBinding(fromUserName)) {
userService.userUnbinding(fromUserName);
}else {
System.out.println("取消关注用户{}"+fromUserName+"还未绑定");
}
}
}