WeChatFerry/clients/java/wechat-ferry-mvn/README.MD

297 lines
9.3 KiB
Markdown
Vendored
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WeChatFerry Java 客户端 maven版
⚠️ **只支持 Windows** ⚠️
`声明:` 本项目是基于 clients/java/wcferry 项目改造,随着时间推进,项目结构和代码规范逐渐产生分离,使用此项目的人员可参考之前的项目
我们在开发时请尽量保持注释的完整性,便于阅读维护
## 快速使用
### 环境准备
| 名称 | 版本 | 备注 |
|-----------------|-----------|----|
| JDK | 1.8+ | √ |
| Maven | 3.8+ | √ |
| 微信客户端 | 3.9.12.51 | √ |
| WeChatFerry-SDK | 39.5.2 | √ |
| MySQL | 8.0+ | 备用 |
### 下载文件
* 下载 [最新发布的文件](https://github.com/lich0821/WeChatFerry/releases/latest)
### 使用惯用 IDE打开工程
可以直接以WeChatFerry为根目录打开
或者以WeChatFerry/clients/java/wechat-ferry-mvn为根目录打开
### 添加Maven
找到 WeChatFerry/clients/java/wechat-ferry-mvn/pom.xml 文件右键添加到Maven中会自动下载依赖
### 替换对应版本的dll
把刚下载的最新发布文件解压到本项目中的 dll 文件目录下,直接替换原因文件即可
替换 `clients/java/wechat-ferry-mvn/dll` 目录下(也可以在配置文件中改为自定义的目录)
- sdk.dll
- spy.dll
- spy_debug.dll
- DISCLAIMER.md
> 如果之前已经使用本项目启动过微信,此时替换发现替换不了,是因为正则运行的微信客户端正在使用该文件,
> 请退出并关闭微信客户端之后再进行替换
### 修改配置文件
配置文件src/main/resources/application.yml
根据自己的dll目录位置修改配置文件
```yaml
# 本服务参数
wechat:
ferry:
# DLL文件位置
dll-path: E:\WeChatFerry\clients\java\wechat-ferry-mvn\dll\sdk.dll
# socket端口
socket-port: 10086
```
### 数据库修改-目前未使用
为了更好的拓展应用本客户端后续将采用mysql数据库请自行安装mysql数据库
### 编译运行
找到 src/main/java/com/wechat/ferry/WeChatFerryApplication.java 类
直接启动即可
### 访问
启动后springboot自身的端口为 9201 socket的端口为 10086
swagger地址http://localhost:9201/swagger-ui/index.html
### 项目打包
使用maven插件打包
- 先 clean
- 在 install
或者进入到项目根目录使用命令打包
``` shell
cd wechat-ferry-mvn
mvn clean
mvn install
```
打包后的文件在target/wechat-ferry-mvn-0.0.1-SNAPSHOT.jar
## 安装部署
### 服务器环境
| 名称 | 版本 | 备注 |
|-------|--------|----|
| JDK | 1.8+ | √ |
| 微信客户端 | 安装对应版本 | √ |
### 整合安装包
自己在项目中找到对应的文件,手动复制过去
```
wcf
├─dll 核心dll目录
│ ├─sdk.dll sdk文件
│ ├─spy.dll spy文件
│ ├─spy_debug.dll spy文件
│ └─DISCLAIMER.md DISCLAIMER文件
├─bin 命令目录
│ └─run.bat 启动命令
├─config 配置文件目录
│ ├─application.yml 配置文件
│ └─logback-spring.xml 日志配置文件
├─wechat-ferry-mvn-xx.x.x.jar 打包后的源码包
```
### 启动
1.退出微信客户端后台
2.进入命令黑窗口(CMD),并进入到项目目录下
``` shell
cd wcf
```
3.执行启动命令jar名称换成自己的
``` shell
java -Dconfig.dir=./config -jar wechat-ferry-mvn-xx.x.x.jar
```
## 参与开发
### 核心依赖
| 依赖 | 版本 | 说明 |
|---------------|-------------|----------|
| Spring Boot | 2.7.18 | 基础框架 |
| protobuf-java | 3.22.2 | rpc |
| jna | 5.6.0 | 态访问系统本地库 |
| nng-java | 1.4.0 | 本地包 |
| fastjson2 | 2.0.52 | 序列化 |
| dom4j | 2.1.3 | XML解析包 |
| httpclient | 4.5.13 | 客户端请求 |
| validation | 2.0.1.Final | 参数校验 |
| springfox | 3.0.0 | swagger3 |
### 模块结构
```
wechat-ferry-mvn
├─dll 核心dll
│ ├─sdk.dll sdk文件
│ └─readme.txt 本目录说明文件
├─images 图片
│ └─md MD文档图片
├─src 源
│ ├─main 重启命令
│ │ ├─java(com.wechat.ferry) java代码目录
│ │ │ ├─config 配置
│ │ │ ├─constant 常量
│ │ │ ├─controller 控制层(API接口)
│ │ │ ├─entity 聚合模型
│ │ │ │ ├─dto DTO模型
│ │ │ │ ├─po 数据库实体(与表结构一一对应,否则请使用DTO)
│ │ │ │ ├─proto PB实体
│ │ │ │ └─vo 视图层返回体目录
│ │ │ ├─enums 枚举
│ │ │ ├─exception 异常封装
│ │ │ ├─handle 处理层
│ │ │ ├─service 业务层
│ │ │ │ └─impl 业务实现类
│ │ │ ├─strategy 策略层
│ │ │ │ └─impl 策略实现类(如接收到消息之后的事件处理可以放在这里)
│ │ │ ├─task 定时任务
│ │ │ ├─utils 工具层
│ │ │ └─WcferryApplication.java 启动类
│ │ │
│ │ │resources 资源目录
│ │ │ ├─libs 本程序内置依赖包
│ │ │ ├─proto proto文件(此目录打包将被排除)
│ │ │ ├─win32-x86-64 依赖程序
│ │ │ ├─application.yml 本程序主配置文件
│ │ │ └─logback-spring.xml 日志配置文件
├─CHANGELOG.md 更新日志文件
├─pom.xml POM文件
├─README.MD 说明文件
```
### 配置说明
本程序主配置文件为 application.yml
#### 配置参数
本程序内置参数统一前缀wechat.ferry 所有自定义本服务的参数请都放置在此前缀下,如:
```ymal
wechat:
ferry:
# DLL文件位置
dll-path: /dll/sdk.dll
```
### 缩写含义
首先特别通用的缩写这里就不在重复了比如DTO,PO这类
请求入参req
请求出参resp
微信wx
个人微信pp
企业微信cp
微信公众号mp
WeChatFerry框架wcf
.gitkeep占位文件比如我们定义一个文件夹之后为了避免文件夹下无内容导致git未提交上所以会建议此文件阅读时直接忽略此类文件即可
### 生成proto文件
本程序已经集成了生成proto文件的maven插件直接install即可生成proto文件且会在打包程序中去除 src/main/resources/proto
下面的内容,只保留实体类中的文件
默认install会重新根据.proto文件重新生成实体如果不想被替换请删除 src/main/resources/proto 下对应的.proto文件即可
#### 本项目自适配类型
有一些查询数据的自定义返回字段,定义了本项目自身的返回类型,所以 proto 文件不要从其他项目拷贝,不然缺失类型导致接口返回乱码自行负责
如:
```
message RoomData
```
### 提交规范
本模块希望大家使用统一提交格式,便于区分
格式:类型(任务号/缺陷号/没有使用0替代): [模块名称]-[子模块名称]-本次修改的说明
如:
```cmd
feat(0): [java]-[wechat-ferry-mvn]-基础类目录划分迁移及代码格式
```
| 名称 | 版本 |
|------|--------------|
| feat | 新功能 |
| fix | 缺陷 |
| ... | 其他等git规范中的均可 |
### 说明
下面主要是针对一些合作开发者的咨询做统一回复,可以直接忽略。
#### 目录层级拆分太细
其实这个服务是底层服务,目录分细确实会增加开发量,但是针对于后面的拓展和维护上来说,个人感觉利大于弊,
毕竟功能开发完之后,这个服务很少在变动,更多的是阅读,如果能让大家阅读、维护方便,开发时多花点时间能接受。
当然,如果觉得目录太多,可以自己删除点,这样可以少写点代码,目前本项目还是建议保必要的层级隔离
#### 文件名太长
出发点是为了名称进行统一规范化,便于阅读更加方便,只要了解了基础的缩写含义,其实跟自己平时命名一样,
只不过加上了固定的前缀和后缀而已,这样单从文件名就能分析出功能模块及其含义