• 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":"u4e2du56fd","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 = "输入不符规范!
    请按照以下规范进行输入:
    ";
    52                 content_result += "1.回复。如输入“回复:微信”
    ";
    53                 content_result += "2.翻译。如输入“翻译:微信”
    ";
    54                 content_result += "3.计算。如输入“计算:5+2”
    ";
    55                 //注意:下面调用的<a>标签,需要在双引号前使用转义
    56                 content_result += "/::)
    欢迎关注我的博客:<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 }

    运行效果:

  • 相关阅读:
    adb实操
    android默认获取敏感权限
    Android Studio升级到3.4遇到的问题总结
    setOnTouchListener在小米手机中不走ACTION_UP而是走ACTION_CANCEL
    应用中对APK进行安装
    安卓蓝牙开发知识
    一个人开发一个产品,小程序从0到1,第9章 数组
    一个人开发一个产品,小程序从0到1,第8章 字符串
    一个人开发一个产品,小程序从0到1,第7章 数值类型
    一个人开发一个产品,小程序从0到1,第6章 常量变量
  • 原文地址:https://www.cnblogs.com/qijunhui/p/8445359.html
Copyright © 2020-2023  润新知