php专区

 首页 > php专区 > PHP应用 > 开放平台 > 柳峰微信公众帐号开发教程第9篇-QQ表情的发送与

柳峰微信公众帐号开发教程第9篇-QQ表情的发送与

分享到:
【字体:
导读:
          我想大家对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表情。代码片段如下:

 

// 文本消息
if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
	// 回复文本消息
	TextMessage textMessage = new TextMessage();
	textMessage.setToUserName(fromUserName);
	textMessage.setFromUserName(toUserName);
	textMessage.setCreateTime(new Date().getTime());
	textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
	textMessage.setFuncFlag(0);
	textMessage.setContent("[难过] /难过 /::(");
	
	// 文本消息对象转换成xml字符串
	respMessage = MessageUtil.textMessageToXml(textMessage);
}
上面代码片段的作用是:判断发送的消息类型,如果是文本消息(MsgType=text),则回复三个难过的QQ表情给用户。可以看出,不管是用户发给公众帐号,还是公众帐号发给用户,都可以使用QQ表情的文字代码(如:[难过] /难过)和符号代码(如 /::()。

 

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

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

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

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

 

/**
 * 判断是否是QQ表情
 * 
 * @param content
 * @return
 */
public static boolean isQqFace(String content) {
	boolean result = false;

	// 判断QQ表情的正则表达式
	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|/:|/: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|/:|/:jump|/:shake|/:|/:circle|/:kotow|/:turn|/:skip|/:oY|/:#-0|/:hiphot|/:kiss|/:<&|/:&>";
	Pattern p = Pattern.compile(qqfaceRegex);
	Matcher m = p.matcher(content);
	if (m.matches()) {
		result = true;
	}
	return result;
}
下面是方法的使用,实现了这样一个简单的功能:用户发什么QQ表情给公众帐号,公众帐号就回复什么QQ表情给用户(xiaoqrobot就是这么做的)。实现代码如下:

 

 

// 文本消息
if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
	// 文本消息内容
	String content = requestMap.get("Content");
	
	// 判断用户发送的是否是单个QQ表情
	if(XiaoqUtil.isQqFace(content)) {
		// 回复文本消息
		TextMessage textMessage = new TextMessage();
		textMessage.setToUserName(fromUserName);
		textMessage.setFromUserName(toUserName);
		textMessage.setCreateTime(new Date().getTime());
		textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
		textMessage.setFuncFlag(0);
		// 用户发什么QQ表情,就返回什么QQ表情
		textMessage.setContent(content);
		
		// 将文本消息对象转换成xml字符串
		respMessage = MessageUtil.textMessageToXml(textMessage);
	}
}
好了,关于微信公众帐号中QQ表情的使用就介绍这么多。其实,我并不希望初学者上来只是简单拷贝我贴出的代码,实现了自己想要的功能就完事了,更希望初学的朋友能够通过此文章学会一种思考问题和解决问题的方法。

 

 

如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号xiaoqrobot来支持柳峰哦 

分享到:
.net mvc 微信开发笔记(一)------申请测...
工作原因,最近接触到微信开发,网上搜索资料,大部分都是JSP或者PHP的,.net mvc更是少之又少。于是,萌生写一个笔记的想法,一方面为自己的工作做一个记录,另一方希望能帮助那些需要的人。但是本人确实是菜鸟,口齿不清,代码很乱,还刚开始学习。出现很幼稚的错误请见谅。 首先我们需要一个公共账号,当然有现成的更好...
柳峰微信公众平台开发教程第19篇-应用实...
 在笔者的公众账号小q机器人(微信号:xiaoqrobot)中有一个非常好玩的功能"人脸检测",它能够检测出用户发送的图片中有多少张人脸,并且还能分析出每张脸所对应的人种、性别和年龄。几乎每天都有一些用户在使用“人脸检测”,该功能的趣味性和娱乐性在于能够让用户知道自己的长相与真实年龄是否相符,是否男(女)性化。...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……