Skip to content

Commit 4da9f78

Browse files
authored
Merge branch 'binarywang:develop' into develop
2 parents 31b1d06 + 474f4fd commit 4da9f78

695 files changed

Lines changed: 37040 additions & 2602 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/agents/my-agent.agent.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
# Fill in the fields below to create a basic custom agent for your repository.
3+
# The Copilot CLI can be used for local testing: https://gh.io/customagents/cli
4+
# To make this agent available, merge this file into the default repository branch.
5+
# For format details, see: https://gh.io/customagents/config
6+
7+
name: 全部用中文
8+
description: 需要用中文,包括PR标题和分析总结过程
9+
---
10+
11+
# My Agent
12+
13+
- 1、请使用中文输出思考过程和总结,包括PR标题,提交commit信息也要使用中文;
14+
- 2、生成代码时需要提供必要的单元测试代码;
15+
- 3、新增加的代码如果标记作者信息,请注意不要把作者名设为binarywang或者其他无关人员,要改为 GitHub Copilot。

.github/copilot-instructions.md

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
# Copilot Instruction
2+
请始终使用中文生成 Pull Request 的标题、描述和提交信息
3+
4+
5+
# WxJava - 微信 Java SDK 开发说明
6+
7+
WxJava 是一个支持多种微信平台的完整 Java SDK,包含公众号、小程序、微信支付、企业微信、开放平台、视频号、企点等多种功能模块。
8+
9+
**请始终优先参考本说明,只有在遇到与此内容不一致的意外信息时,才退而使用搜索或 bash 命令。**
10+
11+
## 高效开发指南
12+
13+
### 前置条件与环境准备
14+
- **Java 要求**:JDK 8+(项目最低目标为 Java 8)
15+
- **Maven**:推荐 Maven 3.6+(已验证 Maven 3.9.11)
16+
- **IDE**:推荐使用 IntelliJ IDEA(项目针对 IDEA 优化)
17+
18+
### 引导、构建与校验
19+
克隆仓库后按顺序执行以下命令:
20+
21+
```bash
22+
# 1. 基础编译(请勿中断 - 约需 4-5 分钟)
23+
mvn clean compile -DskipTests=true --no-transfer-progress
24+
# 超时时间:建议设置 8 分钟以上。实际时间:约 4 分钟
25+
26+
# 2. 完整打包(请勿中断 - 约需 2-3 分钟)
27+
mvn clean package -DskipTests=true --no-transfer-progress
28+
# 超时时间:建议设置 5 分钟以上。实际时间:约 2 分钟
29+
30+
# 3. 代码质量校验(请勿中断 - 约需 45-60 秒)
31+
mvn checkstyle:check --no-transfer-progress
32+
# 超时时间:建议设置 3 分钟以上。实际时间:约 50 秒
33+
```
34+
35+
重要时间说明:
36+
- 绝对不要中断任意 Maven 构建命令
37+
- 编译阶段耗时最长(约 4 分钟),原因是项目包含 34 个模块
38+
- 后续构建会更快,因为存在增量编译
39+
- 始终使用 `--no-transfer-progress` 以减少日志噪音
40+
41+
### 测试结构
42+
- **测试框架**:TestNG(非 JUnit)
43+
- **测试文件**:共有 298 个测试文件
44+
- **默认行为**:pom.xml 中默认禁用测试(`<skip>true</skip>`
45+
- **测试配置**:测试需要通过 test-config.xml 提供真实的微信 API 凭据
46+
- **注意**:没有真实微信 API 凭据请不要尝试运行测试,测试将会失败
47+
48+
## 项目结构与导航
49+
50+
### 核心 SDK 模块(主要开发区)
51+
- `weixin-java-common/` - 通用工具与基础类(最重要)
52+
- `weixin-java-mp/` - 公众号 SDK
53+
- `weixin-java-pay/` - 微信支付 SDK
54+
- `weixin-java-miniapp/` - 小程序 SDK
55+
- `weixin-java-cp/` - 企业微信 SDK
56+
- `weixin-java-open/` - 开放平台 SDK
57+
- `weixin-java-channel/` - 视频号 / Channel SDK
58+
- `weixin-java-qidian/` - 企点 SDK
59+
60+
### 框架集成模块
61+
- `spring-boot-starters/` - Spring Boot 自动配置 starter
62+
- `solon-plugins/` - Solon 框架插件
63+
- `weixin-graal/` - GraalVM 本地镜像支持
64+
65+
### 配置与质量控制
66+
- `quality-checks/google_checks.xml` - Checkstyle 配置
67+
- `.editorconfig` - 代码格式规则(2 个空格等于 1 个制表)
68+
- `pom.xml` - 根级 Maven 配置
69+
70+
## 开发工作流
71+
72+
### 修改代码的流程
73+
1. 修改前务必先构建以建立干净基线:
74+
```bash
75+
mvn clean compile --no-transfer-progress
76+
```
77+
78+
2. 遵循代码风格(由 checkstyle 强制):
79+
- 缩进使用 2 个空格(不要用制表符)
80+
- 遵循 Google Java 风格指南
81+
- 在 IDE 中安装 EditorConfig 插件
82+
83+
3. 增量验证修改:
84+
```bash
85+
# 每次修改后运行:
86+
mvn compile --no-transfer-progress
87+
mvn checkstyle:check --no-transfer-progress
88+
```
89+
90+
### 提交修改前的必须校验
91+
请务必按顺序完成以下校验步骤:
92+
93+
1. 代码风格校验:
94+
```bash
95+
mvn checkstyle:check --no-transfer-progress
96+
# 必须通过 - 约需 50 秒
97+
```
98+
99+
2. 完整清理构建:
100+
```bash
101+
mvn clean package -DskipTests=true --no-transfer-progress
102+
# 必须成功 - 约需 2 分钟
103+
```
104+
105+
3. 文档:为公共方法和类补充或更新 javadoc
106+
4. 贡献规范:遵循 `CONTRIBUTING.md`,Pull Request 必须以 `develop` 分支为目标
107+
108+
## 模块依赖与构建顺序
109+
110+
### 核心模块依赖(构建顺序)
111+
1. `weixin-graal`(GraalVM 支持)
112+
2. `weixin-java-common`(所有模块的基础)
113+
3. 核心 SDK 模块(mp、pay、miniapp、cp、open、channel、qidian)
114+
4. 框架集成(spring-boot-starters、solon-plugins)
115+
116+
### 主要关系模式
117+
- 所有 SDK 模块都依赖于 `weixin-java-common`
118+
- Spring Boot starters 依赖对应的 SDK 模块
119+
- Solon 插件遵循与 Spring Boot starters 相同的依赖模式
120+
- 每个模块都有单账号与多账号配置支持
121+
122+
## 常见任务与命令
123+
124+
### 验证指定模块
125+
```bash
126+
# 构建单个模块(将 'weixin-java-mp' 替换为目标模块):
127+
cd weixin-java-mp
128+
mvn clean compile --no-transfer-progress
129+
```
130+
131+
### 检查依赖
132+
```bash
133+
# 分析依赖树:
134+
mvn dependency:tree --no-transfer-progress
135+
136+
# 检查依赖更新:
137+
./others/check-dependency-updates.sh
138+
```
139+
140+
### 发布与发布准备
141+
```bash
142+
# 版本检查:
143+
mvn versions:display-property-updates --no-transfer-progress
144+
145+
# 部署(需要凭据):
146+
mvn clean deploy -P release --no-transfer-progress
147+
```
148+
149+
## 重要文件与位置
150+
151+
### 配置文件
152+
- `pom.xml` - 根级 Maven 配置与依赖管理
153+
- `quality-checks/google_checks.xml` - Checkstyle 规则
154+
- `.editorconfig` - IDE 格式化配置
155+
- `.github/workflows/maven-publish.yml` - CI/CD 工作流
156+
157+
### 文档
158+
- `README.md` - 项目概览与使用说明(中文)
159+
- `CONTRIBUTING.md` - 贡献指南
160+
- `demo.md` - 示例项目与演示链接
161+
- 每个模块均有单独的文档与示例
162+
163+
### 测试资源
164+
- `*/src/test/resources/test-config.sample.xml` - 测试配置模板
165+
- 测试运行需要真实的微信 API 凭据
166+
167+
## SDK 使用模式
168+
169+
### Maven 依赖示例
170+
```xml
171+
<dependency>
172+
<groupId>com.github.binarywang</groupId>
173+
<artifactId>weixin-java-mp</artifactId> <!-- 或其他模块 -->
174+
<version>4.7.0</version>
175+
</dependency>
176+
```
177+
178+
### 常见开发区域
179+
- **API 客户端实现**:位于 `*/service/impl/` 目录
180+
- **模型类**:位于 `*/bean/` 目录
181+
- **配置**:位于 `*/config/` 目录
182+
- **工具类**:位于 `weixin-java-common``*/util/` 目录
183+
184+
## 故障排查
185+
186+
### 构建问题
187+
- **OutOfMemoryError**:增加 Maven 内存:`export MAVEN_OPTS="-Xmx2g"`
188+
- **编译失败**:通常为依赖问题 - 先执行 `mvn clean`
189+
- **Checkstyle 失败**:检查 IDE 的 `.editorconfig` 设置
190+
191+
### 常见陷阱
192+
- **测试默认跳过**:这是正常现象 — 测试需要微信 API 凭据
193+
- **多模块变更**:总是在仓库根目录构建,而不是单独模块
194+
- **分支目标**:Pull Request 必须以 `develop` 分支为目标,而不是 `master``release`
195+
196+
## 性能说明
197+
- **首次构建**:由于依赖下载,耗时 4-5 分钟
198+
- **增量构建**:通常更快(约 30-60 秒)
199+
- **Checkstyle**:运行迅速(约 50 秒),应当经常运行
200+
- **IDE 性能**:项目使用 Lombok,请确保启用注解处理
201+
202+
注意:本项目为 SDK 库项目,而非可运行应用。修改应以 API 功能为主,不要改动应用级行为。

.github/workflows/maven-publish.yml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,22 @@ jobs:
3333
VERSION="${BASE_VER}.B"
3434
TAG="v${BASE_VER}"
3535
IS_RELEASE="true"
36-
echo "Matched release commit: VERSION=$VERSION, TAG=$TAG"
36+
echo "Matched test release commit: VERSION=$VERSION, TAG=$TAG"
37+
# 检查并打tag
38+
if git tag | grep -q "^$TAG$"; then
39+
echo "Tag $TAG already exists."
40+
else
41+
git config user.name "Binary Wang"
42+
git config user.email "a@binarywang.com"
43+
git tag -a "$TAG" -m "Release $TAG"
44+
git push origin "$TAG"
45+
echo "Tag $TAG created and pushed."
46+
fi
47+
elif [[ "$COMMIT_MSG" =~ ^:bookmark:\ 发布\ ([0-9]+\.[0-9]+\.[0-9]+)\ 正式版本 ]]; then
48+
VERSION="${BASH_REMATCH[1]}"
49+
TAG="v${VERSION}"
50+
IS_RELEASE="true"
51+
echo "Matched formal release commit: VERSION=$VERSION, TAG=$TAG"
3752
# 检查并打tag
3853
if git tag | grep -q "^$TAG$"; then
3954
echo "Tag $TAG already exists."

README.md

Lines changed: 91 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@
1818
</a>
1919
</div>
2020

21-
### 微信`Java`开发工具包,支持包括微信支付、开放平台、公众号、企业微信、视频号、小程序等微信功能模块的后端开发。
21+
### 微信 `Java` 开发工具包,支持包括微信支付、开放平台、公众号、企业微信、视频号、小程序等微信功能模块的后端开发。
22+
23+
### 特别赞助
2224
<div align="center">
23-
<b>特别赞助</b>
2425
<table cellspacing="0" cellpadding="0" width="500">
2526
<tr>
2627
<td align="center" colspan="3">
@@ -47,31 +48,59 @@
4748
<img height="120" src="https://gitee.com/binary/weixin-java-tools/raw/develop/images/qrcodes/mp.png" alt="mp qrcode">
4849
</a>
4950
</td>
50-
<td align="center">
51-
<a href="https://www.diboot.com?from=wxjava" target="_blank">
52-
<img height="120" src="https://www.diboot.com/img/diboot_ad.png" alt="diboot低代码开发平台">
53-
</a>
51+
<td align="center" style="font-size: 18px; font-weight: bold; vertical-align: middle;">
52+
赞助商招募中
5453
</td>
5554
<td align="center">
56-
<a href="https://www.crmeb.com/xiazai" target="_blank">
57-
<img height="120" src="https://crmebjavamer.oss-cn-beijing.aliyuncs.com/crmebimage/gitee/WechatIMG202.jpg" alt="ad">
55+
<a href="https://github.crmeb.net/u/wxjava" target="_blank">
56+
<img height="120" src="https://crmebjavamer.oss-cn-beijing.aliyuncs.com/crmebimage/image/2026/01/30/0a71b2b3535d42b187fff977c33faa30mh9gipgeja.png" alt="ad">
5857
</a>
5958
</td>
6059
</tr>
6160
</table>
6261
</div>
6362

63+
### 目录索引
64+
- [快速开始(3分钟)](#快速开始3分钟)
65+
- [我该选哪个模块?](#我该选哪个模块)
66+
- [Maven 引用方式](#maven-引用方式)
67+
- [最小示例](#最小示例)
68+
- [重要信息](#重要信息)
69+
- [其他说明](#其他说明)
70+
- [版本说明](#版本说明)
71+
- [应用案例](#应用案例)
72+
- [特别赞助](#特别赞助)
73+
- [贡献者列表](#贡献者列表)
74+
75+
### 快速开始(3分钟)
76+
1. 根据业务场景选择模块(见下方“我该选哪个模块?”)
77+
2. 引入 Maven 依赖并选择对应模块
78+
3. 参考最小示例完成初始化并调用 API
79+
80+
### 我该选哪个模块?
81+
82+
| 业务场景 | 模块 | artifactId |
83+
|---|---|---|
84+
| 微信公众号开发 | MP | `weixin-java-mp` |
85+
| 微信小程序开发 | MiniApp | `weixin-java-miniapp` |
86+
| 微信支付 | Pay | `weixin-java-pay` |
87+
| 企业微信 | CP | `weixin-java-cp` |
88+
| 微信开放平台(第三方平台) | Open | `weixin-java-open` |
89+
| 视频号 / 微信小店 | Channel | `weixin-java-channel` |
90+
91+
> 移动端(iOS/Android)微信登录、分享等能力仍需集成微信官方客户端 SDK;本项目为服务端 SDK。
92+
6493
### 重要信息
6594
1. [`WxJava` 荣获 `GitCode` 2024年度十大开源社区奖项](https://mp.weixin.qq.com/s/wM_UlMsDm3IZ1CPPDvcvQw)
6695
2. 项目合作洽谈请联系微信`binary0000`(在微信里自行搜索并添加好友,请注明来意,如有关于SDK问题需讨论请参考下文入群讨论,不要加此微信)。
67-
3. **2024-12-30 发布 [【4.7.0正式版】](https://mp.weixin.qq.com/s/_7k-XLYBqeJJhvHWCsdT0A)**
68-
4. 贡献源码可以参考视频:[【贡献源码全过程(上集)】](https://mp.weixin.qq.com/s/3xUZSATWwHR_gZZm207h7Q)[【贡献源码全过程(下集)】](https://mp.weixin.qq.com/s/nyzJwVVoYSJ4hSbwyvTx9A) ,友情提供:[程序员小山与Bug](https://space.bilibili.com/473631007)
69-
5. 新手重要提示:本项目仅是一个SDK开发工具包,未提供Web实现,建议使用 `maven``gradle` 引用本项目即可使用本SDK提供的各种功能,详情可参考 **[【Demo项目】](demo.md)** 或本项目中的部分单元测试代码;
70-
6. 微信开发新手请务必阅读【开发文档】([Gitee Wiki](https://gitee.com/binary/weixin-java-tools/wikis/Home) 或者 [Github Wiki](https://github.com/binarywang/WxJava/wiki))的常见问题部分,可以少走很多弯路,节省不少时间。
71-
7. 技术交流群:想获得QQ群/微信群/钉钉企业群等信息的同学,请使用微信扫描上面的微信公众号二维码关注 `WxJava` 后点击相关菜单即可获取加入方式,同时也可以在微信中搜索 `weixin-java-tools``WxJava` 后选择正确的公众号进行关注,该公众号会及时通知SDK相关更新信息,并不定期分享微信Java开发相关技术知识;
72-
8. 钉钉技术交流群:`32206329`(技术交流2群), `30294972`(技术交流1群,目前已满),`35724728`(通知群,实时通知Github项目变更记录)。
73-
9. 微信开发新手或者Java开发新手在群内提问或新开Issue提问前,请先阅读[【提问的智慧】](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md),并确保已查阅过 [【开发文档Wiki】](https://github.com/binarywang/WxJava/wiki) ,避免浪费大家的宝贵时间;
74-
10. 寻求帮助时需贴代码或大长串异常信息的,请利用 http://paste.ubuntu.com
96+
3. **2026-01-03 发布 [【4.8.0正式版】](https://mp.weixin.qq.com/s/mJoFtGc25pXCn3uZRh6Q-w)**
97+
5. 贡献源码可以参考视频:[【贡献源码全过程(上集)】](https://mp.weixin.qq.com/s/3xUZSATWwHR_gZZm207h7Q)[【贡献源码全过程(下集)】](https://mp.weixin.qq.com/s/nyzJwVVoYSJ4hSbwyvTx9A) ,友情提供:[程序员小山与Bug](https://space.bilibili.com/473631007)
98+
6. 新手重要提示:本项目仅是一个SDK开发工具包,未提供Web实现,建议使用 `maven``gradle` 引用本项目即可使用本SDK提供的各种功能,详情可参考 **[【Demo项目】](demo.md)** 或本项目中的部分单元测试代码;
99+
7. 微信开发新手请务必阅读【开发文档】([Gitee Wiki](https://gitee.com/binary/weixin-java-tools/wikis/Home) 或者 [Github Wiki](https://github.com/binarywang/WxJava/wiki))的常见问题部分,可以少走很多弯路,节省不少时间。
100+
8. 技术交流群:想获得QQ群/微信群/钉钉企业群等信息的同学,请使用微信扫描上面的微信公众号二维码关注 `WxJava` 后点击相关菜单即可获取加入方式,同时也可以在微信中搜索 `weixin-java-tools``WxJava` 后选择正确的公众号进行关注,该公众号会及时通知SDK相关更新信息,并不定期分享微信Java开发相关技术知识;
101+
9. 钉钉技术交流群:`32206329`(技术交流2群), `30294972`(技术交流1群,目前已满),`35724728`(通知群,实时通知Github项目变更记录)。
102+
10. 微信开发新手或者Java开发新手在群内提问或新开Issue提问前,请先阅读[【提问的智慧】](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md),并确保已查阅过 [【开发文档Wiki】](https://github.com/binarywang/WxJava/wiki) ,避免浪费大家的宝贵时间;
103+
11. 寻求帮助时需贴代码或大长串异常信息的,请利用 http://paste.ubuntu.com
75104

76105
--------------------------------
77106
### 其他说明
@@ -95,7 +124,7 @@
95124
<dependency>
96125
<groupId>com.github.binarywang</groupId>
97126
<artifactId>(不同模块参考下文)</artifactId>
98-
<version>4.7.0</version>
127+
<version>4.8.0</version>
99128
</dependency>
100129
```
101130

@@ -106,6 +135,51 @@
106135
- 企业微信:`weixin-java-cp`
107136
- 微信视频号/微信小店:`weixin-java-channel`
108137

138+
**注意**
139+
- **移动应用开发**:如果你的移动应用(iOS/Android App)需要接入微信登录、分享等功能:
140+
- 微信登录(网页授权):使用 `weixin-java-open` 模块,在服务端处理 OAuth 授权
141+
- 微信支付:使用 `weixin-java-pay` 模块
142+
- 客户端集成:需使用微信官方提供的移动端SDK(iOS/Android),本项目为服务端SDK
143+
- **微信开放平台**`weixin-java-open`)主要用于第三方平台,代公众号或小程序进行开发和管理
144+
145+
146+
147+
---------------------------------
148+
### 最小示例
149+
150+
<details>
151+
<summary>公众号(MP)示例:获取 AccessToken</summary>
152+
153+
```java
154+
WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();
155+
config.setAppId("your-app-id");
156+
config.setSecret("your-secret");
157+
158+
WxMpService wxMpService = new WxMpServiceImpl();
159+
wxMpService.setWxMpConfigStorage(config);
160+
161+
String accessToken = wxMpService.getAccessToken();
162+
System.out.println(accessToken);
163+
```
164+
165+
</details>
166+
167+
<details>
168+
<summary>小程序(MiniApp)示例:code2Session</summary>
169+
170+
```java
171+
WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
172+
config.setAppid("your-app-id");
173+
config.setSecret("your-secret");
174+
175+
WxMaService wxMaService = new WxMaServiceImpl();
176+
wxMaService.setWxMaConfig(config);
177+
178+
WxMaJscode2SessionResult result = wxMaService.getUserService().getSessionInfo("js-code");
179+
System.out.println(result.getOpenid());
180+
```
181+
182+
</details>
109183

110184
---------------------------------
111185
### 版本说明

0 commit comments

Comments
 (0)