公众号开发——自动回复功能

步骤

  1. 编写公众号接口程序–采用SpringBoot编写
  2. 部署程序
  3. 申请公众号和配置公众号
  4. 参考资料

编写公众号接口程序

公众号官方接口说明

  1. 验证服务器配置是否正确接口
    2. 在这里插入图片描述
  2. 接受文本信息接口
    3.

编写程序接口

  1. 验证服务器配置是否正确接口
    @GetMapping("/gong")
    public void getGong(HttpServletRequest request , HttpServletResponse response){
        // 微信加密签名
        String signature = request.getParameter("signature");
        // 时间戳
        String timestamp = request.getParameter("timestamp");
        // 随机数
        String nonce = request.getParameter("nonce");
        // 随机字符串
        String echostr = request.getParameter("echostr");
        List<String> params = new ArrayList<String>();
        params.add("english");
        params.add(timestamp);
        params.add(nonce);
        // 1. 将token、timestamp、nonce三个参数进行字典序排序
        Collections.sort(params, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
        // 2. 将三个参数字符串拼接成一个字符串进行sha1加密
        Digester sha1 = new Digester(DigestAlgorithm.SHA1);
        String temp  = sha1.digestHex(params.get(0) + params.get(1) + params.get(2));
        if (temp.equals(signature)) {
            try {
                response.getWriter().write(echostr);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
  1. 接受文本信息接口
 @PostMapping("/gong")
    public void postGong(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 解决乱码
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        // 处理接收消息
        ServletInputStream in = request.getInputStream();
        // 将流转换为字符串
        StringBuilder xmlMsg = new StringBuilder();
        byte[] b = new byte[4096];
        for (int n; (n = in.read(b)) != -1;) {
            xmlMsg.append(new String(b, 0, n, "UTF-8"));
        }
        // 将POST流转换为XStream对象
        XStream xs = new XStream();
        xs.processAnnotations(TencentVO.class);
        // 将xml内容转换为InputMessage对象,![CDATA[]]会自动被去掉
        TencentVO tencentVO = (TencentVO) xs.fromXML(xmlMsg.toString());
        // 服务端
        String servername = tencentVO.getToUserName();
        // 客户端
        String custermname = tencentVO.getFromUserName();
        // 接收时间
        long createTime = tencentVO.getCreateTime();
        // 返回时间
        Long returnTime = Calendar.getInstance().getTimeInMillis() / 1000;

        // 取得消息类型
        String msgType = tencentVO.getMsgType();
        // 根据消息类型获取对应的消息内容
        if (msgType.equals("text")) {
            StringBuffer str = new StringBuffer();
            str.append("<xml>");
            str.append("<ToUserName><![CDATA[" + custermname + "]]></ToUserName>");
            str.append("<FromUserName><![CDATA[" + servername + "]]></FromUserName>");
            str.append("<CreateTime>" + returnTime + "</CreateTime>");
            str.append("<MsgType><![CDATA[" + msgType + "]]></MsgType>");
            // 回复信息
            String outContent = "欢迎访问我的公众号";
            str.append("<Content><![CDATA[" + outContent + "]]></Content>");
            str.append("</xml>");
            response.getWriter().write(str.toString());
        } else {
            StringBuffer str = new StringBuffer();
            str.append("<xml>");
            str.append("<ToUserName><![CDATA[" + custermname + "]]></ToUserName>");
            str.append("<FromUserName><![CDATA[" + servername + "]]></FromUserName>");
            str.append("<CreateTime>" + returnTime + "</CreateTime>");
            str.append("<MsgType><![CDATA[" + msgType + "]]></MsgType>");
            str.append("<Content><![CDATA[" + "不支持的多媒体" + "]]></Content>");
            str.append("</xml>");
            response.getWriter().write(str.toString());
        }
    }




}

@XStreamAlias("xml")
class TencentVO implements Serializable {
    private static final long serialVersionUID = 1L;
    @XStreamAlias("ToUserName")
    private String ToUserName;
    @XStreamAlias("FromUserName")
    private String FromUserName;
    @XStreamAlias("CreateTime")
    private Long CreateTime;
    @XStreamAlias("MsgType")
    private String MsgType = "text";
    @XStreamAlias("MsgId")
    private Long MsgId;
    // 文本消息
    @XStreamAlias("Content")
    private String Content;

    public String getToUserName() {
        return ToUserName;
    }

    public void setToUserName(String toUserName) {
        ToUserName = toUserName;
    }

    public String getFromUserName() {
        return FromUserName;
    }

    public void setFromUserName(String fromUserName) {
        FromUserName = fromUserName;
    }

    public Long getCreateTime() {
        return CreateTime;
    }

    public void setCreateTime(Long createTime) {
        CreateTime = createTime;
    }

    public String getMsgType() {
        return MsgType;
    }

    public void setMsgType(String msgType) {
        MsgType = msgType;
    }

    public Long getMsgId() {
        return MsgId;
    }

    public void setMsgId(Long msgId) {
        MsgId = msgId;
    }

    public String getContent() {
        return Content;
    }

    public void setContent(String content) {
        Content = content;
    }

    @Override
    public String toString() {
        return "TencentVO{" +
                "ToUserName='" + ToUserName + '\'' +
                ", FromUserName='" + FromUserName + '\'' +
                ", CreateTime=" + CreateTime +
                ", MsgType='" + MsgType + '\'' +
                ", MsgId=" + MsgId +
                ", Content='" + Content + '\'' +
                '}';
    }
}

部署程序

我是购买阿里云的云服务器来部署,然后操作系统是centos7,使用springboot自带的tomcat部署

申请公共号和公众号配置

公众号配置

在这里插入图片描述
注意:端口号只能是80和443

参考资料

公众号
xstream
hutool的sha1加密

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值