微信公众号开发基础入门

一、申请一个微信公众号
https://mp.weixin.qq.com/

二、接口认证(证明你是一名合法的开发者)

在微信公众平台左侧菜单找到基本配置
微信公众号开发基础入门_第1张图片
微信公众号开发基础入门_第2张图片
开发者ID是注册完就有的,这里要注意的是开发者密码,非常重要,获取密码后,建议保存在文本文档里。还有一个IP白名单是干什么的呢?
开发者访问微信服务器时会携带ID和密码和IP地址,在服务器里IP白名单上的IP地址才允许访问。
微信公众号开发基础入门_第3张图片
点击修改配置

微信公众号开发基础入门_第4张图片
URL是访问地址,借助NATAPP工具获取
https://natapp.cn/
下载64位ZIP,解压出来运行后出现命令窗口,需输入指令。
先在NATAPP网页上找到免费隧道(需注册)
购买一个免费隧道
在这里插入图片描述
在命令窗口中输入 natapp -authtoken=(authtoken下的内容)
微信公众号开发基础入门_第5张图片
成功后显示online,http://…cc即是内网穿透后的地址(付费与免费的区别就是免费的URL每次都是不一样的)。

回到微信公众平台的配置网页,复制地址到URL栏,地址后接controller地址。Token随意取名,随机生成,明文模式。点击提交,提示失败。

打开IDEA新建工程,创建maven项目,因为与controlller交互,所以需要springmvc相关配置文件
1.pom.xml中引入依赖


      org.springframework
      spring-webmvc
      4.3.20.RELEASE
    

导入springmvc.xml配置文件
web.xml中初始化配置文件


    oa
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:spring-mvc.xml
    
    1
  
  
    oa
    /
  

创建controller进行开发者认证

在这里插入图片描述

//1.按字典顺序排序
        TreeSet set = new TreeSet<>();
        set.add(TOKEN);
        set.add(timestamp);
        set.add(nonce);

        //2.将三个参数拼接成一个字符串
        StringBuilder builder = new StringBuilder();
        for(String str:set){
            builder.append(str);
        }

        //3.通过SHA1加密
        String str = SHA1.encode(builder.toString());
        if(str.equals(signature)){
            System.out.println("接入成功");
            return echostr;
        }else {
            System.out.println("接入失败");
            return "failed";
        }

返回字符串需加@ResponseBody注解

再次点击提交,提交成功。

三、利用测试号进行测试
点击开发者工具,选择开发平台测试账号,微信扫码即可。

四、接收并回复用户发送的消息

//接收用户发送过来的信息(xml)
    @PostMapping(value="auth",produces = "text/xml;charset=utf-8")
    @ResponseBody
    public String receive(@RequestBody String strXml) throws DocumentException {
        System.out.println(strXml);

        //1.接收消息
        //sax  dom  dom4j
        //把xml数据变成document对象
        Document document = DocumentHelper.parseText(strXml);
        //得到根节点
        Element rootElement = document.getRootElement();
        //得到节点对象
        Element toUserNameElement = rootElement.element("ToUserName");
        Element fromUserNameElement = rootElement.element("FromUserName");
        //得到消息类型对象
        Element msgTypeElement = rootElement.element("MsgType");
        //得到节点中的数据
        String userNameText = toUserNameElement.getText();
        String fromUserNameElementText = fromUserNameElement.getText();
        String msgTypeElementText = msgTypeElement.getText();
        if("event".equals(msgTypeElementText)){
            Element eventElement = rootElement.element("Event");
            String eventType = eventElement.getText();
            if("subscribe".equals(eventType)){
                //关注
                return newsMessage(fromUserNameElementText,userNameText);
            }else {
                //取消关注
                System.out.println("取消了关注");
                return null;
            }
        }

        //2.回复消息
        Element contentElement = rootElement.element("Content");
        String contentElementText = contentElement.getText();

        String responseText = contentElementText+"hh";
        StringBuilder builder = new StringBuilder();
        builder.append("");
        builder.append("");
        builder.append("");
        builder.append(""+System.currentTimeMillis()+"");
        builder.append("");
        builder.append("");
        builder.append("");

        System.out.println(builder.toString());
        return builder.toString();

你可能感兴趣的:(Java,微信公众号)