程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 微信公眾帳號開發教程第11篇-符號表情的發送(上)

微信公眾帳號開發教程第11篇-符號表情的發送(上)

編輯:關於PHP編程

題外話(可以略過)

相信這篇文章已經讓大家等的太久了,不是我故弄玄虛、吊大家胃口,而是寫一篇文章真的需要花太多的時間。也許一篇文章,你們花3-5分鐘就看完了、就學會掌握了,而我卻要花2-3個小時的時間來完成,也許只有用心寫過文章的人才能體會,希望大家能夠相互體諒!

 

也曾經有人對我說,我寫的東西太初級,都是入門級的東西。好吧,我承認眾口難調,很難滿足所有的讀者,再加上我自己也只是個新手,一個4月前才聽說微信公眾平台這個詞的初學者,謝謝你們以不同方式對我的激勵,我會更加努力的!

 

第9篇文章介紹了QQ表情的發送與接收。在此之後,很多朋友問我如何發emoji表情(微信上叫符號表情),也就讓我有了寫這篇文章的決心。在此之前,我在網上進行了大量的搜索,發現根本沒有介紹這方面的文章,並且在微信公眾帳號開發官方交流群裡提問,也少有人知道該如何發送emoji表情。今天,就讓我們一起來揭開它的神秘面紗!

 

文章概要

本文重點介紹如何在微信公眾帳號開發模式下,通過程序代碼向用戶發送符號表情。至於如何識別用戶發送的是符號表情,就不在此講解了,留給大家一點學習思考的空間。我只是給大家一個提示:用戶向公眾帳號發送符號表情,其實也是一條文本消息,這與QQ表現是一樣的,即然是文本消息,將接收的符號表情內容打印到日志,不就知道每個表情對應的文本了嗎?呵呵,當然也沒有這麼簡單,並不是像其他文本消息,這裡需要對接收到符號表情消息先做編碼的轉換。好了,就提示這麼多。

 

認識符號表情

在公眾帳號的主交互界面,窗口底部的輸入框旁邊有一個笑臉的圖片按鈕,點擊它將會彈出表情選擇界面,可選擇的表情依次為“QQ表情”、“符號表情”和“動畫表情”,我們選擇“符號表情”,將會看到如下圖所示界面:

\

可以持看出,相比QQ表情,符號表情要更加實用。為什麼這麼說呢?因為QQ表情大都是臉部表情,而符號表情除了臉部表情外,還有很多與生活息息相關的表情,例如:動物、花朵、樹木、電視、電話、電腦、吉它、球類、交通工具等等。如果能在消息中使用符號表情,會不會顯得更加生動、有趣呢?

再來看看小q機器人中使用符號表情的效果,先上兩張圖:

\  \

左邊截圖是小q機器人的主菜單,在Q友圈文字旁邊的那個表情就是符號表情,是一女一男兩人小朋友,示意著在Q友圈裡可以結識到更多的朋友,不要想歪了,^_^。右邊截圖是人臉識別功能的使用指南,裡面的“相機”、“鬼臉”也是符號表情,這樣看上去是不是更加有趣味性呢?如果是純文本,一定會顯得太單調、太枯燥了。

 

Emoji表情的分類

Emoji表情有很多種版本,包括Unified、DoCoMo、KDDI、Softbank和Google,而且不同版本的表情代碼也不一樣,更可惡的是:不同的手機操作系統、甚至是同一操作系統的不同版本所支持的emoji表情又不一樣。所以,完美主義者可以止步了,因為目前emoji表情並不能保證在所有終端上都能正常使用。

慶幸的是,我已經在超過10余部終端上測試過emoji表情的使用,這其中包括iPhone 4S、iPhone 5、Android 2.2、Android 4.0+、Win8、iPad2,只有極個別終端上顯示不出來或顯示為一個小方格,所以並沒有什麼太大的影響,也就可以放心使用了!

 

Emoji表情代碼表之Unified版本

上面介紹的幾種版本的emoji表情,都是通過unicode編碼來表示的。換言之,不同版本的emoji表情對應的unicode編碼值也不一樣。本篇文章,我先給出Unified版本emoji表情的代碼表,如下圖所示:

\\\\\

 

公眾帳號如何向用戶發送emoji表情

上面已經給出了emoji表情的unified unicode代碼對照表,那麼這些代碼要如何使用,才能發送出對應的emoji表情呢?如果你只是簡單的像使用QQ表情代碼那樣,直接在文本消息的Content裡寫emoji表情代碼,一定是會原樣顯示的。

這裡需要用到一個Java方法做轉換處理,方法的代碼如下:

/**
 * emoji表情轉換(hex -> utf-16)
 * 
 * @param hexEmoji
 * @return
 */
public static String emoji(int hexEmoji) {
	return String.valueOf(Character.toChars(hexEmoji));
}

方法說明:例如,“自行車”的unicode編碼值為U+1F6B2,如果我們要在程序代碼中使用“自行車”這個emoji表情,需要這樣使用:

String bike = String.valueOf(Character.toChars(0x1F6B2));

其實前面那個emoji()方法就是對上面這行代碼做了個簡單的封裝而以。現在知道如何使用emoji表情代碼了吧,其實就是將代碼表中的U+替換為0x,再調用emoji方法進行轉換,將轉換後的結果放在文本消息的Content中,返回給用戶就會顯示emoji表情了。

下面,我給出一個使用emoji表情的完整示例,如下:

package org.liufeng.course.service;

import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.liufeng.course.message.resp.TextMessage;
import org.liufeng.course.util.MessageUtil;

/**
 * 核心服務類
 * 
 * @author liufeng
 * @date 2013-05-20
 */
public class CoreService {
	/**
	 * 處理微信發來的請求
	 * 
	 * @param request
	 * @return
	 */
	public static String processRequest(HttpServletRequest request) {
		String respMessage = null;
		try {
			// xml請求解析
			Map<String, String> requestMap = MessageUtil.parseXml(request);

			// 發送方帳號(open_id)
			String fromUserName = requestMap.get("FromUserName");
			// 公眾帳號
			String toUserName = requestMap.get("ToUserName");

			// 回復文本消息
			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("自行車" + emoji(0x1F6B2) + " 男性" + emoji(0x1F6B9) + " 錢袋" + emoji(0x1F4B0));
			respMessage = MessageUtil.textMessageToXml(textMessage);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return respMessage;
	}

	/**
	 * emoji表情轉換(hex -> utf-16)
	 * 
	 * @param hexEmoji
	 * @return
	 */
	public static String emoji(int hexEmoji) {
		return String.valueOf(Character.toChars(hexEmoji));
	}
}

上面代碼的作用是:不管用戶發送什麼類型的消息,都返回包含三個emoji表情的文本消息。如果不明白CoreService類怎麼回事,請查看本系列教程的第5篇,或者你只需要認真看第42行代碼,就知道怎麼樣把emoji表情代碼放在文本消息的Content中了。最後再來看下運行效果截圖:

\

本篇文章要講的內容就至此結束了,但關於emoji表情的講解還沒有結束,為什麼這麼說呢?請仔細看本篇文章的第二張截圖,也就是小q機器人的文本菜單,裡面用到的emoji表情在本文給出的emoji代碼表裡根本找不到(微信上的emoji表情與代碼表中完全一致),那這個emoji表情又是如何發送的呢,請聽下回分解!

 

如果覺得文章對你有所幫助,請通過留言或關注微信公眾帳號xiaoqrobot來支持柳峰哦!

\

轉帖請注明本文出自柳峰的博客(http://blog.csdn.net/lyq8479),請尊重他人的辛勤勞動成果,謝謝!

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved