微信公众号开发1-验证消息的确来自微信服务器

2024-04-19 11:58

本文主要是介绍微信公众号开发1-验证消息的确来自微信服务器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 进入测试号
在这里插入图片描述
2 使用ngrok实现内网穿透
3 验证消息的确来自微信服务器
在这里插入图片描述
WxMessageController.java

package com.torey.shxqgy.shxqgy.controller;import com.torey.shxqgy.shxqgy.service.WxService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;/*** @ClassName:WxMessage* @Description:* @author: Torey*/
@RestController
public class WxMessageController {@Autowiredprivate HttpServletRequest request;@Autowiredprivate HttpServletResponse response;@RequestMapping(value = "/wx/wxRes",method = RequestMethod.GET )public void wxMessageGet(){System.out.println("GET");yanZhengWx();}@RequestMapping(value = "/wx/wxRes",method = RequestMethod.POST )public void wxMessagePost(){System.out.println("POST");}private boolean yanZhengWx() {String signature	=request.getParameter("signature");//微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。String timestamp	=request.getParameter("timestamp");//时间戳String nonce	=request.getParameter("nonce");//随机数String echostr	=request.getParameter("echostr");//随机字符串//校验请求if(WxService.check(timestamp,nonce,signature)){PrintWriter writer = null;try {writer = response.getWriter();} catch (IOException e) {e.printStackTrace();}//原样返回echost参数writer.print(echostr);writer.flush();writer.close();System.out.println("接入成功");}else {System.out.println("接入失败");}return  true;}
}

WxService.java

package com.torey.shxqgy.shxqgy.service;import com.torey.shxqgy.shxqgy.config.WxConfig;
import org.apache.commons.lang3.StringUtils;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;/*** @ClassName:WxService* @Description:* @author: Torey*/
public class WxService {/*** @author: LiTaoFeng* @description:验证签名*/public static boolean check(String timestamp,String nonce,String signature) {//1)将token、timestamp、nonce三个参数进行字典序排序// 2)将三个参数字符串拼接成一个字符串进行sha1加密// 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信//1)将token、timestamp、nonce三个参数进行字典序排序String[] strs=new String[]{WxConfig.TOKEN,timestamp,nonce};Arrays.sort(strs);// 2)将三个参数字符串拼接成一个字符串进行sha1加密String str = StringUtils.join(strs, "");String shal = shal(str);System.out.println(shal);System.out.println(signature);return shal.equalsIgnoreCase(signature);}/*** @author: LiTaoFeng* @description:进行shal加密*/private static String shal(String src){//获取一个加密对象MessageDigest md = null;try {md = MessageDigest.getInstance("sha1");char[] chars={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};StringBuilder sb = new StringBuilder();//加密byte[] digest = md.digest(src.getBytes());//处理加密结果for (byte b : digest) {sb.append(chars[(b>>4)&15]) ;sb.append(chars[b&15]);}return sb.toString();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;}
}

这篇关于微信公众号开发1-验证消息的确来自微信服务器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/917481

相关文章

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4