小型支付商城前期准备

  • 注意:该项目基于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标签
    • 包含微信消息的标准字段:ToUserNameFromUserNameCreateTimeMsgTypeEventEventKey
    • 支持文本消息和事件消息的数据结构

微信模板消息文档

在上面7个字段的基础上加上生成带参的二维码所需要的ticket字段,构成了MessageTextEntity

关于@XStreamAlias注解

SignatureUtil.java

微信签名验证工具

  • 按照微信公众平台提供的签名算法实现
  • 主要用途 :验证请求是否来源于微信服务器,确保通信安全
  • 关键特性
    • 实现了微信要求的SHA-1加密算法
    • 包含字典序排序、字节数组转十六进制字符串等辅助方法
    • 提供 check 方法进行签名验证

什么时候微信服务器会往你的服务器发请求?

当您在微信公众平台(公众号或小程序)的后台配置了“服务器地址”(URL)并启用后,以下几种典型场景下,微信服务器都会向您的服务器发送请求:

  1. 首次验证服务器
    • 场景:您在后台提交您的服务器地址和Token时,微信会立即向该地址发送一个GET请求,包含signature, timestamp, nonce, echostr参数。
    • 目的:就是为了验证“您提供的这个URL背后确实是一个有效的、理解微信协议的服务”。您服务器上的SignatureUtil.check()方法就是用来处理这个请求的。验证通过后,您需要将接收到的echostr参数原样返回给微信。这样,微信才相信您拥有这个服务器,后续才会把重要消息推送给您。
  2. 接收用户消息(消息推送)
    • 场景:当用户在您的公众号里发送文字、图片、语音、位置等消息时,微信服务器会将这些消息打包成一个XML格式的POST请求,发送到您的服务器。
    • 目的:让您的服务器能够处理用户消息,实现自动回复、客服等功能。在处理这些POST请求之前,同样需要先用SignatureUtil.check()验证这个POST请求确实来自微信,而不是黑客伪造的。
  3. 接收事件推送(事件推送)
    • 场景:当发生某些事件时,微信也会通知您的服务器。例如:
    • 关注/取关:用户关注您的公众号或取消关注。
    • 菜单点击:用户点击了您自定义的菜单按钮。
    • 支付成功:用户在小程序或公众号内完成了支付。
    • 模板消息发送结果:您发送的模板消息是否成功送达。
    • 目的:让您的服务器能够响应这些重要事件,更新用户状态、触发积分发放、更新订单状态等。同样,这些请求也需要验证签名。

XmlUtil.java

XML数据处理工具类

  • 根据微信公众平台对XML消息格式的要求实现
  • 主要用途:处理与微信服务器之间的XML数据交互
  • 关键特性
    • 提供 xmlToMap 方法解析微信请求XML
    • 提供 mapToXML 方法构建响应XML
    • 提供 beanToXmlxmlToBean 方法实现对象与XML的相互转换
    • 使用XStreamdom4j库进行XML处理
    • 支持CDATA标记的添加,符合微信消息规范

2. web模块部分

WeixinPortalController

微信公众号后台接口控制器,主要用于与微信服务器进行对接,处理微信公众号的消息接收和事件响应。

同时需要在resources/application-dev.yml下修改配置:

1
2
3
4
5
# 微信公众号对接
weixin:
config:
originalid: #填写你的originalid
token: #填写你的token

如果遇到natapp显示离线状态的情况,也要在web包下的resources/application-dev.ymlport修改为8080