SpringBoot开发微信公众号_回复文本信息功能

公众号开发须知

很多人在刚刚开始接触公众号开发的时候,对公众号后台的服务器设置很迷茫,不知道怎么配置。我简单的给大家介绍一下。
1、如果你是想做信息回复功能的,就是你给公众号发相关的关键字,公众号直接给你回复相关内容。你只需要配置这些地方

2、如果你要做其他功能的开发,比如要获取微信用户的个人基本信息,则你要多配置一下这个地方(上面的第一点也要先配置好)

###案例演示

效果图

实现步骤

1、注册公众号(这里不演示,我的公众号是认证服务号)
2、后端开发对接公众号功能开发
3、公众号后台服务器配置信息填写验证(需要用到内网穿透)
4、发送消息回复功能实现

操作演示开始

1、注册公众号
这里不演示,如果不会可以联系小编
2、后端开发对接公众号功能开发
2.1、创建一个springboot项目

项目目录结构:

2.2、修改pom.xml文件,导入相关的jar坐标

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.9</version>
        </dependency>
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>
    </dependencies>

2.3、修改application.properties文件

##项目端口号
server.port = 80
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/websocket
spring.datasource.username=root
spring.datasource.password=123456

注意:mysql配置,虽然项目中没有涉及到这个,但是也要配置,不然项目启动不了,你可以随便创建一个数据库什么都可以不用操作

错误截图:

2.4、编写公众号接口参数效验工具类
EchostrCheckUtil.java

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
/**
 * 验证微信服务器配置接入
 */
public class EchostrCheckUtil {
    private static final String token = "填入你的token,需要和公众号配置一致";
       /**
     * 开发者通过检验signature对请求进行校验(下面有校验方式)。
     * 若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,
     * 否则接入失败。加密/校验流程如下:
     * 1)将token、timestamp、nonce三个参数进行字典序排序
     * 2)将三个参数字符串拼接成一个字符串进行sha1加密
     * 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
     */
    public static String checkSignature(HttpServletRequest request) {
        //微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数
        String signature = request.getParameter("signature");
        //时间戳
        String timestamp = request.getParameter("timestamp");
        //随机数
        String nonce = request.getParameter("nonce");
        //随机字符串
        String echostr = request.getParameter("echostr");
        String[] str = new String[]{token, timestamp, nonce};
        //排序
        Arrays.sort(str);
        //拼接字符串
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < str.length; i++) {
            buffer.append(str[i]);
        }
        //进行sha1加密
        String temp = SHA1.encode(buffer.toString());
        //与微信提供的signature进行匹对
        if (signature.equals(temp)) {
            return echostr;
        } else {
            return null;
        }
    }
}

此处可以参考公众号开发文档:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html

2.4、编写公众号接入校验类接口
WxController.java

@Controller
public class WxController {
    //token验证接入接口
    @GetMapping("wx")
    public String login(HttpServletRequest request){
        return EchostrCheckUtil.checkSignature(request);
    }
    }

注意:这里的请求地址是http://你的域名/wx,这个需要和公众号的服务器地址配置一致
2.5、启动项目,然后去公众号后台配置服务器信息
3、公众号后台服务器配置信息填写验证(需要用到内网穿透)

3.1、需要通过内网穿透,把你本地的服务器映射出去,这样外网才能访问到你电脑的项目,我用的是ngrok

安装演示(不懂可以练习小编xxf960513


注意如上图:Forwarding后面对应的地址就是你内网穿透给你生成的映射地址,你本地电脑启动项目,可以用手机访问改地址就能访问到你电脑的项目了。
4、发送消息回复功能实现(开始发开,我们给公众号发送什么,公众号做出对应的回复功能)

开发回复功能之前,先给大家简单的介绍一下
1、公众号回复消息的类型有:
1 回复文本消息
2 回复图片消息
3 回复语音消息
4 回复视频消息
5 回复音乐消息
6 回复图文消息
2、回复的格式是:xml

回复文本消息的xml格式

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>12345678</CreateTime>
  <MsgType><![CDATA[text]]></MsgType>
  <Content><![CDATA[你好]]></Content>
</xml>

4.1、创建一个文本消息的pojo类
TextMessage.java

public class TextMessage {
    protected String ToUserName;//接收方账号
    protected String FromUserName;//开发者微信号
    protected long CreateTime;//消息创建时间
    protected String MsgType;//消息类型
    private String Content;//文本消息内容
    private String MsgId;//消息id,64位整型
    ...(此处省略get和set方法)
    }

4.2、创建一个普通文本回复的工具类,回复消息之前需要转成微信公众号需要的xml格式

public class TextMessageUtil implements BaseMessageUtil<TextMessage> {

    //把pojo对象转成微信回复需要的xml格式对应的字符串
    @Override
    public String messageToxml(TextMessage message) {
        XStream xstream = new XStream();
        xstream.alias("xml", message.getClass());
        return xstream.toXML(message);
    }

    //普通消息
    @Override
    public String initMessage(String FromUserName, String ToUserName) {
        return null;
    }

    public String initMessage(String FromUserName, String ToUserName, String Content) {
        TextMessage text = new TextMessage();
        text.setToUserName(FromUserName);
        text.setFromUserName(ToUserName);
        text.setContent("您输入的内容是:" + Content);
        text.setCreateTime(System.currentTimeMillis());
        text.setMsgType("text");
        return messageToxml(text);

    }
}

4.3、创建一个MessageController类,用于接收用户给公众号发送的信息,收到消息后进行回复的接口
MessageController.java

@RestController
public class MessageController {
    @PostMapping("/wx")
    public String answerMessage(HttpServletRequest request, HttpServletResponse response){
        response.setCharacterEncoding("utf-8");
        //将微信请求xml转为map格式,获取所需的参数
        Map<String,String> map = MessageUtil.xmlToMap(request);
        //开发者微信号
        String ToUserName = map.get("ToUserName");
       // 发送方帐号(一个OpenID)
        String FromUserName = map.get("FromUserName");
        //获取用户发过来的消息类型,文本为text
        String MsgType = map.get("MsgType");
        //文本消息内容
        String Content = map.get("Content");

        String message = null;
        //处理文本类型,实现输入回复相应的封装的内容
        if("text".equals(MsgType)){
            TextMessageUtil textMessage = new TextMessageUtil();
            message = textMessage.initMessage(FromUserName, ToUserName,Content);
            return message;
        }else {
            return null;
        }
    }
}

注意:这个请求地址需要与验证token接入的请求地址一样,这样才能获取用户给公众号发送的内容
4.4、启动项目给公众号回复消息进行测试。结果:

​ --完–

本案的完整源码获取方式

https://gitee.com/xuxiaofei1996/springboot_gongzhonghao1.git

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值