Spring Boot 微信-验证服务器有效性
微信-验证服务器有效性
微信-网页授权获取用户信息
概述
接入微信公众平台开发,开发者需要按照如下步骤完成:
- 在自己服务器上,开发验证微信验证服务器地址的有效性逻辑
- 在微信平台上,填写自己服务器地址信息
- 在自己服务器上,依据微信接口文档实现业务逻辑
第一步:实现验证服务器地址的有效性逻辑
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:
参数 | 描述 |
---|---|
signature | 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 |
timestamp | 时间戳 |
nonce | 随机数 |
echostr | 随机字符串 |
开发者通过检验signature对请求进行校验(下面有校验方式)。
若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
加密/校验流程如下:
- 将token、timestamp、nonce三个参数进行字典序排序
- 将三个参数字符串拼接成一个字符串进行sha1加密
- 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
java代码:
package com.jeiker.demo.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;@RestController
@RequestMapping("/wechat")
public class WeChatController {private Logger logger = LoggerFactory.getLogger(getClass());// URL: http://www.xxxx.com/wechat/// Token: 此处TOKEN即为微信接口配置信息的Tokenprivate String TOKEN = "wechat";/*** 验证微信后台配置的服务器地址有效性** 接收并校验四个请求参数** @param signature 微信加密签名* @param timestamp 时间戳* @param nonce 随机数* @param echostr 随机字符串* @return echostr*/@GetMapping("/")public String checkName(@RequestParam(name = "signature") String signature,@RequestParam(name = "timestamp") String timestamp,@RequestParam(name = "nonce") String nonce,@RequestParam(name = "echostr") String echostr) {logger.info("微信-开始校验签名");logger.info("收到来自微信的 echostr 字符串:{}", echostr);// 加密/校验流程如下:
// 1. 将token、timestamp、nonce三个参数进行字典序排序
// 2. 将三个参数字符串拼接成一个字符串进行sha1加密
// 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信// 1.排序String sortString = sort(TOKEN, timestamp, nonce);// 2.sha1加密String myString = sha1(sortString);// 3.字符串校验if (myString != null && myString != "" && myString.equals(signature)) {logger.info("微信-签名校验通过");//如果检验成功原样返回echostr,微信服务器接收到此输出,才会确认检验完成。logger.info("回复给微信的 echostr 字符串:{}", echostr);return echostr;} else {logger.error("微信-签名校验失败");return "";}}/*** 排序方法* @param token Token* @param timestamp 时间戳* @param nonce 随机数* @return*/public String sort(String token, String timestamp, String nonce) {String[] strArray = {token, timestamp, nonce};Arrays.sort(strArray);StringBuilder sb = new StringBuilder();for (String str : strArray) {sb.append(str);}return sb.toString();}/*** 将字符串进行sha1加密** @param str 需要加密的字符串* @return 加密后的内容*/public String sha1(String str) {try {MessageDigest digest = MessageDigest.getInstance("SHA-1");digest.update(str.getBytes());byte messageDigest[] = digest.digest();// 创建 16进制字符串StringBuffer hexString = new StringBuffer();// 字节数组转换为 十六进制 数for (int i = 0; i < messageDigest.length; i++) {String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);if (shaHex.length() < 2) {hexString.append(0);}hexString.append(shaHex);}return hexString.toString();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return "";}
}
第二步:在微信公众号平台上填写服务器配置
登录微信公众平台官网后,在公众平台后台管理页面 - 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。
信息填写好了后,点击“提交”按钮(这里以测试平台为例):
微信将会发出一个GET的验证请求到所填写的URL上,这时后端会收到请求输出日志:
echostr验证后,原样返回给微信服务器,就完成了服务器地址的验证。
服务器日志输出:
微信-开始校验签名
收到来自微信的 echostr 字符串:4868431563403787247
微信-签名校验通过
回复给微信的 echostr 字符串:4868431563403787247
第三步:依据接口文档实现业务逻辑
验证URL有效性成功后即接入生效,成为开发者。
如果公众号类型为服务号(订阅号只能使用普通消息接口),可以在公众平台网站中申请认证,认证成功的服务号将获得众多接口权限,以满足开发者需求。
Spring Boot 微信-验证服务器有效性相关推荐
- Spring Boot 微信-网页授权获取用户信息
微信-验证服务器有效性 微信-网页授权获取用户信息 网页授权获取用户信息步骤 第一步:用户同意授权,获取code 第二步:通过code换取网页授权access_token 第三步:拉取用户信息(需sc ...
- 如何利用Spring Boot 微信点餐开源系统
由于细节内容实在太多啦,所以只把部分知识点整理出来粗略的介绍,每个小节点里面都有更细化的内容! 接下来开始分享啦 架构 前后端分离: 补充: setting.xml 文件的作用:settings.xm ...
- Spring Boot+微信小程序_保存微信登录者的个人信息
1. 前言 微信小程序开发平台,提供有一类 API,可以让开发者获取到微信登录用户的个人数据.这类 API 统称为开放接口. Tip:微信小程序开发平台,会把微信登录用户的个人信息分为明文数据和敏感数 ...
- Spring Boot DTO 验证示例
在本教程中,我们将学习如何使用 Hibernate 验证器验证 Spring 启动 REST API DTO 请求. 在Java中,Java Bean Validation框架已经成为处理Java项目 ...
- Spring Boot+微信公众号开发Demo(源码见文章最低端)
目录 微信公众号开发 1.微信公众号简单介绍 2.微信公众号申请 3.开发模式启用以及接口配置 4.消息以及消息处理的工具 5.各种消息的接收与响应 6.图文消息 7.自定义菜单的创建以及菜单的相应 ...
- Spring Boot搭建Web服务器,实现用户注册登录功能
1. 启动一个基础服务器 依据教程:https://blog.csdn.net/qq_27317475/article/details/81119098 2. 安装 MySQL 安装包地址:https ...
- Spring Boot项目部署服务器 本地正常 远程无法访问问题排错
Spring boot项目部署linux 服务器本地正常 远程无法访问 问题描述 排错 原因 最后 最近买个云主机学大佬部署项目..然后直接炸裂了... 问题描述 本地保证代码没问题的情况下( jav ...
- 微信公众号_接口测试_验证服务器有效性
思路: 1.微信服务器知道开发者服务器是哪个 -测试号管理界面上填写url开发者服务器地址 -内网穿透使微信服务器能访问到映射到外网的开发者服务器地址 -填写token,进行加密 2.开发者服务器验证 ...
- Spring Boot 微信点餐开源系统
架构 前后端分离: Nginx与Tomcat的关系在这篇文章,几分钟可以快速了解: " https://www.jianshu.com/p/22dcb7ef9172 补充: setting. ...
- 微信验证服务器是怎么回事,微信服务器认证为什么需要这么多参数?
在进行微信认证开发的时候,官网文档有这样一段话 当时就想为什么这么多参数,都是什么意思?网上有现成的代码,抄下来就可以运行了 可这个疑问一直在心里,百度查询了很多篇文章去解释我这个疑惑,现在就转换成个 ...
最新文章
- 最全总结!聊聊 Python 操作PDF的几种方法
- AWS EBS是 Elastic Block Store 的简写
- centos环境自动化批量安装软件脚本
- 【运筹学】线性规划数学模型 ( 单纯形法 | 第二次迭代 | 方程组同解变换 | 生成新单纯形表 | 计算检验数 | 最优解判定 | 线性规划解个数分析 )
- 切换控制器的三种手段push modal 切换window的rootViewController
- mysql安全性特点_MySQL数据库有哪些特点?为何能得到了广泛应用?
- 遥感技术在水利行业的应用
- 【随机信号分析】实验(十三)窄带信号分析——随机信号的DSB分析
- 使用GSON解析JSON数据
- CCNA题库第一部分
- Office | Word中插入参考文献
- WPF 触摸屏小键盘样式
- CSS颜色属性、文本文字属性、属性继承
- 网页三剑客,html/css/javascript
- 将灰度图片转成三通道(RGB)图片(MatLab)
- ANSYS_Designer仿真串扰
- CSDN日报20170712——《AI 大行其道,你准备好了吗?》 标签: csdn程序人生 2017-07
- idft重建图像 matlab_1周学FFT——第2天 DFT和IDFT的MATLAB实现
- 自定义View--太极图
- jieba:我虽然结巴,但是我会分词啊
热门文章
- 我国制造业供应链管理存在哪些问题?
- 2018-2019-1 20165309 20165312 20165330 实验一 开发环境的熟悉
- 小米手机显示无法连接服务器错误代码,来电转接出现连接问题或MMI码无效的解决方法...
- 如何下载安装chrome扩展程序
- Xmy的第二次python(文件操作)
- 隔离太无聊!不如用Python实现愤怒的小鸟,看看能否通关!
- elasticsearch 配置 之 discovery.zen.ping.unicast.hosts
- 《嵌入式开发》实验项目
- QQ被盗的自救、事故分析
- 摩根大通从AWS和Azure挖人,云计算人才大战开始