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 }
運行效果: