- 注意:该项目基于jdk1.8 (java8),务必确认项目的jdk版本
内容概述
小傅哥项目7-11集的内容,包含类设计与流程分析

1.1. Natapp 内网穿透
- 注意事项:Windows端natapp文件夹内一定要有natapp.exe,下图中没有后缀的版本无法运行
1.2. 微信公众号测试平台
1.3. 支付宝沙箱
直接看好像并没有找到“沙箱”选项,往下滑动,即可看到“沙箱”


2.1 MVC 工程框架搭建 + 基础配置 + Git 使用
1. 新建项目
使用IDEA新建Spring Boot项目,发现没有Java 8的选项。
原因可以参考这篇博客解决IDEA创建SpringBoot项目没有Java版本8

省流解决方案:将最上方服务器URL改为start.aliyun.com
即可解决问题

其他过程略过,如果觉得上述过程麻烦的话,也可以直接clone仓库
s-pay-mall-mvc
- 注意:不要直接在idea中通过版本控制新建项目
- 应该用命令行
git clone <链接>
的方式clone,然后用idea打开文件夹
然后用git将项目还原回历史版本:

2.2 微信公众号鉴权
本节内容:在 mvc 分层框架结构下添加微信公众号鉴权所需的接口,并通过 natapp 内网穿透组件,暴漏本地接口,让微信公众号平台可以配置使用。
1. common模块部分

MessageTextEntity.java
微信消息实体类
- 严格按照微信公众平台消息格式规范实现
- 主要用途 :封装微信公众号消息的数据结构,支持XML与Java对象的相互转换
- 关键特性 :
- 使用
@XStreamAlias
注解映射微信消息的XML标签 - 包含微信消息的标准字段:
ToUserName
、FromUserName
、CreateTime
、MsgType
、Event
、EventKey
等 - 支持文本消息和事件消息的数据结构
- 使用

在上面7个字段的基础上加上生成带参的二维码所需要的ticket
字段,构成了MessageTextEntity
SignatureUtil.java
微信签名验证工具
- 按照微信公众平台提供的签名算法实现
- 主要用途 :验证请求是否来源于微信服务器,确保通信安全
- 关键特性 :
- 实现了微信要求的SHA-1加密算法
- 包含字典序排序、字节数组转十六进制字符串等辅助方法
- 提供 check 方法进行签名验证
什么时候微信服务器会往你的服务器发请求?
当您在微信公众平台(公众号或小程序)的后台配置了“服务器地址”(URL)并启用后,以下几种典型场景下,微信服务器都会向您的服务器发送请求:
- 首次验证服务器
- 场景:您在后台提交您的服务器地址和
Token
时,微信会立即向该地址发送一个GET
请求,包含signature
,timestamp
,nonce
,echostr
参数。 - 目的:就是为了验证“您提供的这个URL背后确实是一个有效的、理解微信协议的服务”。您服务器上的
SignatureUtil.check()
方法就是用来处理这个请求的。验证通过后,您需要将接收到的echostr
参数原样返回给微信。这样,微信才相信您拥有这个服务器,后续才会把重要消息推送给您。
- 场景:您在后台提交您的服务器地址和
- 接收用户消息(消息推送)
- 场景:当用户在您的公众号里发送文字、图片、语音、位置等消息时,微信服务器会将这些消息打包成一个
XML
格式的POST
请求,发送到您的服务器。 - 目的:让您的服务器能够处理用户消息,实现自动回复、客服等功能。在处理这些POST请求之前,同样需要先用
SignatureUtil.check()
验证这个POST
请求确实来自微信,而不是黑客伪造的。
- 场景:当用户在您的公众号里发送文字、图片、语音、位置等消息时,微信服务器会将这些消息打包成一个
- 接收事件推送(事件推送)
- 场景:当发生某些事件时,微信也会通知您的服务器。例如:
- 关注/取关:用户关注您的公众号或取消关注。
- 菜单点击:用户点击了您自定义的菜单按钮。
- 支付成功:用户在小程序或公众号内完成了支付。
- 模板消息发送结果:您发送的模板消息是否成功送达。
- 目的:让您的服务器能够响应这些重要事件,更新用户状态、触发积分发放、更新订单状态等。同样,这些请求也需要验证签名。
XmlUtil.java
XML数据处理工具类
- 根据微信公众平台对XML消息格式的要求实现
- 主要用途:处理与微信服务器之间的XML数据交互
- 关键特性 :
- 提供
xmlToMap
方法解析微信请求XML - 提供
mapToXML
方法构建响应XML - 提供
beanToXml
和xmlToBean
方法实现对象与XML的相互转换 - 使用
XStream
和dom4j
库进行XML处理 - 支持
CDATA
标记的添加,符合微信消息规范
- 提供
2. web模块部分
WeixinPortalController
微信公众号后台接口控制器,主要用于与微信服务器进行对接,处理微信公众号的消息接收和事件响应。
同时需要在resources/application-dev.yml
下修改配置:
1 | # 微信公众号对接 |
如果遇到natapp
显示离线状态的情况,也要在web
包下的resources/application-dev.yml
将port
修改为8080