Java微信公眾號開發(三)—— 文本超鏈接及表情


1  文本超連接

微信開發中,文本超鏈接的實現其實就是將HTML中的<a>標簽嵌入Java程序中。

以以下代碼為例:

1 <a href=\"http://blog.leanote.com/qce.hui@qq.com\">祁俊輝's Blog</a>

實際上這段代碼將存儲在String類型的變量中。

眾所周知,String類型的值應該使用雙引號括起來的,但是超鏈接中也有雙引號,需要注意的是,在超鏈接雙引號的前面需要加轉義字符“\”,否則編譯器報錯。

2  表情

需要注意:表情雖然呈現的是一個動態表情圖片,但實際上在微信公眾平台的消息接口中卻屬於文本消息類型(text)。

現在微信已改版,不管是QQ表情、emoji表情,或是新增的表情,總之每個表情都有一個與之對應的代碼。這個代碼可以通過往公眾號發送表情的方式查看,公眾號接收到的信息就是這個表情的代碼。

同樣,公眾號若將此代碼以String類型返回給用戶,用戶所看到的會自動轉為表情。

公共表情(即微信支持的表情)可以以這樣的方法發送並正常顯示,若是使用輸入法自帶的表情,可能會因為手機版本、類型不同而導致表情無法正常顯示。

3  代碼更新

 1 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 2     
 3     req.setCharacterEncoding("UTF-8");//轉換編碼方式
 4     resp.setCharacterEncoding("UTF-8");
 5     PrintWriter out = resp.getWriter();//通過PrintWriter返回消息至微信后台
 6         
 7     //接收消息
 8     try {
 9         Map<String,String> map = MessageUtil.xmlToMap(req);
10         String fromUserName = map.get("FromUserName");//發送方帳號(一個OpenID)
11         String toUserName = map.get("ToUserName");//開發者微信號
12         String msgType = map.get("MsgType");//text//如果是文本消息的話,MsgType="text"
13         String content = map.get("Content");//文本消息內容
14         
15         String message = null;//存儲返回的xml文件內容
16         //判斷是否為文本消息
17         if("text".equals(msgType)) {
18             String content_result = null;//存儲返回的文本消息內容
19             //如果是前綴是回復,則返回使用者的話
20             if(content.startsWith("回復:")) {
21                 content_result = "您發送的消息是:" + content.substring(3);//返回消息。注:從第一個分號開始截取
22             }
23             //如果前綴是翻譯,則返回使用者翻譯后的話
24             else if(content.startsWith("翻譯:")) {
25                 //1.先翻譯
26                 final String APP_ID = "20170709000063735";//賬號
27                 final String SECURITY_KEY = "EiXpUVJAu4mLYinEqgzN";//密碼
28                 com.baidu.translate.TransApi api = new com.baidu.translate.TransApi(APP_ID, SECURITY_KEY);
29                 content_result = api.getTransResult(content.substring(3), "auto", "en");
30                 //2.處理翻譯的結果並存儲
31                 //如:{"from":"zh","to":"en","trans_result":[{"src":"\u4e2d\u56fd","dst":"Chinese"}]}
32                 char [] content_result_temp = content_result.toCharArray();
33                 content_result = "";//清空數據
34                 for(int i = content_result_temp.length-5;;i--) {
35                     if(content_result_temp[i] == '"') {
36                         break;
37                     }
38                     content_result = content_result_temp[i] + content_result;
39                 }
40             }
41             //如果是前綴是計算,則返回使用者的計算結果
42             else if(content.startsWith("計算:")) {
43                 //1.先計算
44                 ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
45                 content_result = content.substring(3);
46                 content_result = "" + jse.eval(content_result);
47                 //2.再存儲
48                 content_result = content.substring(3) + "=" + content_result;
49             }
50             else {
51                 content_result = "輸入不符規范!\n請按照以下規范進行輸入:\n";
52                 content_result += "1.回復。如輸入“回復:微信”\n";
53                 content_result += "2.翻譯。如輸入“翻譯:微信”\n";
54                 content_result += "3.計算。如輸入“計算:5+2”\n";
55                 //注意:下面調用的<a>標簽,需要在雙引號前使用轉義\
56                 content_result += "/::)\n歡迎關注我的博客:<a href=\"http://blog.leanote.com/qce.hui@qq.com\">祁俊輝's Blog</a>";
57             }
58                 
59             com.po.TextMessage text = new com.po.TextMessage();
60             text.setFromUserName(toUserName);//注意,這里發送者與接收者調換了
61             text.setToUserName(fromUserName);
62             text.setMsgType("text");//文本類型
63             text.setCreateTime("" + new Date().getTime());//當前時間
64             text.setContent(content_result);
65             //將文本消息轉換為xml
66             message = MessageUtil.textMessageToXml(text);
67             //輸出到控制台
68             System.out.println(message);
69         }
70             
71         out.print(message);//返回消息
72     } catch (DocumentException | ScriptException e) {
73         e.printStackTrace();
74     } finally {
75         out.close();
76     }
77 }

運行效果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM