7.3.3 案例:回复Emoji表情
下面我们来做一个使用Emoji表情的简单案例,该案例要实现的功能是:不管用户发送什么消息,公众账号都回复一个包含Emoji表情的文本消息给用户。该案例的核心代码如下:
- 1 package org.liufeng.course.service;
- 2
- 3 import java.util.Date;
- 4 import java.util.Map;
- 5 import javax.servlet.http.HttpServletRequest;
- 6 import org.liufeng.course.message.resp.TextMessage;
- 7 import org.liufeng.course.util.MessageUtil;
- 8
- 9 /**
- 10 * 核心服务类
- 11 *
- 12 * @author liufeng
- 13 * @date 2013-10-20
- 14 */
- 15 public class CoreService {
- 16 /**
- 17 * 得到包含指定Unicode代码点的字符串
- 18 *
- 19 * @param codePoint
- 20 * @return
- 21 */
- 22 private static String emoji(int codePoint) {
- 23 return String.valueOf(Character.toChars(codePoint));
- 24 }
- 25
- 26 /**
- 27 * 处理微信发来的请求
- 28 *
- 29 * @param request
- 30 * @return
- 31 */
- 32 public static String processRequest(HttpServletRequest request) {
- 33 String respXml = null;
- 34 try {
- 35 // XML请求解析
- 36 Map<String, String> requestMap = MessageUtil.parseXml(request);
- 37 // 发送方账号(open_id)
- 38 String fromUserName = requestMap.get("FromUserName");
- 39 // 公众账号
- 40 String toUserName = requestMap.get("ToUserName");
- 41
- 42 // 定义消息内容(鬼节做南瓜灯)
- 43 StringBuffer sb = new StringBuffer();
- 44 sb.append("1.Unified Unicode").append("\n");
- 45 sb.append(emoji(0x1F47B)).append("节做").append(emoji(0x1F383)).append
- 46 ("灯\n\n");
- 47 sb.append("2.Softbank Unicode").append("\n");
- 48 sb.append(emoji(0xE11B)).append("节做").append(emoji(0xE445)).append("灯");
- 49
- 50 // 回复文本消息
- 51 TextMessage textMessage = new TextMessage();
- 52 textMessage.setToUserName(fromUserName);
- 53 textMessage.setFromUserName(toUserName);
- 54 textMessage.setCreateTime(new Date().getTime());
- 55 textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
- 56 textMessage.setContent(sb.toString());
- 57 respXml = MessageUtil.messageToXml(textMessage);
- 58 } catch (Exception e) {
- 59 e.printStackTrace();
- 60 }
- 61 return respXml;
- 62 }
- 63 }
代码的第22~24行定义了一个emoji()方法,用于得到包含指定Unicode代码点的字符串。第43~48行代码定义了要回复的文本内容,这里通过调用emoji()方法加入了4个Emoji表情。第51~56行代码将回复的内容封装成文本消息对象。笔者使用了两部手机(ME722和iPhone4S)进行测试,如图7-7所示。可以看出,使用Unified和Softbank两种编码得到的Emoji表情一样,并且在两部手机上的表现也完全一致。
图7-7 公众账号回复Emoji表情的演示效果