为了在公众号里配置下图时使用的代码:

Controller层代码:

import com.weixin.wxDemo.service.CheckTokenService;
import lombok.extern.log4j.Log4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@Log4j
@Controller
@RequestMapping("/checkTokenUtil")
public class CheckTokenController {@Autowiredprivate CheckTokenService checkTokenService;/*** 验证消息是否来自微信服务器* signature:微信加密签名* timestamp:时间戳* nonce:随机数* echostr:随机字符串** @param request* @param response* @return*/@RequestMapping(value = "checkToken", method = RequestMethod.GET)public void checkToken(HttpServletRequest request, HttpServletResponse response) throws IOException {String signature = request.getParameter("signature");String timestamp = request.getParameter("timestamp");String nonce = request.getParameter("nonce");String echostr = request.getParameter("echostr");//验证String newStr = checkTokenService.checkToken(signature, timestamp, nonce, echostr);if (!echostr.equals(newStr)) {log.error("消息不是来自微信服务器!");} else {response.getOutputStream().println(echostr);}}
}

Service层代码:

import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Arrays;/*** @Auther: 抹茶冰冰冰* @Date: 2020-04-02* @Description: 验证消息是否来自微信服务器**/
@Service
@RequestMapping("checkTokenService")
public class CheckTokenService {/*** 这里获取的是配置文件里的token的值*/@Value("${weixin.token}")private String token;/**  获取accessToken的服务接口*/@Autowiredprivate GetAccessTokenService getAccessTokenService;public String checkToken(String signature,String timestamp,String nonce,String echostr) {//调用所有接口前都需要获取accessTokenString accessToken = getAccessTokenService.getAccessToken();if(StringUtils.isBlank(accessToken)){return "";}//放入数组,进行字典排序后组成一个字符串。String[] arr = new String[]{token, timestamp, nonce};Arrays.sort(arr);String str = arr[0] + arr[1] + arr[2];//sha1加密,这里可以手写也可以用jar包,我选择用jar包,具体的maven依赖在该系列文章的第一章里。//如果选择手写,可以参考第三段的代码段。String resultMsg = DigestUtils.sha1Hex(str);if (!resultMsg.equals(signature)) {return "";}return echostr;}
}

上一段代码中的sha1加密我使用的是工具包,如果大家需要手写,可以将“ String resultMsg = DigestUtils.sha1Hex(str);”这段代码

修改成如下代码(这段代码不是我写的,具体出处也是各路大神。注意:手写这段代码里的英文都是大写的,在判断相等时要把equals()方法改成equalsIgnoreCase()方法或者将resultMsg转换成小写的也可以):

MessageDigest md = null;String resultMsg = null;try {md = MessageDigest.getInstance("SHA-1");byte[] digest = md.digest(str.getBytes());resultMsg = byteToStr(digest);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}

再在Service里加入如下两个方法:

