有過php開發(fā)基礎(chǔ)的會了解,你在論壇上發(fā)的表情,在代碼段中控制的并不是通過一張動態(tài)圖片來控制的,而是通過相對應(yīng)的文本,當(dāng)然qq表情也不例外
首先需要明確的是:QQ表情雖然呈現(xiàn)為一張張動態(tài)的表情圖片,但在微信公眾平臺的消息接口中卻是屬于文本消息;也就是說當(dāng)用戶向公眾帳號發(fā)送QQ表情時,公眾帳號后臺程序接收到的消息類型MsgType的值為text。只要上面這點能理解了,下面的工作就好開展了。
對于QQ表情,發(fā)送的是文本消息,而呈現(xiàn)出來卻是表情圖片,那么每一個QQ表情圖片一定會有與之相對應(yīng)的表情代碼。下面是我已經(jīng)整理好的微信公眾帳號中使用的QQ表情代碼對照表:

上面一共列出了105個QQ表情,每個表情都給出了與之相對應(yīng)的文字代碼與符號代碼(也許這兩種叫法并不恰當(dāng)),至于這兩種代碼怎么來的以及如何使用,下面馬上會講到。
用戶向公眾帳號發(fā)送QQ表情
在微信上使用公眾帳號時,如何發(fā)送QQ表情,我想這個很少有人不會的。在輸入框旁邊有一個笑臉的圖片按鈕,點擊它將會彈出表情選擇界面,可選擇的表 情依次為“QQ表情”、“符號表情”和“動畫表情”。當(dāng)我們點擊選擇了某個QQ表情后,發(fā)現(xiàn)在輸入框中會顯示該表情的文字代碼,這里是用一對中括號引起 的。
在輸入框中輸入“[呲牙]”、“/呲牙”和“/::D”這三種代碼的作用一樣,都是發(fā)送呲牙的QQ表情。這個時候,大家再回過頭去看文章最開始的QQ表情代碼對照表,就明白是怎么回事了。
公眾帳號向用戶發(fā)送QQ表情
與用戶向公眾帳號發(fā)送QQ表情一樣,在開發(fā)模式下,公眾帳號也可以用同樣的表情代碼(文字代碼或符號代碼)向用戶回復(fù)QQ表情。代碼片段如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 文本消息 if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { // 回復(fù)文本消息 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("[難過] /難過 /::("); // 文本消息對象轉(zhuǎn)換成xml字符串 respMessage = MessageUtil.textMessageToXml(textMessage); } |
上面代碼片段的作用是:判斷發(fā)送的消息類型,如果是文本消息(MsgType=text),則回復(fù)三個難過的QQ表情給用戶。可以看出,不管是用戶發(fā)給公眾帳號,還是公眾帳號發(fā)給用戶,都可以使用QQ表情的文字代碼(如:[難過] /難過)和符號代碼(如 /::()。
公眾帳號識別用戶發(fā)送的QQ表情
在掌握了如何發(fā)送QQ表情后,我們再來看看公眾帳號如何識別用戶發(fā)送的是QQ表情。這是什么意思呢?當(dāng)用戶向公眾帳號發(fā)送一個QQ表情,在后臺程序中接收到的會是什么值,我們又怎么知道這個值就是一個QQ表情。
其實,只要做個簡單的測試,比如:將接收到的文本消息輸出到日志中(可以用log4j或者System.out.print),不難發(fā)現(xiàn):向公眾帳號發(fā)送一個QQ表情,在后臺程序中接收到的是QQ表情的符號代碼。
下面是我簡單封裝的一個方法,通過正則表達式實現(xiàn)的,用于判斷用戶發(fā)送的是否是單個QQ表情。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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|/:<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|/:< &|/:&>"; Pattern p = Pattern.compile(qqfaceRegex); Matcher m = p.matcher(content); if (m.matches()) { result = true; } return result; } </o></l></w> |
下面是方法的使用,實現(xiàn)了這樣一個簡單的功能:用戶發(fā)什么QQ表情給公眾帳號,公眾帳號就回復(fù)什么QQ表情給用戶。實現(xiàn)代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// 文本消息 if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { // 文本消息內(nèi)容 String content = requestMap.get("Content"); // 判斷用戶發(fā)送的是否是單個QQ表情 if(XiaoqUtil.isQqFace(content)) { // 回復(fù)文本消息 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); // 用戶發(fā)什么QQ表情,就返回什么QQ表情 textMessage.setContent(content); // 將文本消息對象轉(zhuǎn)換成xml字符串 respMessage = MessageUtil.textMessageToXml(textMessage); } } |
樂發(fā)網(wǎng)超市批發(fā)網(wǎng)提供超市貨源信息,超市采購進貨渠道。超市進貨網(wǎng)提供成都食品批發(fā),日用百貨批發(fā)信息、微信淘寶網(wǎng)店超市采購信息和超市加盟信息.打造國內(nèi)超市采購商與批發(fā)市場供應(yīng)廠商搭建網(wǎng)上批發(fā)市場平臺,是全國批發(fā)市場行業(yè)中電子商務(wù)權(quán)威性網(wǎng)站。
本文內(nèi)容整合網(wǎng)站:百度百科、知乎、淘寶平臺規(guī)則