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

简介:

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

 

QQ表情代码表

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

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

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

 

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

在微信上使用公众帐号时,怎样发送QQ表情,我想这个非常少有人不会的。在输入框旁边有一个笑脸的图片button,点击它将会弹出表情选择界面,可选择的表情依次为“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.       
  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 plain copy
 
  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 plain copy
 
  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表情的使用就介绍这么多。事实上,我并不希望刚开始学习的人上来仅仅是简单拷贝我贴出的代码,实现了自己想要的功能就完事了,更希望初学的朋友能够通过此文章学会一种思考问题和解决这个问题的方法。

本文转自博客园知识天地的博客,原文链接:[033] 微信公众帐号开发教程第9篇-QQ表情的发送与接收(转),如需转载请自行联系原博主。


相关文章
|
3天前
|
存储 移动开发 监控
微信支付开发避坑指南
【9月更文挑战第11天】在进行微信支付开发时,需遵循官方文档,确保权限和参数配置正确。开发中应注重安全,验证用户输入,合理安排接口调用顺序,并处理异常。上线后需实时监控支付状态,定期检查配置,关注安全更新,确保系统稳定运行。
|
9天前
|
移动开发 小程序 JavaScript
uni-app开发微信小程序
本文详细介绍如何使用 uni-app 开发微信小程序,涵盖需求分析、架构思路及实施方案。主要功能包括用户登录、商品列表展示、商品详情、购物车及订单管理。技术栈采用 uni-app、uView UI 和 RESTful API。文章通过具体示例代码展示了从初始化项目、配置全局样式到实现各页面组件及 API 接口的全过程,并提供了完整的文件结构和配置文件示例。此外,还介绍了微信授权登录及后端接口模拟方法,确保项目的稳定性和安全性。通过本教程,读者可快速掌握使用 uni-app 开发微信小程序的方法。
27 3
|
17天前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享
本文介绍了Taro中`useShareAppMessage`的使用方法,需在页面配置`enableShareAppMessage: true`并重新编译。
Taro@3.x+Vue@3.x+TS开发微信小程序,设置转发分享
|
17天前
|
小程序 数据安全/隐私保护
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
在 `src/http` 目录下创建 `request.ts` 文件,并配置 Taro 的网络请求方法 `Taro.request`,支持多种 HTTP 方法并处理数据加密。
Taro@3.x+Vue@3.x+TS开发微信小程序,网络请求封装
|
24天前
|
小程序 JavaScript Java
微信小程序的后端开发需要使用什么语言?
【8月更文挑战第22天】微信小程序的后端开发需要使用什么语言?
245 65
|
17天前
|
小程序 JavaScript
Taro@3.x+Vue@3.x+TS开发微信小程序,使用轮播图
本文介绍了使用 Taro 和 Vue 创建轮播组件的两种方法:一是通过 `&lt;swiper&gt;` 实现,二是利用 Nut UI 的 `&lt;nut-swiper&gt;` 组件实现。
Taro@3.x+Vue@3.x+TS开发微信小程序,使用轮播图
|
17天前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,上传文件
本文介绍如何在Taro项目中使用Nut UI的`&lt;nut-uploader/&gt;`组件实现图片上传功能,并通过示例代码展示了自定义上传逻辑的方法。
Taro@3.x+Vue@3.x+TS开发微信小程序,上传文件
|
17天前
|
小程序
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)
本文介绍如何在Taro项目中配置深色模式。通过在`src/app.config.ts`设置`darkmode`选项和在`theme.json`中定义主题变量,可以实现跟随系统主题的界面风格切换。
Taro@3.x+Vue@3.x+TS开发微信小程序,根据系统主题展示不同样式(darkMode)
|
17天前
|
小程序 开发者
Taro@3.x+Vue@3.x+TS开发微信小程序,使用自定义tabBar
本文介绍了如何在Taro项目中实现自定义tabBar。首先,在`app.config.ts`中设置`custom: true`并配置`tabBar`。
Taro@3.x+Vue@3.x+TS开发微信小程序,使用自定义tabBar
|
24天前
|
小程序 JavaScript 前端开发
微信小程序开发时数据是否是双向数据绑定的
微信小程序开发时数据是否是双向数据绑定的

热门文章

最新文章