【微信公众号开发】【5】文本消息加强
前言:
1,当发送的文本消息内容过长时,微信将不做任何响应
3,网页超链接
4,QQ表情的发送与接收
5,符号表情的发送与接收(emoji表情)(以后会补充引入jar包处理——TODO:EmojiParser)
6,解析接口中的消息创建时间CreateTime
7,柳峰老师的博客链接(http://blog.csdn.net/lyq8479/article/category/1366622/2)
正文:
1,文本消息的长度(接口文档中对消息长度限制为2048)
很多人测试反应消息内容长度在1300多字节时,微信就不响应了,主要是计算文本长度的方式问题,对于不同的编码方式,中文所占的字节数也不一样!
微信服务器返回消息时,该采用UTF-8编码方式 (二、四章均有提及,coreServlet post 方法)
// 将请求、响应的编码均设置为UTF-8(防止中文乱码) request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8");
2,换行符
微信公众帐号的文本消息中,换行符仍然是“\n”
3,网页超链接
错误用法1(a标签的href属性值未被引号引起):<a href=http://blog.csdn.net/lyq8479>柳峰的博客</a>
错误用法2(a标签的href属性值被单引号引起):<a href='http://blog.csdn.net/lyq8479'>柳峰的博客</a>
在做Web开发时,以上两种写法都是可以的,但是放在微信公众帐号的文本消息中,这两种写法都是错误的,网页超链接并不会起作用,而且在Android手机上还会将HTML代码原样显示出来
正确的用法是将a标签href属性的值用双引号引起 : <a href="http://blog.csdn.net/lyq8479">柳峰的博客</a>
4,QQ表情的发送与接收
QQ表情=文本消息
向用户发送QQ表情:textMessage.setContent("[难过] /难过 /::(");
识别用户发送的QQ表情:
public static boolean isQqFace(String content) { boolean result = false; // 判断单个及多个QQ表情的正则表达式 String qqfaceRegex = "(/::\\)|/::~|/::B|/::\\||/:8-\\)|/::<|/::$|/::X|/::Z|/::'\\(|/::-\\||/::@|/::P|/::D|/::O|/::\\(|/::\\+|/:--b|/::Q|/::T|/:,@P|/:,@-D|/::d|/:,@o|/::g|/:\\|-\\)|/::!|/::L|/::>|/::,@|/:,@f|/::-S|/:\\?|/:,@x|/:,@@|/::8|/:,@!|/:!!!|/:xx|/:bye|/:wipe|/:dig|/:handclap|/:&-\\(|/:B-\\)|/:<@|/:@>|/::-O|/:>-\\||/:P-\\(|/::'\\||/:X-\\)|/::\\*|/:@x|/:8\\*|/:pd|/:<W>|/:beer|/:basketb|/:oo|/:coffee|/:eat|/:pig|/:rose|/:fade|/:showlove|/:heart|/:break|/:cake|/:li|/:bome|/:kn|/:footb|/:ladybug|/:shit|/:moon|/:sun|/:gift|/:hug|/:strong|/:weak|/:share|/:v|/:@\\)|/:jj|/:@@|/:bad|/:lvu|/:no|/:ok|/:love|/:<L>|/:jump|/:shake|/:<O>|/:circle|/:kotow|/:turn|/:skip|/:oY|/:#-0|/:hiphot|/:kiss|/:<&|/:&>){1,}"; Pattern p = Pattern.compile(qqfaceRegex); Matcher m = p.matcher(content); if (m.matches()) { result = true; } return result; }
5,符号表情的发送与接收
Emoji表情有很多种版本,包括Unified、DoCoMo、KDDI、Softbank和Google,而且不同版本的表情代码也不一样,更可恶的是:不同的手机操作系统、甚至是同一操作系统的不同版本所支持的emoji表情又不一样。不过目前大部分是没有影响的,柳峰老师提供的是Unified版本。
向用户发送emoji表情: 其中hexEmoji=0x1F604(将代码表中的U+替换为0x)
public static String emoji(int hexEmoji) { return String.valueOf(Character.toChars(hexEmoji)); }
发送在微信符号表情选择栏中不存在的emoji表情:要知道对应的unicode码;SoftBank版的符号表情直接发送即可
6,解析接口中的消息创建时间CreateTime
消息接口中定义的消息创建时间CreateTime,它表示1970年1月1日0时0分0秒至消息创建时所间隔的秒数,注意是间隔的秒数,不是毫秒数!
1秒=1000毫秒
public static String formatTime(String createTime) { // 将微信传入的CreateTime转换成long类型,再乘以1000 long msgCreateTime = Long.parseLong(createTime) * 1000L; DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return format.format(new Date(msgCreateTime)); }