【微信公众号开发】【5】文本消息加强

前言:

1,当发送的文本消息内容过长时,微信将不做任何响应

2,换行符的使用

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属性的值用双引号引起  : <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));  
} 

 

posted @ 2017-10-23 14:36  花生喂龙  阅读(394)  评论(0编辑  收藏  举报