微信公众帐号开发之QQ表情的发送与接收
白羽 2018-06-26 来源 :网络 阅读 1007 评论 0

摘要:本文将带你了解微信公众帐号开发之QQ表情的发送与接收 ,希望本文对大家学微信有所帮助。



本文重点要介绍的内容就是如何在微信公众平台使用QQ表情,即在微信公众帐号开发模式下,如何发送QQ表情给用户,以及如何识别用户发来的是QQ表情。

 

QQ表情代码表

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

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

 

 微信公众帐号开发之QQ表情的发送与接收微信公众帐号开发之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.       

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. }  



本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之微信频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程