微信公众平台开发(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,快速实现验证消息来自微信服务器的功能。

相关文章
|
30天前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
452 7
|
30天前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
502 1
|
1月前
|
小程序 前端开发 测试技术
微信小程序的开发完整流程是什么?
微信小程序的开发完整流程是什么?
110 7
ly~
|
2月前
|
存储 供应链 小程序
除了微信小程序,PHP 还可以用于开发哪些类型的小程序?
除了微信小程序,PHP 还可用于开发多种类型的小程序,包括支付宝小程序、百度智能小程序、抖音小程序、企业内部小程序及行业特定小程序。在电商、生活服务、资讯、工具、娱乐、营销等领域,PHP 能有效管理商品信息、订单处理、支付接口、内容抓取、复杂计算、游戏数据、活动规则等多种业务。同时,在企业内部,PHP 可提升工作效率,实现审批流程、文件共享、生产计划等功能;在医疗和教育等行业,PHP 能管理患者信息、在线问诊、课程资源、成绩查询等重要数据。
ly~
78 6
|
18天前
|
关系型数据库 API 数据库
后端开发的艺术:从零到一构建高效服务器
在数字化时代,后端开发是支撑现代互联网应用的基石。本文旨在探讨后端开发的核心概念、关键技术以及如何构建一个高效的服务器。我们将从基础的编程语言选择开始,逐步深入到数据库设计、API开发和性能优化等关键领域。通过实际案例分析,我们将揭示后端开发的复杂性和挑战性,同时提供实用的解决方案和最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和启发。
|
1月前
|
网络安全 Docker 容器
VScode远程服务器之远程 远程容器 进行开发(五)
VScode远程服务器之远程 远程容器 进行开发(五)
27 1
|
1月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
177 1
|
1月前
|
小程序 前端开发 数据安全/隐私保护
微信小程序全栈开发中的身份认证与授权机制
【10月更文挑战第3天】随着移动互联网的发展,微信小程序凭借便捷的用户体验和强大的社交传播能力,成为企业拓展业务的新渠道。本文探讨了小程序全栈开发中的身份认证与授权机制,包括手机号码验证、微信登录、第三方登录及角色权限控制等方法,并强调了安全性、用户体验和合规性的重要性,帮助开发者更好地理解和应用这一关键技术。
61 5
|
1月前
|
小程序 前端开发 JavaScript
微信小程序全栈开发中的PWA技术应用
【10月更文挑战第3天】微信小程序作为新兴应用形态,凭借便捷体验与社交传播能力,成为企业拓展业务的新渠道。本文探讨了微信小程序全栈开发中的PWA技术应用,包括离线访问、后台运行、桌面图标及原生体验等方面,助力开发者提升小程序性能与用户体验。PWA技术在不同平台的兼容性、性能优化及用户体验是实践中需注意的关键点。
59 5
|
1月前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
526 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机