微信公众平台开发(5)--验证消息的确来自微信服务器

简介: 本文目录1. 前言2. 构建项目2.1 构建SpringBoot项目2.2 编写配置文件2.3 编写启动类3. 验证消息来自微信3.1 获取公众号参数3.2 开发公众平台配置类3.3 验证消息方法的调用4. 小结

1. 前言

上一篇中,我们已经成功配置并启用了服务器信息,微信官方已经任何我们的服务器是合法的了。


但是这中间还有一个问题,就是我们如何能确认我们收到的消息是合法的呢,也就是说我们如何确认我们收到的消息是微信发出的而不是伪造的?


这就需要我们验证消息是否的确来自微信服务器了。


2. 构建项目

我们需要一个项目,将微信开发相关的代码放到里面。


2.1 构建SpringBoot项目

使用Maven构建一个Spring Boot项目,然后pom.xml配置如下。


需要注意的是,我们引入了weixin-java-mp,这是开源的封装好的微信JavaSDK,GitHub高星项目,我们引入该SDK可以大大提高我们的开发效率,不用从头造轮子了。


<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>

 <groupId>org.springframework.boot</groupId>

 <artifactId>spring-boot-starter-parent</artifactId>

 <version>2.2.5.RELEASE</version>

 <relativePath /> <!-- lookup parent from repository -->

</parent>

<groupId>cn.pandabrother</groupId>

<artifactId>wx-server</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>war</packaging>

<properties>

 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

 <java.version>1.8</java.version>

 <maven-jar-plugin.version>3.0.0</maven-jar-plugin.version>

</properties>

<dependencies>

 <dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-web</artifactId>

 </dependency>

 <dependency>

  <groupId>org.projectlombok</groupId>

  <artifactId>lombok</artifactId>

 </dependency>

 <dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-devtools</artifactId>

 </dependency>

 <!-- 微信公众号 -->

 <dependency>

  <groupId>com.github.binarywang</groupId>

  <artifactId>weixin-java-mp</artifactId>

  <version>4.1.0</version>

 </dependency>

</dependencies>

<build>

 <plugins>

  <plugin>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-maven-plugin</artifactId>

  </plugin>

 </plugins>

</build>

</project>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

2.2 编写配置文件

编写applicaiton.yml配置文件如下,所以我们项目从80端口启动,且访问项目的根路径为/wx-server


server:

  port: 80 #端口

  servlet:

     context-path: /wx-server

1

2

3

4

2.3 编写启动类

启动类编写如下,用于快速启动我们的项目:


/**

* SpringBoot启动类

*/

@SpringBootApplication

public class WxServerApplication {

public static void main(String[] args) {

 SpringApplication.run(WxServerApplication.class, args);

}

}

1

2

3

4

5

6

7

8

9

3. 验证消息来自微信

3.1 获取公众号参数

进入【基本配置】菜单,记忆以下参数,这些参数需要配置到我们的代码中。



3.2 开发公众平台配置类

开发微信公众平台配置类如下,注意需要将上图中的参数填入下面的代码中。


该类有两个用途,第一个是注册了wxMpDefaultConfigImpl组件,该组件保存微信公众平台的参数。


第二个是注册了wxMpService组件,该组件用于调用封装好的方法,例如本文需要的验证消息的方法。


/**

* 微信公众平台配置

*/

@Configuration

public class WxMpConfig {


@Bean

public WxMpDefaultConfigImpl wxMpDefaultConfigImpl() {

 WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();

 config.setAppId(""); // 设置微信公众号的appid

 config.setSecret(""); // 设置微信公众号的app corpSecret

 config.setToken(""); // 设置微信公众号的token

 config.setAesKey(""); // 设置微信公众号的EncodingAESKey

 return config;

}


@Bean

public WxMpService wxMpService() {

 WxMpService wxMpService = new WxMpServiceImpl();// 实际项目中请注意要保持单例,不要在每次请求时构造实例,具体可以参考demo项目

 wxMpService.setWxMpConfigStorage(wxMpDefaultConfigImpl());

 return wxMpService;

}

}


3.3 验证消息方法的调用

自动注入wxMpService,然后调用其方法验证消息是否来自微信即可。


/**

* 验证控制器

*/

@Controller

public class CheckController {

@Autowired

private WxMpService wxMpService;


// 接入验证

@RequestMapping("/checkToken")

@ResponseBody

public String checkToken(@RequestParam("signature") String signature, @RequestParam("timestamp") String timestamp, @RequestParam("nonce") String nonce, @RequestParam("echostr") String echostr) {

 if (!wxMpService.checkSignature(timestamp, nonce, signature)) {

  // 消息不合法

  return "消息不合法";

 }

 // 消息合法

 return echostr;

}

}


通过调用checkSignature方法,我们就能确定消息是来自微信,而不是恶意伪装的了。如果要保证安全的话,所有来自微信的消息,都应该经过验证,而不仅仅是针对与接入验证这一种消息。


4. 小结

本文介绍了如何快速利用WxJava这一开源SDK,快速实现验证消息来自微信服务器的功能。

相关文章
|
5月前
|
JavaScript 前端开发 应用服务中间件
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
这篇文章分析了Vue项目在服务器部署后出现404错误的原因,主要是由于history路由模式下服务器缺少对单页应用的支持,并提供了通过修改nginx配置使用`try_files`指令重定向所有请求到`index.html`的解决方案。
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
|
1月前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
191 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
5月前
|
开发框架 JavaScript 前端开发
震撼!破解 ASP.NET 服务器控件 Button 执行顺序之谜,颠覆你的开发认知!
【8月更文挑战第16天】在ASP.NET开发中,通过Button控件实现先执行JavaScript再触后台处理的需求十分常见。例如,在用户点击按钮前需前端验证或提示,确保操作无误后再传递数据至后台深度处理。此过程可通过设置Button的`OnClientClick`属性调用自定义JavaScript函数完成验证;若验证通过,则继续触发后台事件。此外,结合jQuery也能达到相同效果,利用`__doPostBack`手动触发服务器端事件。这种方式增强了应用的交互性和用户体验。
59 8
|
2月前
|
安全 开发工具 Swift
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
41 2
|
2月前
|
关系型数据库 API 数据库
后端开发的艺术:从零到一构建高效服务器
在数字化时代,后端开发是支撑现代互联网应用的基石。本文旨在探讨后端开发的核心概念、关键技术以及如何构建一个高效的服务器。我们将从基础的编程语言选择开始,逐步深入到数据库设计、API开发和性能优化等关键领域。通过实际案例分析,我们将揭示后端开发的复杂性和挑战性,同时提供实用的解决方案和最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和启发。
|
3月前
|
网络安全 Docker 容器
VScode远程服务器之远程 远程容器 进行开发(五)
VScode远程服务器之远程 远程容器 进行开发(五)
72 1
|
3月前
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
59 3
|
3月前
|
NoSQL PHP Redis
布谷语音app源码服务器环境配置及技术开发语言
布谷语音app源码服务器环境配置及技术语言研发。。
|
3月前
|
Kubernetes 网络安全 容器
VScode远程服务器进行开发(三)
VScode远程服务器进行开发(三)
70 0
|
4月前
|
开发框架 JavaScript 前端开发

热门文章

最新文章