微信公众号开发1-验证消息的确来自微信服务器_Torey_Li的博客-程序员ITS301

技术标签: 微信公众号开发  

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 {
    
    @Autowired
    private HttpServletRequest request;
    @Autowired
    private 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;
    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/torey_li/article/details/90143183

智能推荐

Skywalking+Nacos实现高可用集群和动态配置_高级盘丝洞的博客-程序员ITS301_skywalking 高可用

注意:Skywalking启动时路径不可为中文(windows)环境介绍#下面是架构图:软件版本信息:nacos:1.3.0 skywalking:8.5.0 elastcisearch:7.7.1nacos+keepalived+haproxy高可用集群搭建#可参考:Nacos高可用集群搭建 - 秋风飒飒吹 - 博客园nacos安装完成后,创建出skywalking命名空间,供后续skywalking使用ES环境搭建#可参考:Elastic Stack:C..

db2数据库之二:基本概念_lhfeng的博客-程序员ITS301

 db2数据库之二:基本概念  1.实例(instance)    一个实例有自己的数据库,并且它的全部数据库分区共享相同的系统目录,它有独立的安全性,它不受其它实例的影响,在一个数据库系统中可以存在多个实例.  2.数据库    db2的数据库在物理上可以多台计算机上或者一台计算机的多个处理器上,但是从逻辑的角度来看,数据库应该是个完整的整体.    每一个数据库都包含一组描述数据的物理和逻辑结

Python图形用户界面和游戏开发_EchoPython的博客-程序员ITS301

基于tkinter模块的GUIGUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述。Python默认的GUI开发模块是tkinter(在Python 3以前的版本中名为Tkinter),从这个名字就可以看出它是基于Tk的,Tk是一个工具包,最初是为Tcl设计的,后来被移植到很多其他的脚本语言中,它提供了跨平台的GUI控件。当然Tk并不是最新和最好的选...

Hadoop3.1.1版本下安装Hive2.3.4,spark_辣条王子的博客-程序员ITS301

在安装Hive前必须确保Hadoop已经安装成功,同样在安装Hive时要注意Hive的版本号和Hadoop的版本号是否兼容。一、安装包的准备Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不...

rocketMQ环境搭建_百里度的博客-程序员ITS301_rocketmq环境搭建

一、Linxu环境下部署官网地址:http://rocketmq.apache.org/docs/quick-start/前提条件:64bit JDK 1.8+下载编译好的安装包:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zipStart Name Server#前面nohup代表后台启动nohup sh bin/mqnamesrv &#查看启动日志

GSON-使用指南(四)_Loser_Keep.的博客-程序员ITS301_gson的使用

本次文章的主要内容:TypeAdapter JsonSerializer与JsonDeserializer TypeAdapterFactory @JsonAdapter注解 TypeAdapter与 JsonSerializer、JsonDeserializer对比 TypeAdapter实例一、TypeAdapterTypeAdapter 是Gson自2.1版本开始提供的一个抽象类,用于接管某种类型的序列化和反序列化过程,包含两个主要方法 write(JsonWriter,T) 和

随便推点

使用 Rest-Assured 测试 REST API_咸鱼的梦想的博客-程序员ITS301

现在,越来越多的 Web 应用转向了 RESTful 的架构,很多产品和应用暴露给用户的往往就是一组 REST API,这样有一个好处,用户可以根据需要,调用不同的 API,整合出自己的应用出来。从这个角度来讲,Web 开发的成本会越来越低,人们不必再维护自己的信息孤岛,而是使用 REST API 互联互通。那么,作为 REST API 的提供者,如何确保 API 的稳定性与正确性呢?全面

Java里的Character类的基本用法_NightReality的博客-程序员ITS301_javacharacter用法

Character类的构造方法 Character ch = new Character('X');Character类的用于判断的基本语句初学者会经常使用的几个方法public static boolean isUpperCase(char ch):判断给定的字符是否是大写字符public static boolean isLowerCase(char ch):判断给定的字符是否是小写字符public static boolean isDigit(char ch):判断给定的字符是否是.

阿里云提醒 网站被WebShell木马后门的处理过程_NicolasLearner的博客-程序员ITS301_webshell后门处理

昨晚凌晨收到新客户的安全求助,说是阿里云短信提示,网站有webshell木马文件被植入,我们SINE安全公司立即成立,安全应急响应小组,客户提供了阿里云的账号密码,随即登陆阿里云进去查看到详情,登陆云盾看到有这样的一个安全提示“网站后门-发现后门(Webshell)文件”事件等级:紧急,影响资产:阿里云ECS:ID,然后贴出了网站木马文件的路径地址:/www/wangzhan/safe/indnx.php。网站安全事件说明:云盾检测到当成有异常进程在尝试向磁盘上写入WEBSHELL后门文件,导致1次入侵

ftp客户上传文件时,通过服务器20端口建立的连接是,FTP客户上传文件时,通过服务器20端口建立的连接是____,FTP客户端应用进程的端口可以为____.A.建立在TCP..._好诗如风的博客-程序员ITS301

正确答案:B,D与大多数Internet服务一样,FTP也采用客户机/服务器模式,客户机与服务器之间利用TCP建立连接。与其他客户机/服务器模式不同,FTP客户机和服务器之间要建立双重连接,一个是控制连接,一个是数据连接。数据连接用于传输数据,当客户机通过控制连接向服务器发出数据传输命令时,便在客户机与服务器之间建立一条数据连接。数据连接建立成功后,开始数据传输,数据传输完成后,数据连接断开。  ...

Windows+Apache环境下配置django框架 超详细_骑着海豚玩的博客-程序员ITS301_apache配置django

目录服务器Windows+Apache环境下配置python的django框架1. 配置python1. 安装python(服务器)2.安装与程序相关的第三库(本地 —— 服务器)2.1 pip配置3.克隆静态资源(本地)2. django配置1.debug修改2. 跨域配置3. 配置数据库(MySQL)3.1 下载安装MySQL3.2 安装MySQL管理工具SQLyog4. 安装mod_wsgi4.1 下载mod_wsgi4.2 安装mod_wsgi5.安装配置Apache5.1 下载Apache5.2

laravel7中的微信小程序登录_the_bestboy的博客-程序员ITS301

后端代码//微信登陆 public function wxLogin(Request $request) { $stdData = array(); //接收小程序端传递的code参数 $code = $request->post('code'); //获取微信授权url $url = sprintf(config('wx.wxLoginUrl'),config('wx.AppID'),con.

推荐文章

热门文章

相关标签