`
starbhhc
  • 浏览: 655371 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

微信公众帐号开发教程第7篇-QQ表情的发送与接收

 
阅读更多

我想大家对QQ表情一定不会陌生,一个个小头像极大丰富了聊天的乐趣,使得聊天不再是简单的文字叙述,还能够配上喜、怒、哀、乐等表达人物心情的小图片。本文重点要介绍的内容就是如何在微信公众平台使用QQ表情,即在微信公众帐号开发模式下,如何发送QQ表情给用户,以及如何识别用户发来的是QQ表情。

 

QQ表情代码表

首先需要明确的是:QQ表情虽然呈现为一张张动态的表情图片,但在微信公众平台的消息接口中却是属于文本消息;也就是说当用户向公众帐号发送QQ表情时,公众帐号后台程序接收到的消息类型MsgType的值为text。只要上面这点能理解了,下面的工作就好开展了。

对于QQ表情,发送的是文本消息,而呈现出来却是表情图片,那么每一个QQ表情图片一定会有与之相对应的表情代码。下面是我已经整理好的微信公众帐号中使用的QQ表情代码对照表

上面一共列出了105个QQ表情,每个表情都给出了与之相对应的文字代码符号代码(也许这两种叫法并不恰当),至于这两种代码怎么来的以及如何使用,下面马上会讲到。

 

用户向公众帐号发送QQ表情

在微信上使用公众帐号时,如何发送QQ表情,我想这个很少有人不会的。在输入框旁边有一个笑脸的图片按钮,点击它将会弹出表情选择界面,可选择的表情依次为“QQ表情”、“符号表情”和“动画表情”。当我们点击选择了某个QQ表情后,发现在输入框中会显示该表情的文字代码,这里是用一对中括号引起的,如下图所示:


其实,当我们很熟悉要使用QQ表情的文字代码时,也可以直接在输入框中输入表情的代码,而不需要弹出表情选择框。如下图所示:

从上图可以看出,在输入框中输入“[呲牙]”、“/呲牙”和“/::D”这三种代码的作用一样,都是发送呲牙的QQ表情。这个时候,大家再回过头去看文章最开始的QQ表情代码对照表,就明白是怎么回事了。

 

公众帐号向用户发送QQ表情

与用户向公众帐号发送QQ表情一样,在开发模式下,公众帐号也可以用同样的表情代码(文字代码或符号代码)向用户回复QQ表情。代码片段如下:

 

[java] view plaincopy
 
  1. // 文本消息  
  2. if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {  
  3.     // 回复文本消息  
  4.     TextMessage textMessage = new TextMessage();  
  5.     textMessage.setToUserName(fromUserName);  
  6.     textMessage.setFromUserName(toUserName);  
  7.     textMessage.setCreateTime(new Date().getTime());  
  8.     textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);  
  9.     textMessage.setFuncFlag(0);  
  10.     textMessage.setContent("[难过] /难过 /::(");  
  11.       
  12.     // 文本消息对象转换成xml字符串  
  13.     respMessage = MessageUtil.textMessageToXml(textMessage);  
  14. }  

上面代码片段的作用是:判断发送的消息类型,如果是文本消息(MsgType=text),则回复三个难过的QQ表情给用户。可以看出,不管是用户发给公众帐号,还是公众帐号发给用户,都可以使用QQ表情的文字代码(如:[难过]  /难过)和符号代码(如 /::()。

 

公众帐号识别用户发送的QQ表情

在掌握了如何发送QQ表情后,我们再来看看公众帐号如何识别用户发送的是QQ表情。这是什么意思呢?当用户向公众帐号发送一个QQ表情,在后台程序中接收到的会是什么值,我们又怎么知道这个值就是一个QQ表情。

其实,只要做个简单的测试,比如:将接收到的文本消息输出到日志中(可以用log4j或者System.out.print),不难发现:向公众帐号发送一个QQ表情,在后台程序中接收到的是QQ表情的符号代码

下面是我简单封装的一个方法,通过正则表达式实现的,用于判断用户发送的是否是单个QQ表情。

 

[java] view plaincopy
 
  1. /** 
  2.  * 判断是否是QQ表情 
  3.  *  
  4.  * @param content 
  5.  * @return 
  6.  */  
  7. public static boolean isQqFace(String content) {  
  8.     boolean result = false;  
  9.   
  10.     // 判断QQ表情的正则表达式  
  11.     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|/:<&|/:&>";  
  12.     Pattern p = Pattern.compile(qqfaceRegex);  
  13.     Matcher m = p.matcher(content);  
  14.     if (m.matches()) {  
  15.         result = true;  
  16.     }  
  17.     return result;  
  18. }  

下面是方法的使用,实现了这样一个简单的功能:用户发什么QQ表情给公众帐号,公众帐号就回复什么QQ表情给用户(xiaoqrobot就是这么做的)。实现代码如下:

 

 

[java] view plaincopy
 
  1. // 文本消息  
  2. if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {  
  3.     // 文本消息内容  
  4.     String content = requestMap.get("Content");  
  5.       
  6.     // 判断用户发送的是否是单个QQ表情  
  7.     if(XiaoqUtil.isQqFace(content)) {  
  8.         // 回复文本消息  
  9.         TextMessage textMessage = new TextMessage();  
  10.         textMessage.setToUserName(fromUserName);  
  11.         textMessage.setFromUserName(toUserName);  
  12.         textMessage.setCreateTime(new Date().getTime());  
  13.         textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);  
  14.         textMessage.setFuncFlag(0);  
  15.         // 用户发什么QQ表情,就返回什么QQ表情  
  16.         textMessage.setContent(content);  
  17.           
  18.         // 将文本消息对象转换成xml字符串  
  19.         respMessage = MessageUtil.textMessageToXml(textMessage);  
  20.     }  
  21. }  

好了,关于微信公众帐号中QQ表情的使用就介绍这么多。其实,我并不希望初学者上来只是简单拷贝我贴出的代码,实现了自己想要的功能就完事了,更希望初学的朋友能够通过此文章学会一种思考问题和解决问题的方法。

分享到:
评论

相关推荐

    微信公众帐号开发教程

    [035] 微信公众帐号开发教程第11篇-符号表情的发送(上) - 柳峰的专栏 - 博客频道 - CSDN.NET [036] 微信公众帐号开发教程第12篇-符号表情的发送(下) - 柳峰的专栏 - 博客频道 - CSDN.NET [037] 微信公众帐号开发...

    JAVA微信开发资料

    微信公众帐号开发教程第 9 篇-QQ 表情的发送与接收.53 微信公众帐号开发教程第 10 篇-解析接口中的消息创建时间 CreateTime61 微信公众帐号开发教程第 11 篇-符号表情的发送(上).63 微信公众帐号开发教程第 12 篇-...

    微信公共账号开发教程

    2. 微信公众帐号开发教程第2篇-微信公众帐号的类型(普通和会议) 3. 微信公众帐号开发教程第3篇-开发... 微信公众帐号开发教程第5篇-各种消息的接收与响应 6. 微信公众帐号开发教程第6篇-文本消息的内容长度限制揭秘

    微信小程序开发图解案例教程-源代码

    微信小程序开发图解案例教程-源代码微信小程序开发图解案例教程-源代码微信小程序开发图解案例教程-源代码微信小程序开发图解案例教程-源代码微信小程序开发图解案例教程-源代码微信小程序开发图解案例教程-源代码...

    java开发微信公众平台

    微信公众帐号开发教程第1 篇-引言 微信公众帐号开发教程第2 篇-微信公众帐号的类型(普通和会议) 微信公众帐号开发教程第3 篇-开发模式启用及接口配置 ...微信公众帐号开发教程第5 篇-各种消息的接收与响应

    微信开发实例 微信公众平台开发 之微信接口前期准备

    微信开发实例 微信公众平台开发教程-深入浅出微信公众平台实战开发(微网站、LBS云、Api接口调用、服务号高级接口)1.微信接口前期准备。由北风网提供,微信开发实例微信公众平台基础篇: 1)微信公众平台简介:开发...

    微信公众平台最佳实践-源代码-方倍工作室

    自从方倍工作室在博客园推出微信公众平台开发系列教程后,受到广大微信开发人员及爱好者的热情关注,相头文章的日访问量高达上万人次,而《微信公众平台开发入门教程》一门阅读量早已超出20万,很多博文被很多有影响...

    微信公众平台开发入门教程

    微信公众平台开发入门教程

    微信公众平台应用开发实战-完整扫描版 pdf 文档

    微信公众平台应用开发实战-完整扫描版.pdf 全书一共9章,在逻辑上分为四大部分:第一部分(第1章)介绍了微信公众平台的开发模式、数据交互方式,以及开发公众平台应用所需要的各项技术;第二部分(第2~4章)首先...

    微信公众平台开发教程Java版

    微信公众平台开发教程Java版 微信公众平台开发教程Java版

    微信公众平台开发教程,Java

    微信公众平台的开发教程,用Java写的,挺有借鉴的意义

    微信公众账号开发教程

    接触微信公众帐号已经有两个多月的时间了,在这期间,除了陆续完善个人公众帐号以外,还带领团队为公司开发了两个企业应用:一个是普通类型的公众帐号,另一个是会议类型的公众帐号。经过这3个公众帐号的开发,对...

    微信公众平台从入门到精通1-17

    第七章 公众平台开发模式介绍 第八章 新浪云计算平台注册和使用 第九章 用微信开发模式做欢迎词 第十章 公众账号发送欢迎图文消息 第十一章 公众账号自定义回复功能 第十二章 公众账号接收非文字消息 第十三章 SAE上...

    微信公众账号开发教程(java)

    3)微信公众帐号开发中的小技巧(如换行、通过代码发送表情、屏幕飘雪花、表情的接收识别、在Android和iOS上表现不一致等等); 4)与业务系统对接的方法(链接、短信等,除了技术讲解还会做一定的分析对比); 5)...

    微信公众平台开发教程4

    微信公众平台开发教程,适合初学者了解入门,用的是php语言,简单易懂,欢迎下载

    java版微信公众账号开发教程

    微信公众帐号开发中的小技巧(如换行、通过代码发送表情、屏幕飘雪花、表情的接收识别、在Android和iOS上表现不一致等等)与业务系统对接的方法(链接、短信等,除了技术讲解还会做一定的分析对比)。 5)微信公众...

Global site tag (gtag.js) - Google Analytics