微信公众号开发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

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。