很多人在刚刚开始接触公众号开发的时候,对公众号后台的服务器设置很迷茫,不知道怎么配置。我简单的给大家介绍一下。
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;
}
}
}
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、发送消息回复功能实现
(开始发开,我们给公众号发送什么,公众号做出对应的回复功能)
回复文本消息的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