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 }

运行效果:

转载于:https://www.cnblogs.com/qijunhui/p/8445359.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值