 private static String byteToStr(byte[] byteArray) {StringBuilder strDigest = new StringBuilder();for (int i = 0; i < byteArray.length; i++) {strDigest.append(byteToHexStr(byteArray[i]));}return strDigest.toString();}private static String byteToHexStr(byte mByte) {char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A','B', 'C', 'D', 'E', 'F' };char[] tempArr = new char[2];tempArr[0] = Digit[(mByte >>> 4) & 0X0F];tempArr[1] = Digit[mByte & 0X0F];String s = new String(tempArr);return s;}

java开发微信服务号(四) 验证消息的确来自微信服务器相关推荐

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

    微信公众号开发,微信服务需要认证服务,官方文档如下: 引入jar包如下: <dependency><groupId>com.github.binarywang</grou ...

  2. 第四章 微信公众号开发之验证消息的确来自微信服务器

    之前直接写了怎么开发,忘了写怎么知道验证消息来自微信服务器,否则无法进行开发,先来看一下官方的开发文档怎么描述的 接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.验证服务器 ...

  3. java实现验证消息的确来自微信服务器

    java实现验证消息的确来自微信服务器 验证消息的确来自微信服务器Get方法 SHA1加密 异常处理 开发者提交信息后,微信服务器将发送 GET 请求到填写的服务器地址 URL 上 GET请求携带参数 ...

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

    点此查看 微信公众号/微信网页/微信支付/企业微信/小程序开发合集及源代码下载 本文目录 1. 前言 2. 构建项目 2.1 构建SpringBoot项目 2.2 编写配置文件 2.3 编写启动类 3 ...

  5. (微信公众号)验证消息的确来自微信服务器

    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319 1. 开发者提交信息后,微信服务器将发送GET请求到填写的服 ...

  6. JAVA连接微信服务号发送模板消息

    最近因为业务需要使用微信服务号推送模板消息,所以就研究了下,在这也回顾和总结下开发流程和注意事项. 1. 微信公众号推送模板消息,需要开通服务号并且需要进行微信认证(这点就不过多记录了).申请到服务号 ...

  7. 微信小程序使用微信服务号推送消息

    使用前提 查看自己是否有发送消息模板接口的权限 点击 消息模板(业务通知)查看相关的api文档 开发版本 开发工具 :IntelliJ IDEA 2022.2.1 数据库 :MySQL Server ...

  8. 解决微信服务号授权域名不够用,微信网页授权回调域名只能设置2个的问题!

    前言 最近在做微信网页项目时,发现服务号授权域名只能有两个,而多个项目都需要用到微信授权获取用户信息,这就导致了域名不够用的问题.如果给每个项目都配一个服务号,这显然是不现实的,不仅需要成本而且很浪费 ...

  9. 微信服务号对接流程记录

    项目背景 以web为主,以微信服务号为媒介,进行用户绑定.并通过菜单进入相应页面进行操作 技术栈 React进行微信对接,页面展示 Java负责数据获取 开始 RTFM,不过看微信的文档确实头疼,感觉 ...

最新文章

  1. NAR:宏基因组网络分析工具MetagenoNets
  2. 纳微科技完成近亿元融资,华兴医疗产业基金独家投资
  3. BERT Word Embeddings Tutorial
  4. SMGP3.0协议的概念知识
  5. MyBatis mapper 注解过程中通过 LanguageDriver 实现动态 SQL
  6. Apache2为什么会自动加载index.php
  7. 为什么电脑不能打字_为什么不能用电脑验光仪测出来的度数直接配眼镜?
  8. 云主机开放端口笔记-mysql远程连接需要的步骤
  9. c++ vector 使用注意事项
  10. 十六、Java四种内部类详解、匿名对象的使用
  11. python 怎么把 写好的代码 放到服务器执行_给 Python 初学者解答了无数遍的 Python 环境相关问题...
  12. 安洵信息渗透工程师面试经验分享
  13. 自定义Unity调色板
  14. 鼠标成十字html,鼠标变成十字如何恢复
  15. built a JNCIS LAB系列:Chapter 4 BGP
  16. C#实现平面图形图像缩放、平移、自定义坐标系
  17. AndroidTV 盒子查看启动apk的包名和类名
  18. BERT—NAACL
  19. 笔记本键盘 Fn 键 的锁定与解锁
  20. 微信|QQ扫码登录网页版二维码失效问题解决方案 网站无法访问PC网页版如何解决 安卓软件历史版本下载 FV fooview悬浮球帮助教程

热门文章

  1. 电脑象棋开发-vc界面图形绘制
  2. 微刊:三代16S多样性文献导读
  3. java纸牌游戏程序报告_java--纸牌游戏自动出牌
  4. 手机震动按摩器:随时随地massage
  5. tomcat----Java之神器
  6. 基于QML的飞行仪表
  7. 成都理工大学_Python程序设计_第4章
  8. OkHttp系列之入门篇
  9. 汇博机器人上市了吗_汇博机器人品牌简介_汇博教学实训机器人_汇博分拣机器人怎么样→十大品牌网...
  10. sql语句之多表关系 一对多 多对多