在微信的文字内容发送框中有一个笑脸符号,点击该笑脸后,可以看到下面有很多表情图标,如图23-2所示。使用微信发送信息时,可以发送表情。这些表情包括QQ表情和Emoji表情。
图23-2 微信表情
用户和公众号都能直接发送或回复相应的QQ表情给对方。微信公众号回复QQ表情时,需要回复相应的表情代码,就能发送出相应的表情。这些表情代码被当作文本消息在微信中转义成图标。QQ表情的相应代码如表23-2所示。
表23-2 QQ表情代码列表
另外,还可以使用如下代码进行QQ表情替换,这样如果回复的内容中有相应的词语,就能换成相应的QQ表情。
$face = array('/::)','/::~','/::B','/::|','/:8-)','/::<','/::$','/::X','/::Z','/::/'(','/::-|','/::@','/::P','/::D','/::O','/::(','/::+','/:Cb','/::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','/','/:#-0','/','/:kiss','/:<&','/:&>');$word = array('微笑','伤心','美女','发呆','墨镜','哭','羞','哑','睡','哭','囧','怒','调皮','笑','惊讶','难过','酷','汗','抓狂','吐','笑','快乐','奇','傲','饿','累','吓','汗','高兴','闲','努力','骂','疑问','秘密','乱','疯','哀','鬼','打击','bye','汗','抠','鼓掌','糟糕','恶搞','什么','什么','累','看','难过','难过','坏','亲','吓','可怜','刀','水果','酒','篮球','乒乓','咖啡','美食','动物','鲜花','枯','唇','爱','分手','生日','电','炸弹','刀','足球','虫','臭','月亮','太阳','礼物','伙伴','赞','差','握手','优','恭','勾','顶','坏','爱','不','好的','爱','吻','跳','怕','尖叫','圈','拜','回头','跳','天使','激动','舞','吻','瑜伽','太极');$content = str_replace($face, $word, $message);
Emoji即表情符号,词义来自日语(えもじ,e-moji,moji在日语中的含义是字符),是由栗田穣崇(Shigetaka Kurit)创建的,目前已普遍应用于网络聊天软件中。Emoji表情的一部分如图23-3所示。
图23-3 Emoji表情
Emoji表情包含多种版本,包括Unified、DoCoMo、KDDI、Softbank及Google。其中,Unified是最官方的版本,也是微信中使用的版本。Emoji表情使用十六进制代码标记,其符号达700多个。各符号名称、含义及其在各种版本下的十六进制代码可以参考官方网站。官网地址为http://www.unicode.org/~scherer/emoji4unicode/。
各图标详细的说明可以从以下地址下载文档。
http:// www.unicode.org/~scherer/emoji4unicode/snapshot/emojidata.pdf
另外,也可以在下列网站查询。
http:// emoji.fangbei.org/
在微信公众平台中,公众号回复Emoji表情,不能直接回复代码,需要进行ASCII转码,然后将编码以文本消息回复。十六进制转码代码如下。
function utf8_bytes($cp){ if ($cp > 0x10000){ # 4 bytes return chr(0xF0 | (($cp & 0x1C0000) >> 18)). chr(0x80 | (($cp & 0x3F000) >> 12)). chr(0x80 | (($cp & 0xFC0) >> 6)). chr(0x80 | ($cp & 0x3F)); }else if ($cp > 0x800){ # 3 bytes return chr(0xE0 | (($cp & 0xF000) >> 12)). chr(0x80 | (($cp & 0xFC0) >> 6)). chr(0x80 | ($cp & 0x3F)); }else if ($cp > 0x80){ # 2 bytes return chr(0xC0 | (($cp & 0x7C0) >> 6)). chr(0x80 | ($cp & 0x3F)); }else{ # 1 byte return chr($cp); }}
构造文本消息时,将相应的十六进制作为参数填入转码函数中即可。特别要注意的是,部分表情有两组十六进制代码,如“中国国旗”“美国国旗”。此时需要将两组十六进制代码进行转码后拼接,代码实现如下。
private function receiveText($object){ $keyword = trim($object->Content); $content = "中国国旗:".utf8_bytes(0x1F1E8).utf8_bytes(0x1F1F3)."/n". "美国国旗:".utf8_bytes(0x1F1FA).utf8_bytes(0x1F1F8)."/n". "男女牵手:".utf8_bytes(0x1F46B)."/n". "仙人掌:".utf8_bytes(0x1F335)."/n". "电话机:".utf8_bytes(0x260E)."/n". "药丸:".utf8_bytes(0x1F48A); $result = $this->transmitText($object, $content); return $result;}
上述代码运行后,效果如图23-4所示。
同样的,也可以在自定义菜单中设置一个Emoji表情,增强公众号界面的美观性。其代码实现如下。
require_once('weixin.class.php');$weixin = new class_weixin;$button = array('name' => $weixin->bytes_to_emoji(0x1F4D8)."微信图书", 'sub_button' => array( array('type' => "view", 'name' => "微信开发最佳实践", 'url' => "http:// union.click.jd.com/ jdc?d=DoDG82" ) ) );$button = array('name' => $weixin->bytes_to_emoji(0x1F3E0)."购买代码", 'sub_button' => array( array('type' => 'view', 'name' => $weixin->bytes_to_emoji(0x- 1F389)."进入购物", 'url' => "http:// mp.weixin.qq.com/ bizmall/mallshelf?id=&t=mall/list&biz= MzA5NzM2MTI4OA==&shelf_id=3&showwx paytitle=1#wechat_redirect" ), array('type' => 'view', 'name' => $weixin->bytes_to_emoji(0x- 1F3AF)."我的订单", 'url' => "http:// info.doucube.com/_ fbxxjs/order.php" ), ) );var_dump($weixin->create_menu($button));
上述代码运行后,菜单效果如图23-5所示。
图23-4 微信公众号回复Emoji表情
图23-5 带Emoji表情的自定义菜单