我想大家对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 plain copy
  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. // 文本消息对象转换成xml字符串
  12. respMessage = MessageUtil.textMessageToXml(textMessage);
  13. }

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

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

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

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

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

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

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

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

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

微信公众帐号开发教程第8篇-QQ表情的发送与接收相关推荐

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

    我想大家对QQ表情一定不会陌生,一个个小头像极大丰富了聊天的乐趣,使得聊天不再是简单的文字叙述,还能够配上喜.怒.哀.乐等表达人物心情的小图片.本文重点要介绍的内容就是如何在微信公众平台使用QQ表情, ...

  2. [033] 微信公众帐号开发教程第9篇-QQ表情的发送与接收

    我想大家对QQ表情一定不会陌生,一个个小头像极大丰富了聊天的乐趣,使得聊天不再是简单的文字叙述,还能够配上喜.怒.哀.乐等表达人物心情的小图片.本文重点要介绍的内容就是如何在微信公众平台使用QQ表情, ...

  3. 微信公众帐号开发教程第12篇-符号表情的发送(下)

    引言及文章概要 第11篇文章给出了Unified版本的符号表情(emoji表情)代码表,并且介绍了如何在微信公众帐号开发模式下发送emoji表情,还在文章结尾出,卖了个关子:"小q机器人中使 ...

  4. 微信公众帐号开发教程第11篇-符号表情的发送(上)

    题外话(可以略过) 相信这篇文章已经让大家等的太久了,不是我故弄玄虚.吊大家胃口,而是写一篇文章真的需要花太多的时间.也许一篇文章,你们花3-5分钟就看完了.就学会掌握了,而我却要花2-3个小时的时间 ...

  5. [11] 微信公众帐号开发教程第11篇-符号表情的发送(上)

    题外话(可以略过) 相信这篇文章已经让大家等的太久了,不是我故弄玄虚.吊大家胃口,而是写一篇文章真的需要花太多的时间.也许一篇文章,你们花3-5分钟就看完了.就学会掌握了,而我却要花2-3个小时的时间 ...

  6. [036] 微信公众帐号开发教程第12篇-符号表情的发送(下)

    引言及文章概要 第11篇文章给出了Unified版本的符号表情(emoji表情)代码表,并且介绍了如何在微信公众帐号开发模式下发送emoji表情,还在文章结尾出,卖了个关子:"小q机器人中使 ...

  7. [035] 微信公众帐号开发教程第11篇-符号表情的发送(上)

    题外话(可以略过) 相信这篇文章已经让大家等的太久了,不是我故弄玄虚.吊大家胃口,而是写一篇文章真的需要花太多的时间.也许一篇文章,你们花3-5分钟就看完了.就学会掌握了,而我却要花2-3个小时的时间 ...

  8. [012] 微信公众帐号开发教程第12篇-符号表情的发送(下)

    引言及文章概要 第11篇文章给出了Unified版本的符号表情(emoji表情)代码表,并且介绍了如何在微信公众帐号开发模式下发送emoji表情,还在文章结尾出,卖了个关子:"小q机器人中使 ...

  9. 微信公众帐号开发教程第6篇-消息及消息处理工具的封装

    本篇内容主要讲解如何将微信公众平台定义的消息及消息相关的操作封装成工具类,方面后期的使用  官方文档 接下来要做的就是将消息请求.回复中定义的消息进行封装,建立与之对应的Java类(Java是一门面向 ...

  10. 微信公众帐号开发教程第1篇-引言(转)

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

最新文章

  1. 换人!这些算法都不会还搞什么操作系统
  2. 阿里巴巴Java“代码反潜机”P3C喜提首届中国优秀开源项目二等奖!
  3. 启明云端分享|ESP32在开发环境时,环境搭建及应用、软件平台时常遇到的问题答疑(FAQ)
  4. 联想u盘linux安装教程,联想笔记本用U盘安装 winXP系统教程
  5. Visual Studio 2017 与 Visual Studio for Mac 支持更新
  6. redis的源码编译安装+发布订阅+RDB持久化
  7. 查看一个结构体成员的方法
  8. 2021年吉林高考成绩怎么查询,2021年吉林高考成绩排名查询系统,吉林高考位次排名查询...
  9. 【渝粤教育】国家开放大学2019年春季 0757-22T经济法基础实务 参考试题
  10. 群晖服务器自动同步到本地电脑,安装群晖Drive,实现多台电脑文件同步
  11. aspose转pdf乱码问题
  12. UG NX11.0 软件安装教程
  13. 《浏览器播放RTSP方案》之 VLC插件播放RTSP视频流
  14. 微软超融合私有云测试05-Hyper-V故障转移群集部署
  15. 高德地图怎么测量面积_高德地图如何测量海拔
  16. saas系统和php mysql的区别_saas系统和传统erp的区别是什么?
  17. 目标检测:速度和准确性比较(Fater R-CNN,R-FCN,SSD,FPN,RetinaNet和YOLOv3)
  18. Python爬虫教程(纯自学经历,保姆级教程)
  19. webrtc录制视频
  20. vue自定义翻页组件

热门文章

  1. SQL Server数据库的创建方法
  2. IOS神器-fastlane工具实战-IOS自动化接入应用
  3. CenterNet: Keypoint Triplets for Object Detectiontection学习笔记
  4. 山东大学软件学院2021软件项目管理考试回忆
  5. 奇迹mu技术分享:奇迹服务端中的【DATA】文件详细说明
  6. 《预告 》 明天(9月19日),中国科学院自动化研究所首届智能决策论坛即将开幕!(附带10+位作者演讲主题及摘要)...
  7. python基础篇{数据类型}
  8. 仿牛客网论坛项目资料整理
  9. Stacked Hourglass Networks
  10. 软件测试人员提升测试技能的10个妙招分享