我想大家对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表情。代码片段例如以下:

  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表情。

  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就是这么做的)。实现代码例如以下:

  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表情的使用就介绍这么多。事实上,我并不希望刚开始学习的人上来仅仅是简单拷贝我贴出的代码,实现了自己想要的功能就完事了,更希望初学的朋友能够通过此文章学会一种思考问题和解决这个问题的方法。

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

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

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

  2. [039] 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)

    引言及内容概要 距离写上一篇文章<自定义菜单的创建及菜单事件响应>整整过了两个月的时间,那时公众平台还没有开放view类型的菜单.在不久前,微信公众平台悄悄开放了view类型的菜单,却没有 ...

  3. 微信公众帐号开发教程第4篇-----开发模式启用及接口配置Java

    欢迎加入群:347245650   345531810 进行讨论相互交流  我的微信号:572839485 我的微信公众账号  我的微社区欢迎关注 索取源码←请点击 图床:没有服务器 拖拽图片 外网即 ...

  4. [034] 微信公众帐号开发教程第10篇-解析接口中的消息创建时间CreateTime(转)

    从微信公众平台的消息接口指南中能够看出,每种类型的消息定义中,都包括有CreateTime參数,它表示消息的创建时间,例如以下图所看到的: 上图是消息接口指南中4.1-文本消息的定义.注意Create ...

  5. 微信公众帐号开发。大家是用框架还是自己写的流程。现在遇到若干问题。请教各路大仙 - V2EX

    微信公众帐号开发.大家是用框架还是自己写的流程.现在遇到若干问题.请教各路大仙 - V2EX 微信公众帐号开发.大家是用框架还是自己写的流程.现在遇到若干问题.请教各路大仙

  6. 微信公众帐号开发之一(java)

    闲来没事,就记录一下微信公众平台的开发吧~ 其实微信公众平台开发没有想象中的那么困难,因为注册了微信公众平台帐号登录之后在开发者模式里有详细的文档,个人感觉介绍还是比较详细的. 微信公众平台订阅号和服 ...

  7. 微信公众帐号开发-消息创建时间long型与标准时间的互相转换

    /**  *   */ package com.hd.admin.wxmeet.utils; /**  * @author jymcpp  *  */ import java.text.DateFor ...

  8. 欢迎大家关注我的微信公众帐号小q机器人(xiaoqrobot)(转)

    一个偶然的机会让我接触到了微信公众平台,赶紧加了几个交流群了解下相关情况,突然间发现好像全部的APP开发人员都在研究微信公众帐号的开发,而我显得有些落舞了.至于为什么热度会这么高,我想一个数字足以说明 ...

  9. SQLSERVER走起微信公众帐号已经开通搜狗微信搜索

    SQLSERVER走起微信公众帐号已经开通搜狗微信搜索 请打开下面链接 http://weixin.sogou.com/gzh?openid=oIWsFt-hiIb_oYqQHaBMoNwRB2wM ...

随机推荐

  1. 浅谈JDBC(一)

    一.JDBC技术引言 1.什么是JDBC技术 提供了一套接口规范,利用java代码进行数据库操作. 2.JDBC技术的核心思想 对于程序员来说,代码访问数据库分为三个步骤:1.通过数据库的账号密码.2 ...

  2. Codeforces 492B B. Vanya and Lanterns

    Codeforces  492B   B. Vanya and Lanterns 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  3. java代码获取ip地址

    public class IpTool { public static void main(String[] args) { IpTool ipTool=new IpTool(); System.ou ...

  4. WebSphere优化

    优化WebSphere WebSphere里的profile刚配完,一般默认的heapsize即Xms与Xmx值只有256mb,而IBM WAS是几个J2EE服务器中最吃内存的机器,在布署一些EAR应 ...

  5. Dapper 基础用法

    Dapper是.Net下的一个简单orm框架,具有以下特点: 1.简单,只需要一个文件即可(SqlMapper.cs) 2.快速,下面是一个查询结果集在500以上的运行速度对比 3.不要求特定的db ...

  6. Week15(12月19日):授课综述2

    Part I:提问 =========================== 1.为了编辑应用程序的统一布局,可打开位于Views\Shared子目录中的(    )文件. A.MasterPage.h ...

  7. GROUPING SETS、ROLLUP、CUBE

    大家对GROUP BY应该比较熟悉,如果你感觉自己并不完全理解GROUP BY,那么本文不适合你.还记得当初学习SQL的时候,总是理解不了GROUP BY的作用,经过好长时间才终于明白GROUP BY ...

  8. 转: 用css把图片转为灰色图

    小tip: 使用CSS将图片转换成黑白(灰色.置灰) by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.co ...

  9. Qt configure 参数不完全说明

    只需要加个 -fast参数就ok了.其他参数视自己情况而定,比如你不需要qt3支持可以添加-no-qt3support,或者不需要webkit插件 -no-webkit配置参数选项: 前面是*号的表示 ...

  10. 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)

    原文 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习) Mono.Cecil是一个强大的MSIL的注入工具,利用它可以实现动态创建程序集,也可以实现拦截器横向切入动态方法,甚至还 ...