首页 > 代码库 > 微信公众平台开发(3)-回复消息

微信公众平台开发(3)-回复消息

一、回复文本消息
二、回复链接消息
三、回复音乐消息
四、回复图文消息
五、事件-订阅
六、事件-取消订阅
PS:当然还包括表情。参考:http://www.360doc.com/content/13/0803/13/13350344_304465190.shtml
完整代码:
微信接口配置的回调地址对应的Controller

 

import org.apache.commons.lang.StringUtils;  import org.apache.log4j.Logger;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.stereotype.Controller;  import org.springframework.web.bind.annotation.RequestMapping;  import org.springframework.web.bind.annotation.RequestMethod;      import com.company.project.service.WeixinService;  import com.company.project.util.Util;      import javacommon.base.BaseRestSpringController;      @Controller  @RequestMapping("/wxapi")  public class WeixinApiController extends BaseRestSpringController<Object, java.lang.Long>{  public static final Logger log = Logger.getLogger(WeixinApiController.class);  public static final String WX_TOKEN = "weixin";  @Autowired  private WeixinService wxService;  /** * 微信回调地址 * * @author qincd * @throws IOException  * @date Nov 3, 2014 4:01:42 PM */  @RequestMapping(method=RequestMethod.GET)  public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException {  // 微信会在配置的回调地址上加上signature,nonce,timestamp,echostr4个参数  String signature = request.getParameter("signature");  String timestamp = request.getParameter("timestamp");  String nonce = request.getParameter("nonce");  String echostr = request.getParameter("echostr");    log.info("微信传递的参数:");  log.info("signature:"+signature);  log.info("timestamp:"+timestamp);  log.info("nonce:"+nonce);  log.info("echostr:"+echostr);    if (StringUtils.isEmpty(signature)) {  return;  }  // 1).排序  String sortString = sort(WX_TOKEN, timestamp, nonce);  // 2).加密  String mytoken = Util.sha1(sortString);  // 3).校验签名  if (StringUtils.isNotEmpty(mytoken) && mytoken.equals(signature)) {  log.info("签名校验通过。");  response.getWriter().println(echostr);  }  else {  log.warn("签名校验失败。");  }  }    @RequestMapping(method=RequestMethod.POST)  public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException {  // 处理请求、响应  request.setCharacterEncoding("utf-8");  response.setCharacterEncoding("utf-8");  String message = wxService.processRequest(request);  response.getWriter().println(message);  }    /** * 将token,timestamp,nonce按字典序排序,并返回拼接的字符串 * * @author qincd * @date Nov 3, 2014 4:09:43 PM */  public static String sort(String token,String timestamp,String nonce) {  String[] strArray = {token,timestamp,nonce};  Arrays.sort(strArray);    StringBuilder sbuilder = new StringBuilder();  for (String str : strArray) {  sbuilder.append(str);  }    return sbuilder.toString();  }      }      import java.util.ArrayList;  import java.util.List;  import java.util.Map;      import javax.servlet.http.HttpServletRequest;      import org.apache.log4j.Logger;  import org.springframework.stereotype.Service;      import com.company.project.model.resp.Articles;  import com.company.project.model.resp.Music;  import com.company.project.model.resp.MusicMessage;  import com.company.project.model.resp.NewsMessage;  import com.company.project.model.resp.TextMessage;  import com.company.project.util.MessageUtil;      @Service  public class WeixinService {  public static Logger log = Logger.getLogger(WeixinService.class);    public String processRequest(HttpServletRequest req) {  // 解析微信传递的参数  String str = null;  try {  Map<String,String> xmlMap = MessageUtil.parseXml(req);  str = "请求处理异常,请稍后再试!";    String ToUserName = xmlMap.get("ToUserName");  String FromUserName = xmlMap.get("FromUserName");  String MsgType = xmlMap.get("MsgType");    if (MsgType.equals(MessageUtil.MESSAGG_TYPE_TEXT)) {  // 用户发送的文本消息  String content = xmlMap.get("Content");  log.info("用户:[" + FromUserName + "]发送的文本消息:" + content);    // 链接  if (content.contains("csdn")) {  TextMessage tm = new TextMessage();  tm.setToUserName(FromUserName);  tm.setFromUserName(ToUserName);  tm.setMsgType(MessageUtil.MESSAGG_TYPE_TEXT);  tm.setCreateTime(System.currentTimeMillis());  tm.setContent("我的CSDN博客:<a href=http://www.mamicode.com/"http://my.csdn.net/qincidong\">我的CSDN博客</a>\n");  return MessageUtil.textMessageToXml(tm);  }    if (content.contains("图文")) {  NewsMessage nm = new NewsMessage();  nm.setFromUserName(ToUserName);  nm.setToUserName(FromUserName);  nm.setCreateTime(System.currentTimeMillis());  nm.setMsgType(MessageUtil.MESSAGG_TYPE_NEWS);  List<Articles> articles = new ArrayList<Articles>();  Articles e1 = new Articles();  e1.setTitle("马云接受外媒专访:中国的五大银行想杀了“我”");  e1.setDescription("阿里巴巴集团上市大获成功,《华尔街日报》日前就阿里巴巴集团、支付宝等话题采访了马云,马云也谈到了与苹果Apple Pay建立电子支付联盟的可能性。本文摘编自《华尔街日报》,原文标题:马云谈阿里巴巴将如何帮助美国出口商,虎嗅略有删节。");  e1.setPicUrl("http://img1.gtimg.com/finance/pics/hv1/29/53/1739/113092019.jpg");  e1.setUrl("http://finance.qq.com/a/20141105/010616.htm?pgv_ref=aio2012&ptlang=2052");    Articles e2 = new Articles();  e2.setTitle("史上最牛登机牌:姓名竟是微博名 涉事航空公司公开致歉");  e2.setDescription("世上最遥远的距离是飞机在等你登机,你却过不了安检。");  e2.setPicUrl("http://p9.qhimg.com/dmfd/328_164_100/t011946ff676981792d.png");  e2.setUrl("http://www.techweb.com.cn/column/2014-11-05/2093128.shtml");  articles.add(e1);  articles.add(e2);    nm.setArticles(articles);  nm.setArticleCount(articles.size());    String newsXml = MessageUtil.NewsMessageToXml(nm);  log.info("\n"+newsXml);  return newsXml;  }  if (content.contains("音乐")) {  MusicMessage mm =  new MusicMessage();  mm.setFromUserName(ToUserName);  mm.setToUserName(FromUserName);  mm.setMsgType(MessageUtil.MESSAGG_TYPE_MUSIC);  mm.setCreateTime(System.currentTimeMillis());  Music music = new Music();  music.setTitle("Maid with the Flaxen Hair");  music.setDescription("测试音乐");  music.setMusicUrl("http://yinyueshiting.baidu.com/data2/music/123297915/1201250291415073661128.mp3?xcode=e2edf18bbe9e452655284217cdb920a7a6a03c85c06f4409");  music.setHQMusicUrl("http://yinyueshiting.baidu.com/data2/music/123297915/1201250291415073661128.mp3?xcode=e2edf18bbe9e452655284217cdb920a7a6a03c85c06f4409");  mm.setMusic(music);    String musicXml = MessageUtil.MusicMessageToXml(mm);  log.info("musicXml:\n" + musicXml);  return musicXml;  }    // 响应  TextMessage tm = new TextMessage();  tm.setToUserName(FromUserName);  tm.setFromUserName(ToUserName);  tm.setMsgType(MessageUtil.MESSAGG_TYPE_TEXT);  tm.setCreateTime(System.currentTimeMillis());  tm.setContent("你好,你发送的内容是:\n" + content);    String xml = MessageUtil.textMessageToXml(tm);  log.info("xml:" + xml);  return xml;  }  else if (MsgType.equals(MessageUtil.MESSAGG_TYPE_EVENT)) {  String event = xmlMap.get("Event");  if (event.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {  // 订阅  TextMessage tm = new TextMessage();  tm.setToUserName(FromUserName);  tm.setFromUserName(ToUserName);  tm.setMsgType(MessageUtil.MESSAGG_TYPE_TEXT);  tm.setCreateTime(System.currentTimeMillis());  tm.setContent("你好,欢迎关注[程序员的生活]公众号![愉快]/呲牙/玫瑰\n目前可以回复文本消息");  return MessageUtil.textMessageToXml(tm);  }  else if (event.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {  // 取消订阅  log.info("用户【" + FromUserName + "]取消关注了。");  }  }  } catch (Exception e) {  e.printStackTrace();  log.error("处理微信请求时发生异常:");  }    return str;  }  }

微信公众平台开发(3)-回复消息