微信-验证服务器有效性
微信-网页授权获取用户信息

概述

接入微信公众平台开发,开发者需要按照如下步骤完成:

  1. 在自己服务器上,开发验证微信验证服务器地址的有效性逻辑
  2. 在微信平台上,填写自己服务器地址信息
  3. 在自己服务器上,依据微信接口文档实现业务逻辑

第一步:实现验证服务器地址的有效性逻辑

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:

参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。

若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

加密/校验流程如下:

  1. 将token、timestamp、nonce三个参数进行字典序排序
  2. 将三个参数字符串拼接成一个字符串进行sha1加密
  3. 开发者获得加密后的字符串可与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 微信-验证服务器有效性相关推荐

  1. Spring Boot 微信-网页授权获取用户信息

    微信-验证服务器有效性 微信-网页授权获取用户信息 网页授权获取用户信息步骤 第一步:用户同意授权,获取code 第二步:通过code换取网页授权access_token 第三步:拉取用户信息(需sc ...

  2. 如何利用Spring Boot 微信点餐开源系统

    由于细节内容实在太多啦,所以只把部分知识点整理出来粗略的介绍,每个小节点里面都有更细化的内容! 接下来开始分享啦 架构 前后端分离: 补充: setting.xml 文件的作用:settings.xm ...

  3. Spring Boot+微信小程序_保存微信登录者的个人信息

    1. 前言 微信小程序开发平台,提供有一类 API,可以让开发者获取到微信登录用户的个人数据.这类 API 统称为开放接口. Tip:微信小程序开发平台,会把微信登录用户的个人信息分为明文数据和敏感数 ...

  4. Spring Boot DTO 验证示例

    在本教程中,我们将学习如何使用 Hibernate 验证器验证 Spring 启动 REST API DTO 请求. 在Java中,Java Bean Validation框架已经成为处理Java项目 ...

  5. Spring Boot+微信公众号开发Demo(源码见文章最低端)

    目录 微信公众号开发 1.微信公众号简单介绍 2.微信公众号申请 3.开发模式启用以及接口配置 4.消息以及消息处理的工具 5.各种消息的接收与响应 6.图文消息 7.自定义菜单的创建以及菜单的相应 ...

  6. Spring Boot搭建Web服务器,实现用户注册登录功能

    1. 启动一个基础服务器 依据教程:https://blog.csdn.net/qq_27317475/article/details/81119098 2. 安装 MySQL 安装包地址:https ...

  7. Spring Boot项目部署服务器 本地正常 远程无法访问问题排错

    Spring boot项目部署linux 服务器本地正常 远程无法访问 问题描述 排错 原因 最后 最近买个云主机学大佬部署项目..然后直接炸裂了... 问题描述 本地保证代码没问题的情况下( jav ...

  8. 微信公众号_接口测试_验证服务器有效性

    思路: 1.微信服务器知道开发者服务器是哪个 -测试号管理界面上填写url开发者服务器地址 -内网穿透使微信服务器能访问到映射到外网的开发者服务器地址 -填写token,进行加密 2.开发者服务器验证 ...

  9. Spring Boot 微信点餐开源系统

    架构 前后端分离: Nginx与Tomcat的关系在这篇文章,几分钟可以快速了解: " https://www.jianshu.com/p/22dcb7ef9172 补充: setting. ...

  10. 微信验证服务器是怎么回事,微信服务器认证为什么需要这么多参数?

    在进行微信认证开发的时候,官网文档有这样一段话 当时就想为什么这么多参数,都是什么意思?网上有现成的代码,抄下来就可以运行了 可这个疑问一直在心里,百度查询了很多篇文章去解释我这个疑惑,现在就转换成个 ...

最新文章

  1. 最全总结!聊聊 Python 操作PDF的几种方法
  2. AWS EBS是 Elastic Block Store 的简写
  3. centos环境自动化批量安装软件脚本
  4. 【运筹学】线性规划数学模型 ( 单纯形法 | 第二次迭代 | 方程组同解变换 | 生成新单纯形表 | 计算检验数 | 最优解判定 | 线性规划解个数分析 )
  5. 切换控制器的三种手段push modal 切换window的rootViewController
  6. mysql安全性特点_MySQL数据库有哪些特点?为何能得到了广泛应用?
  7. 遥感技术在水利行业的应用
  8. 【随机信号分析】实验(十三)窄带信号分析——随机信号的DSB分析
  9. 使用GSON解析JSON数据
  10. CCNA题库第一部分
  11. Office | Word中插入参考文献
  12. WPF 触摸屏小键盘样式
  13. CSS颜色属性、文本文字属性、属性继承
  14. 网页三剑客,html/css/javascript
  15. 将灰度图片转成三通道(RGB)图片(MatLab)
  16. ANSYS_Designer仿真串扰
  17. CSDN日报20170712——《AI 大行其道,你准备好了吗?》 标签: csdn程序人生 2017-07
  18. idft重建图像 matlab_1周学FFT——第2天 DFT和IDFT的MATLAB实现
  19. 自定义View--太极图
  20. jieba:我虽然结巴,但是我会分词啊

热门文章

  1. 我国制造业供应链管理存在哪些问题?
  2. 2018-2019-1 20165309 20165312 20165330 实验一 开发环境的熟悉
  3. 小米手机显示无法连接服务器错误代码,来电转接出现连接问题或MMI码无效的解决方法...
  4. 如何下载安装chrome扩展程序
  5. Xmy的第二次python(文件操作)
  6. 隔离太无聊!不如用Python实现愤怒的小鸟,看看能否通关!
  7. elasticsearch 配置 之 discovery.zen.ping.unicast.hosts
  8. 《嵌入式开发》实验项目
  9. QQ被盗的自救、事故分析
  10. 摩根大通从AWS和Azure挖人,云计算人才大战开始