From b32178ba20271c19098c52abb81d9e5d82725f08 Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 30 Mar 2025 18:55:58 +0800 Subject: [PATCH 01/16] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- build.gradle | 3 +-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b14504f..8d13482 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +

+升级到3.x 的版本,做了很多break change,请重新阅读一下文档。 +

+ # WxPusher 微信消息实时推送服务[WxPusher],可以通过API实时给个人微信推送消息.[http://wxpusher.zjiecode.com/admin](http://wxpusher.zjiecode.com/admin) @@ -16,7 +20,7 @@ 如果不存在你需要语言的sdk,请你按照[参考文档](http://wxpusher.zjiecode.com/docs)直接使用http调用,另外,欢迎你贡献更多语言的SDK。 # Java版本SDK -[ ![version](https://img.shields.io/static/v1.svg?label=version&message=2.1.4&color=brightgreen) ](https://bintray.com/zjiecode/maven/wxpusher-java-sdk) +[ ![version](https://img.shields.io/static/v1.svg?label=version&message=3.0.0&color=brightgreen) ](https://bintray.com/zjiecode/maven/wxpusher-java-sdk) ## 目录模块说明 - demo diff --git a/build.gradle b/build.gradle index 111be03..eea2ae9 100644 --- a/build.gradle +++ b/build.gradle @@ -3,8 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.4.RELEASE" -// classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4' + } } From 713798d22e0251a24bddede6ad2fd283e4b947d4 Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 30 Mar 2025 20:08:07 +0800 Subject: [PATCH 02/16] =?UTF-8?q?=E5=87=86=E5=A4=87=E5=8F=91=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sdk/build.gradle | 20 ++++++++++--- .../com/smjcco/wxpusher/sdk/WxPusher.java | 30 +++++++++++-------- .../com/smjcco/wxpusher/sdk/bean/Message.java | 1 + .../wxpusher/sdk/bean/MessageResult.java | 4 +-- 4 files changed, 37 insertions(+), 18 deletions(-) diff --git a/sdk/build.gradle b/sdk/build.gradle index e1ac4d1..2a1e6a1 100644 --- a/sdk/build.gradle +++ b/sdk/build.gradle @@ -4,22 +4,34 @@ plugins { } - //还有很多开发者用1.8,编译成低版本的,方便兼容 java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } +tasks.register('sourcesJar', Jar) { + archiveClassifier = 'sources' + from sourceSets.main.allJava +} + +tasks.register('javadocJar', Jar) { + archiveClassifier = 'javadoc' + dependsOn javadoc + from javadoc.destinationDir +} publishing { + publications { mavenJava(MavenPublication) { from components.java // 发布 Java 组件(自动包含 JAR 包和 POM 文件) - // 可选:自定义 artifactId(默认使用模块名) + artifact sourcesJar + artifact javadocJar + artifactId = 'wxpusher' group = 'com.smjcco.wxpusher' - version = '1.0.0' - description ='微信消息实时推送服务[WxPusher],可以通过API实时给个人微信推送消息,详情请看:http://wxpusher.zjiecode.com/docs' + version = '3.0.0' + description = '微信消息实时推送服务[WxPusher],可以通过API实时给个人微信推送消息,详情请看:http://wxpusher.zjiecode.com/docs' } } diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java b/sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java index 4c309bb..f555a3c 100644 --- a/sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java +++ b/sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java @@ -9,12 +9,12 @@ import java.util.Map; /** - * 说明:WxPusher的客户端
- * 一般通过调用 initDefaultWxPusher(),初始化以后,然后就直接用getDefaultWxPusher()即可
- * 如果有多实例需求,可以用构造方法,多次实例化
- * 具体接口使用可以参考接口说明文档
- * 作者:zjiecode
- * 时间:2019-05-03
+ * 说明:WxPusher的客户端 + * 一般通过调用 initDefaultWxPusher(),初始化以后,然后就直接用getDefaultWxPusher()即可 + * 如果有多实例需求,可以用构造方法,多次实例化 + * 具体接口使用可以参考接口说明文档 + * 作者:zjiecode + * 时间:2019-05-03 */ public final class WxPusher { @@ -31,7 +31,7 @@ public WxPusher(String appToken) { } /** - * 初始化WxPusher的默认实力
+ * 初始化WxPusher的默认实力 * * @param appToken 获取到的AppToken,获取方式AppToken */ @@ -45,6 +45,8 @@ public static WxPusher getDefaultWxPusher() { /** * 发送消息 + * @param message 发送消息的内容 + * @return 发送结果,如果传递了多个uid或者topic,会返回多个结果 */ public Result> send(Message message) { Result> result = verify(message); @@ -58,7 +60,8 @@ public Result> send(Message message) { /** * 查询消息发送状态 - * + * @param messageId 发送接口返回的的messageId + * @return 返回查询的状态 * @deprecated 此接口返回数据可能不准确,只能确保wxpusher已经将消息推送到微信服务器了,用户可能拒绝接收 */ public Result queryMessageStatus(Long messageId) { @@ -88,6 +91,8 @@ public Result deleteMessage(Long messageId) { /** * 创建带参数的app临时二维码 + * @param createQrcodeReq 创建二维码参数 + * @return 返回创建的二维码 */ public Result createAppTempQrcode(CreateQrcodeReq createQrcodeReq) { createQrcodeReq.setAppToken(appToken); @@ -106,6 +111,7 @@ public Result createAppTempQrcode(CreateQrcodeReq createQrcode * @param uid 用户的uid,可选,如果不传就是查询所有用户,传uid就是查某个用户的信息。 * @param isBlock 查询拉黑用户,可选,不传查询所有用户,true查询拉黑用户,false查询没有拉黑的用户 * @param type 关注的类型,可选,不传查询所有用户,0是应用,1是主题 + * @return 返回查询到的用户分页数据 */ public Result> queryWxUserV2(String appToken, Integer page, Integer pageSize, String uid, boolean isBlock, UserType type) { @@ -156,9 +162,9 @@ public Result queryScanUID(String code) { } /** - * 删除用户
- * 你可以通过本接口,删除用户对应用,主题的关注。
- * 说明:你可以删除用户对应用、主题的关注,删除以后,用户可以重新关注,如不想让用户再次关注,可以调用拉黑接口,对用户拉黑。
+ * 删除用户 + * 你可以通过本接口,删除用户对应用,主题的关注。 + * 说明:你可以删除用户对应用、主题的关注,删除以后,用户可以重新关注,如不想让用户再次关注,可以调用拉黑接口,对用户拉黑。 * * @param id 用户id,通过用户查询接口可以获取 * @return 操作是否成功 @@ -183,7 +189,7 @@ public Result deleteUser(Long id) { * * @param id 通过用户查询接口可以获取 * @param reject 是否拉黑,true表示拉黑,false表示取消拉黑 - * @return + * @return 操作结果 */ public Result rejectUser(Long id, Boolean reject) { if (id == null || id <= 0) { diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java b/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java index 96c5605..554494a 100644 --- a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java +++ b/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java @@ -99,6 +99,7 @@ public void setSummary(String summary) { /** * 只需要 body 标签内部的内容。 + * @param content 内容 */ public void setContent(String content) { this.content = content; diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/MessageResult.java b/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/MessageResult.java index 5d88e57..48f1e16 100644 --- a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/MessageResult.java +++ b/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/MessageResult.java @@ -12,8 +12,8 @@ public class MessageResult { private Long messageId; /** - * 消息是否发送成功 - * @return + * 请求服务端是否成功,这个判断成功 以后,再判断业务状态 + * @return 结果 */ public boolean isSuccess() { return code == ResultCode.SUCCESS.getCode(); From a39755b85303c487939efe2e1e1f50461e8f128f Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 30 Mar 2025 20:32:18 +0800 Subject: [PATCH 03/16] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/smjcco/wxpusher/sdk/WxPusher.java | 2 +- .../com/smjcco/wxpusher/sdk/ClientTest.java | 481 +++++++++++++++++- 2 files changed, 480 insertions(+), 3 deletions(-) diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java b/sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java index f555a3c..e1b59eb 100644 --- a/sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java +++ b/sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java @@ -134,7 +134,7 @@ public Result> queryWxUserV2(String appToken, Integer page, Integer params.put("uid", uid); } - Type resultType = new TypeReference>() { + Type resultType = new TypeReference>() { }.getType(); return HttpUtils.get(params, "/api/fun/wxuser/v2", resultType); } diff --git a/sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java b/sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java index 22d0fef..0b509cb 100644 --- a/sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java +++ b/sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java @@ -1,5 +1,14 @@ package com.smjcco.wxpusher.sdk; +import com.smjcco.wxpusher.sdk.bean.*; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + /** * 说明:接口测试 * 作者:zjiecode @@ -7,14 +16,482 @@ */ public class ClientTest { + private static final String APP_TOKEN = "AT_xxx"; // 测试用的APP_TOKEN,请替换为自己的 + private static final String TEST_UID = "UID_xx"; // 测试用的UID,请替换为自己的 + private static final Long TEST_TOPIC_ID = 6950L; // 测试用的主题ID,请替换为自己的 + + private WxPusher wxPusher; + + @Before + public void setup() { + // 使用构造函数初始化 + wxPusher = new WxPusher(APP_TOKEN); + // 也可以使用静态方法初始化默认实例 + // WxPusher.initDefaultWxPusher(APP_TOKEN); + } + + /** + * 测试发送文本消息到单个用户 + */ + @Test + public void testSendTextToUser() { + Message message = new Message(); + message.setAppToken(APP_TOKEN); + message.setContentType(Message.CONTENT_TYPE_TEXT); + message.setContent("这是一条测试文本消息"); + message.setUid(TEST_UID); + + Result> result = wxPusher.send(message); + System.out.println("发送结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); + if (result.isSuccess() && result.getData() != null) { + for (MessageResult messageResult : result.getData()) { + System.out.println("发送到UID: " + messageResult.getUid() + ", 结果:" + messageResult.getStatus()); + } + } + + // 添加断言 + Assert.assertTrue("发送消息应该成功", result.isSuccess()); + Assert.assertEquals("处理成功", result.getMsg()); + Assert.assertNotNull("返回数据不应为空", result.getData()); + Assert.assertFalse("返回结果列表不应为空", result.getData().isEmpty()); + + MessageResult messageResult = result.getData().get(0); + Assert.assertEquals("UID应匹配", TEST_UID, messageResult.getUid()); + Assert.assertTrue("消息发送状态应包含'创建发送任务成功'", messageResult.getStatus().contains("创建发送任务成功")); + Assert.assertTrue("消息发送码应为成功", messageResult.isSuccess()); + } + + /** + * 测试发送HTML消息到单个用户 + */ + @Test + public void testSendHtmlToUser() { + Message message = new Message(); + message.setAppToken(APP_TOKEN); + message.setContentType(Message.CONTENT_TYPE_HTML); + message.setContent("

HTML消息测试

这是一条红色的测试消息

"); + message.setUid(TEST_UID); + message.setSummary("HTML消息测试"); + + Result> result = wxPusher.send(message); + System.out.println("发送结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); + if (result.isSuccess() && result.getData() != null) { + for (MessageResult messageResult : result.getData()) { + System.out.println("发送到UID: " + messageResult.getUid() + ", 结果:" + messageResult.getStatus()); + } + } + + // 添加断言 + Assert.assertTrue("发送HTML消息应该成功", result.isSuccess()); + Assert.assertNotNull("返回数据不应为空", result.getData()); + Assert.assertFalse("返回结果列表不应为空", result.getData().isEmpty()); + + MessageResult messageResult = result.getData().get(0); + Assert.assertEquals("UID应匹配", TEST_UID, messageResult.getUid()); + } + + /** + * 测试发送Markdown消息到单个用户 + */ + @Test + public void testSendMarkdownToUser() { + Message message = new Message(); + message.setAppToken(APP_TOKEN); + message.setContentType(Message.CONTENT_TYPE_MD); + message.setContent("# Markdown消息测试\n\n**这是加粗文本**\n\n*这是斜体文本*"); + message.setUid(TEST_UID); + message.setSummary("Markdown消息测试"); + + Result> result = wxPusher.send(message); + System.out.println("发送结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); + if (result.isSuccess() && result.getData() != null) { + for (MessageResult messageResult : result.getData()) { + System.out.println("发送到UID: " + messageResult.getUid() + ", 结果:" + messageResult.getStatus()); + } + } + + // 添加断言 + Assert.assertTrue("发送Markdown消息应该成功", result.isSuccess()); + Assert.assertNotNull("返回数据不应为空", result.getData()); + Assert.assertFalse("返回结果列表不应为空", result.getData().isEmpty()); + } + + /** + * 测试发送消息到主题 + */ + @Test + public void testSendToTopic() { + Message message = new Message(); + message.setAppToken(APP_TOKEN); + message.setContentType(Message.CONTENT_TYPE_TEXT); + message.setContent("这是一条发送到主题的测试消息"); + message.setTopicId(TEST_TOPIC_ID); + message.setSummary("主题消息测试"); + + Result> result = wxPusher.send(message); + System.out.println("发送结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); + if (result.isSuccess() && result.getData() != null) { + for (MessageResult messageResult : result.getData()) { + System.out.println("发送结果:" + messageResult.getStatus()); + } + } + + // 添加断言 + Assert.assertTrue("发送主题消息应该成功", result.isSuccess()); + Assert.assertNotNull("返回数据不应为空", result.getData()); + Assert.assertFalse("返回结果列表不应为空", result.getData().isEmpty()); + } + + /** + * 测试发送消息到多个用户 + */ + @Test + public void testSendToMultiUsers() { + Message message = new Message(); + message.setAppToken(APP_TOKEN); + message.setContentType(Message.CONTENT_TYPE_TEXT); + message.setContent("这是一条发送到多个用户的测试消息"); + + // 添加多个UID + Set uids = new HashSet<>(); + uids.add(TEST_UID); + // 添加更多用户... + // uids.add("UID_xxx2"); + message.setUids(uids); + + Result> result = wxPusher.send(message); + System.out.println("发送结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); + if (result.isSuccess() && result.getData() != null) { + for (MessageResult messageResult : result.getData()) { + System.out.println("发送到UID: " + messageResult.getUid() + ", 结果:" + messageResult.getStatus()); + } + } + + // 添加断言 + Assert.assertTrue("发送多用户消息应该成功", result.isSuccess()); + Assert.assertNotNull("返回数据不应为空", result.getData()); + Assert.assertFalse("返回结果列表不应为空", result.getData().isEmpty()); + + MessageResult messageResult = result.getData().get(0); + Assert.assertEquals("UID应匹配", TEST_UID, messageResult.getUid()); + Assert.assertTrue("消息发送状态应包含'创建发送任务成功'", messageResult.getStatus().contains("创建发送任务成功")); + } + + /** + * 测试发送带URL的消息 + */ + @Test + public void testSendWithUrl() { + Message message = new Message(); + message.setAppToken(APP_TOKEN); + message.setContentType(Message.CONTENT_TYPE_TEXT); + message.setContent("这是一条带链接的测试消息"); + message.setUid(TEST_UID); + message.setUrl("https://wxpusher.zjiecode.com"); + + Result> result = wxPusher.send(message); + System.out.println("发送结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); + if (result.isSuccess() && result.getData() != null) { + for (MessageResult messageResult : result.getData()) { + System.out.println("发送到UID: " + messageResult.getUid() + ", 结果:" + messageResult.getStatus()); + } + } + + // 添加断言 + Assert.assertTrue("发送带URL消息应该成功", result.isSuccess()); + Assert.assertEquals("处理成功", result.getMsg()); + Assert.assertNotNull("返回数据不应为空", result.getData()); + Assert.assertFalse("返回结果列表不应为空", result.getData().isEmpty()); + + MessageResult messageResult = result.getData().get(0); + Assert.assertEquals("UID应匹配", TEST_UID, messageResult.getUid()); + Assert.assertTrue("消息发送状态应包含'创建发送任务成功'", messageResult.getStatus().contains("创建发送任务成功")); + } + + /** + * 测试查询消息状态 + */ + @Test + public void testQueryMessageStatus() { + // 先发送一条消息获取消息ID + Message message = new Message(); + message.setAppToken(APP_TOKEN); + message.setContentType(Message.CONTENT_TYPE_TEXT); + message.setContent("这是一条用于测试查询状态的消息"); + message.setUid(TEST_UID); - public static void main(String[] args) { + Result> sendResult = wxPusher.send(message); + if (sendResult.isSuccess() && sendResult.getData() != null && !sendResult.getData().isEmpty()) { + Long messageId = sendResult.getData().get(0).getMessageId(); + if (messageId != null) { + Result result = wxPusher.queryMessageStatus(messageId); + System.out.println("查询结果:" + result.isSuccess() + ", 消息状态:" + result.getData()); + + // 添加断言 + Assert.assertTrue("查询消息状态应该成功", result.isSuccess()); + Assert.assertNotNull("状态码不应为空", result.getData()); + Assert.assertEquals("消息状态应为1", 1, result.getData().intValue()); + } else { + System.out.println("消息ID为空,无法查询状态"); + Assert.fail("消息ID不应为空"); + } + } else { + System.out.println("发送消息失败,无法测试查询状态"); + Assert.fail("发送消息应该成功"); + } + } + /** + * 测试删除消息 + */ + @Test + public void testDeleteMessage() { + // 先发送一条消息获取消息ID + Message message = new Message(); + message.setAppToken(APP_TOKEN); + message.setContentType(Message.CONTENT_TYPE_TEXT); + message.setContent("这是一条用于测试删除的消息"); + message.setUid(TEST_UID); + Result> sendResult = wxPusher.send(message); + if (sendResult.isSuccess() && sendResult.getData() != null && !sendResult.getData().isEmpty()) { + Long messageId = sendResult.getData().get(0).getMessageId(); + if (messageId != null) { + Result result = wxPusher.deleteMessage(messageId); + System.out.println("删除结果:" + result.isSuccess() + ", 状态:" + result.getData()); + + // 根据实际情况,可能删除失败是正常的,因为消息已经推送给用户 + // 这里我们只检查API调用是否返回了结果,而不检查删除是否成功 + Assert.assertNotNull("应该返回结果", result); + } else { + System.out.println("消息ID为空,无法删除消息"); + Assert.fail("消息ID不应为空"); + } + } else { + System.out.println("发送消息失败,无法测试删除消息"); + Assert.fail("发送消息应该成功"); + } } + /** + * 测试创建带参数的临时二维码 + */ @Test - public void testQuery() { + public void testCreateTempQrcode() { + CreateQrcodeReq req = new CreateQrcodeReq(); + req.setExtra("test_extra_data"); + req.setValidTime(1800); // 设置有效期为30分钟 + Result result = wxPusher.createAppTempQrcode(req); + System.out.println("创建二维码结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); + if (result.isSuccess() && result.getData() != null) { + CreateQrcodeResp resp = result.getData(); + System.out.println("二维码Code: " + resp.getCode()); + System.out.println("二维码URL: " + resp.getUrl()); + System.out.println("二维码短链接: " + resp.getShortUrl()); + System.out.println("过期时间: " + resp.getExpires()); + System.out.println("附加数据: " + resp.getExtra()); + } + + // 添加断言 + Assert.assertTrue("创建二维码应该成功", result.isSuccess()); + Assert.assertEquals("处理成功", result.getMsg()); + Assert.assertNotNull("返回数据不应为空", result.getData()); + + CreateQrcodeResp resp = result.getData(); + Assert.assertNotNull("二维码Code不应为空", resp.getCode()); + Assert.assertNotNull("二维码URL不应为空", resp.getUrl()); + Assert.assertTrue("二维码URL应包含正确格式", resp.getUrl().contains(".jpg")); + Assert.assertEquals("附加数据应匹配", "test_extra_data", resp.getExtra()); + Assert.assertTrue("过期时间应大于当前时间", resp.getExpires() > System.currentTimeMillis()); } + + /** + * 测试查询用户列表 + */ + @Test + public void testQueryWxUser() { + Result> result = wxPusher.queryWxUserV2(APP_TOKEN, 1, 10, null, false, UserType.APP); + System.out.println("查询用户结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); + if (result.isSuccess() && result.getData() != null) { + Page page = result.getData(); + System.out.println("总用户数: " + page.getTotal()); + System.out.println("当前页: " + page.getPage()); + System.out.println("页大小: " + page.getPageSize()); + + if (page.getRecords() != null) { + for (WxUser wxUser : page.getRecords()) { + System.out.println("用户UID: " + wxUser.getUid()); + System.out.println("用户ID: " + wxUser.getId()); + System.out.println("应用/主题ID: " + wxUser.getAppOrTopicId()); + System.out.println("关注类型: " + wxUser.getType()); + System.out.println("用户是否启用: " + wxUser.isEnable()); + System.out.println("用户是否拉黑: " + wxUser.isReject()); + System.out.println("创建时间: " + wxUser.getCreateTime()); + System.out.println("---------------------"); + } + } + } + + // 添加断言 + Assert.assertTrue("查询用户应该成功", result.isSuccess()); + Assert.assertEquals("处理成功", result.getMsg()); + Assert.assertNotNull("返回数据不应为空", result.getData()); + + Page page = result.getData(); + Assert.assertNotNull("用户列表不应为空", page.getRecords()); + Assert.assertFalse("用户列表不应为空", page.getRecords().isEmpty()); + Assert.assertEquals("当前页应为1", Integer.valueOf(1), page.getPage()); + Assert.assertEquals("页大小应为10", Integer.valueOf(10), page.getPageSize()); + Assert.assertTrue("总用户数应大于0", page.getTotal() > 0); + + // 检查是否包含测试用户 + boolean containsTestUser = false; + for(WxUser user : page.getRecords()) { + if(TEST_UID.equals(user.getUid())) { + containsTestUser = true; + Assert.assertEquals("应用ID应匹配", Long.valueOf(141), user.getAppOrTopicId()); + Assert.assertEquals("关注类型应为APP", 0, user.getType()); + break; + } + } + Assert.assertTrue("用户列表应包含测试用户", containsTestUser); + } + + /** + * 测试查询指定UID用户信息 + */ + @Test + public void testQuerySpecificUser() { + Result> result = wxPusher.queryWxUserV2(APP_TOKEN, 1, 10, TEST_UID, false, UserType.APP); + System.out.println("查询指定用户结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); + if (result.isSuccess() && result.getData() != null) { + Page page = result.getData(); + if (page.getRecords() != null && !page.getRecords().isEmpty()) { + WxUser wxUser = page.getRecords().get(0); + System.out.println("用户UID: " + wxUser.getUid()); + System.out.println("用户ID: " + wxUser.getId()); + System.out.println("应用/主题ID: " + wxUser.getAppOrTopicId()); + System.out.println("关注类型: " + wxUser.getType()); + System.out.println("用户是否启用: " + wxUser.isEnable()); + System.out.println("用户是否拉黑: " + wxUser.isReject()); + System.out.println("创建时间: " + wxUser.getCreateTime()); + } else { + System.out.println("未找到指定UID的用户"); + } + } + + // 添加断言 + Assert.assertTrue("查询指定用户应该成功", result.isSuccess()); + Assert.assertEquals("处理成功", result.getMsg()); + Assert.assertNotNull("返回数据不应为空", result.getData()); + + Page page = result.getData(); + Assert.assertNotNull("用户记录不应为空", page.getRecords()); + Assert.assertFalse("用户记录不应为空", page.getRecords().isEmpty()); + + WxUser wxUser = page.getRecords().get(0); + Assert.assertEquals("用户UID应匹配", TEST_UID, wxUser.getUid()); + Assert.assertEquals("应用ID应匹配", Long.valueOf(141), wxUser.getAppOrTopicId()); + Assert.assertEquals("关注类型应为APP", 0, wxUser.getType()); + } + + /** + * 测试查询扫码用户UID + * 注意:此方法需要用户扫描二维码才能查询到结果 + */ + @Test + public void testQueryScanUID() { + // 先创建一个带参数的临时二维码 + CreateQrcodeReq req = new CreateQrcodeReq(); + req.setExtra("test_scan_uid"); + req.setValidTime(300); // 设置有效期为5分钟 + + Result createResult = wxPusher.createAppTempQrcode(req); + if (createResult.isSuccess() && createResult.getData() != null) { + String code = createResult.getData().getCode(); + System.out.println("请扫描这个二维码URL: " + createResult.getData().getUrl()); + System.out.println("等待用户扫描..."); + + // 注意:实际使用时,应该使用轮询方式,此处仅为示例 + Result result = wxPusher.queryScanUID(code); + System.out.println("查询扫码用户结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); + if (result.isSuccess() && result.getData() != null) { + System.out.println("扫码用户UID: " + result.getData()); + } + + // 添加断言 - 注意这里可能失败是正常的,因为没有用户扫码 + Assert.assertNotNull("查询结果不应为空", result); + } else { + System.out.println("创建二维码失败,无法测试查询扫码用户"); + Assert.fail("创建二维码应该成功"); + } + } + + /** + * 测试删除用户 + * 注意:此方法会真实删除用户,谨慎使用 + */ + @Test + public void testDeleteUser() { + // 先查询出用户ID + Result> queryResult = wxPusher.queryWxUserV2(APP_TOKEN, 1, 10, TEST_UID, false, UserType.APP); + if (queryResult.isSuccess() && queryResult.getData() != null + && queryResult.getData().getRecords() != null + && !queryResult.getData().getRecords().isEmpty()) { + + Long userId = queryResult.getData().getRecords().get(0).getId(); + System.out.println("找到用户ID: " + userId); + + // 谨慎执行以下代码,会真实删除用户关注 + // Result result = wxPusher.deleteUser(userId); + // System.out.println("删除用户结果:" + result.isSuccess() + ", 状态:" + result.getData()); + + // 添加断言 + Assert.assertTrue("查询用户应该成功", queryResult.isSuccess()); + Assert.assertNotNull("用户ID不应为空", userId); + Assert.assertEquals("用户ID应匹配预期", Long.valueOf(34334), userId); + + System.out.println("为避免真实删除用户,该测试方法已被注释"); + } else { + System.out.println("未找到指定UID的用户,无法测试删除"); + Assert.fail("应该能找到测试用户"); + } + } + + /** + * 测试拉黑用户 + * 注意:此方法会真实拉黑用户,谨慎使用 + */ + @Test + public void testRejectUser() { + // 先查询出用户ID + Result> queryResult = wxPusher.queryWxUserV2(APP_TOKEN, 1, 10, TEST_UID, false, UserType.APP); + if (queryResult.isSuccess() && queryResult.getData() != null + && queryResult.getData().getRecords() != null + && !queryResult.getData().getRecords().isEmpty()) { + + Long userId = queryResult.getData().getRecords().get(0).getId(); + System.out.println("找到用户ID: " + userId); + + // 拉黑和取消拉黑用户的完整测试 + Result result = wxPusher.rejectUser(userId, true); + System.out.println("拉黑用户结果:" + result.isSuccess() + ", 状态:" + result.getData()); + + // 添加断言 + Assert.assertTrue("拉黑用户应该成功", result.isSuccess()); + Assert.assertTrue("操作状态应为true", result.getData()); + + Result result2 = wxPusher.rejectUser(userId, false); + System.out.println("取消拉黑用户结果:" + result2.isSuccess() + ", 状态:" + result2.getData()); + + // 添加断言 + Assert.assertTrue("取消拉黑用户应该成功", result2.isSuccess()); + Assert.assertTrue("操作状态应为true", result2.getData()); + } else { + System.out.println("未找到指定UID的用户,无法测试拉黑"); + Assert.fail("应该能找到测试用户"); + } + } + } From 297f9d9f9af6683a682d190f29ed748c3954a651 Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 30 Mar 2025 21:24:32 +0800 Subject: [PATCH 04/16] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E4=BD=BF=E7=94=A8=E6=96=B0SDK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 4 +- demo/build.gradle | 19 +-------- .../wxpusher/demo/AppWebMvcConfigurer.java | 3 +- .../smjcco/wxpusher/demo/result/Result.java | 39 ++++++------------- demo/src/main/resources/templates/display.ftl | 3 +- 5 files changed, 19 insertions(+), 49 deletions(-) diff --git a/build.gradle b/build.gradle index eea2ae9..539c078 100644 --- a/build.gradle +++ b/build.gradle @@ -1,12 +1,12 @@ + buildscript { repositories { mavenCentral() } dependencies { - + classpath "org.springframework.boot:spring-boot-gradle-plugin:2.7.18" } } - tasks.register('clean', Delete) { delete new File(getRootDir(), "out") delete new File(getRootDir(), "build") diff --git a/demo/build.gradle b/demo/build.gradle index 0ba164a..2c998ed 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -1,22 +1,12 @@ apply plugin: 'java' -//apply plugin: 'idea' -//apply plugin: 'org.springframework.boot' -//apply plugin: 'io.spring.dependency-management' +apply plugin: 'org.springframework.boot' +apply plugin: 'io.spring.dependency-management' //还有很多开发者用1.8,编译成低版本的,方便兼容 java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } -buildscript { - repositories { - mavenCentral() - } - dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:2.1.4.RELEASE" -// classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4' - } -} repositories { mavenCentral() @@ -33,11 +23,6 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-freemarker:2.1.4.RELEASE' implementation 'com.alibaba.fastjson2:fastjson2:2.0.56' - //test -// testCompile 'org.springframework.boot:spring-boot-starter-test:2.1.4.RELEASE' -// testCompile 'org.springframework.boot:spring-boot-test:2.1.4.RELEASE' -// testCompile 'org.springframework:spring-test:5.1.6.RELEASE' -// testCompile 'junit:junit:4.12' //实际开发中,请直接通过jar包依赖,在本demo中,直接工程依赖的sdk源码 implementation project(":sdk") diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/AppWebMvcConfigurer.java b/demo/src/main/java/com/smjcco/wxpusher/demo/AppWebMvcConfigurer.java index d4d5b15..57a2b8c 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/AppWebMvcConfigurer.java +++ b/demo/src/main/java/com/smjcco/wxpusher/demo/AppWebMvcConfigurer.java @@ -97,9 +97,10 @@ public void configureHandlerExceptionResolvers(List re public void addCorsMappings(CorsRegistry registry) { //配置跨域请求 registry.addMapping("/**") + .allowedOrigins("https://wxpusher.zjiecode.com") .allowedOrigins("*") .allowedHeaders("*") - .allowCredentials(true) + .allowCredentials(false) .allowedMethods("*"); } diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/result/Result.java b/demo/src/main/java/com/smjcco/wxpusher/demo/result/Result.java index aa041a1..08beffe 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/result/Result.java +++ b/demo/src/main/java/com/smjcco/wxpusher/demo/result/Result.java @@ -1,8 +1,13 @@ package com.smjcco.wxpusher.demo.result; +import lombok.Getter; +import lombok.Setter; + /** * 返回结果数据结构 */ +@Setter +@Getter public class Result { private Integer code; private String msg; @@ -18,38 +23,16 @@ public Result(ResultCode code, String msg) { this.code = code.getCode(); this.msg = msg; } - - public void setMsg(String msg) { - this.msg = msg; - } - - public void setData(T data) { - this.data = data; - } - - public static Result getSuccess(T data) { - return new Result(ResultCode.SUCCESS, "处理成功", data); + public static Result getSuccess(T data) { + return new Result<>(ResultCode.SUCCESS, "处理成功", data); } - public static Result getSuccess() { - return new Result(ResultCode.SUCCESS, "处理成功"); - } - - public static Result getBizFail(String msg) { - return new Result(ResultCode.BIZ_FAIL, msg); - } - - public Integer getCode() { - return code; - } - - - public String getMsg() { - return msg; + public static Result getSuccess() { + return new Result<>(ResultCode.SUCCESS, "处理成功"); } - public T getData() { - return data; + public static Result getBizFail(String msg) { + return new Result<>(ResultCode.BIZ_FAIL, msg); } public boolean isSuccess() { diff --git a/demo/src/main/resources/templates/display.ftl b/demo/src/main/resources/templates/display.ftl index 587f4ba..2a98044 100644 --- a/demo/src/main/resources/templates/display.ftl +++ b/demo/src/main/resources/templates/display.ftl @@ -89,7 +89,7 @@
-

WxPusher 演示程序

+

WxPusher消息推送平台 - 演示程序

使用WxPusher免费推送消息到个人微信上,更快更便捷。
本程序已经开源,你可以点击这里参考源码。
@@ -159,6 +159,7 @@ var user = response.data.data.scan; if (!hasUser && user) { hasUser = true; + clearInterval(interval); var tips = document.getElementById("step-1"); tips.innerText = "1、已经成功获取到扫码用户,信息如下:" tips.setAttribute("style", "color:#42b983"); From 8da022f557314fb96c399055309de44b7c50abde Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 30 Mar 2025 22:04:03 +0800 Subject: [PATCH 05/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sdk/build.gradle | 106 +++++++++++++++++------------------------------ 1 file changed, 39 insertions(+), 67 deletions(-) diff --git a/sdk/build.gradle b/sdk/build.gradle index 2a1e6a1..c72d2c2 100644 --- a/sdk/build.gradle +++ b/sdk/build.gradle @@ -41,15 +41,6 @@ publishing { } } -////包配置信息 -//ext { -// version = "2.1.8-local" -// artifactId = "wxpusher-java-sdk" -// projectUrl = "https://github.com/wxpusher/wxpusher-java-sdk.git" -// description = "微信消息实时推送服务[WxPusher],可以通过API实时给个人微信推送消息,详情请看:http://wxpusher.zjiecode.com/docs" -// user = 'wxpusher' -//} - repositories { mavenCentral() } @@ -58,61 +49,42 @@ dependencies { testImplementation 'junit:junit:4.13.1' } -//publishing { -// publications { -// Production(MavenPublication) { -// from components.java -// artifact sourcesJar -// artifact javadocJar -// groupId 'com.zjiecode' -// artifactId this.ext.artifactId -// version this.ext.version -// pom.withXml { -// //添加pom中缺失的信息,以发布到mavencenter -// def projectNode = asNode() -// projectNode.appendNode('name', this.ext.artifactId) -// projectNode.appendNode('description', this.ext.description) -// projectNode.appendNode('url', this.ext.projectUrl) -// projectNode.appendNode('scm').appendNode("url", this.ext.projectUrl) -// def license = projectNode.appendNode('licenses').appendNode("license") -// license.appendNode('name', "MIT") -// license.appendNode('url', "https://mit-license.org/") -// def developer = projectNode.appendNode("developers").appendNode("developer") -// developer.appendNode("id", "zjiecode") -// developer.appendNode("email", "zjiecode@qq.com") -// } -// } -// } -//} - - -//bintray { -// user = this.ext.user -// key = project.hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY') -// publications = ['Production'] -// pkg { -// repo = 'maven' -// name = this.ext.artifactId -// userOrg = this.ext.user -// licenses = ['MIT'] -// vcsUrl = this.ext.projectUrl -// labels = ['wechat', 'push', 'notification', 'pushsdk'] -// publicDownloadNumbers = true -// version { -// desc = this.ext.description -// vcsTag = this.ext.version -// released = new Date() -// name = this.ext.version -// } -// } -//} - -//task sourcesJar(type: Jar, dependsOn: classes) { -// classifier = 'sources' -// from sourceSets.main.allSource -//} -// -//task javadocJar(type: Jar, dependsOn: javadoc) { -// classifier = 'javadoc' -// from javadoc.destinationDir -//} + +// 配置生成校验文件 +tasks.withType(AbstractPublishToMaven) { + dependsOn tasks.withType(GenerateMavenPom) +} + +tasks.withType(GenerateMavenPom).configureEach { + doLast { + def pomFile = destination + def md5File = new File(pomFile.parent, pomFile.name + '.md5') + def sha1File = new File(pomFile.parent, pomFile.name + '.sha1') + + // 生成 MD5 - 使用正确的格式 + ant.checksum(file: pomFile, algorithm: 'MD5', property: 'md5sum') + md5File.text = ant.md5sum + + // 生成 SHA1 - 使用正确的格式 + ant.checksum(file: pomFile, algorithm: 'SHA1', property: 'sha1sum') + sha1File.text = ant.sha1sum + } +} + +tasks.withType(PublishToMavenRepository).configureEach { + doLast { + publication.artifacts.each { artifact -> + def file = artifact.file + def md5File = new File(file.parent, file.name + '.md5') + def sha1File = new File(file.parent, file.name + '.sha1') + + // 生成 MD5 + ant.checksum(file: file, algorithm: 'MD5', property: 'md5sum') + md5File.text = ant.md5sum + + // 生成 SHA1 + ant.checksum(file: file, algorithm: 'SHA1', property: 'sha1sum') + sha1File.text = ant.sha1sum + } + } +} \ No newline at end of file From 9e578c4e4ac96f573855ae34de5ce11bc38e3434 Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 13 Apr 2025 09:54:11 +0800 Subject: [PATCH 06/16] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E5=8F=91=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish.sh | 3 +-- sdk/build.gradle | 51 +++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/publish.sh b/publish.sh index 7d948a6..5a419df 100644 --- a/publish.sh +++ b/publish.sh @@ -1,2 +1 @@ - -./gradlew sdk:clean sdk:build sdk:bintrayUpload -PbintrayApiKey=$BINTRAY_API_KEY \ No newline at end of file +./gradlew sdk:clean :sdk:publishToMavenLocal -Psigning.gnupg.passphrase= \ No newline at end of file diff --git a/sdk/build.gradle b/sdk/build.gradle index c72d2c2..3db9506 100644 --- a/sdk/build.gradle +++ b/sdk/build.gradle @@ -1,6 +1,8 @@ plugins { - id 'java-library' // 如果是 Java 项目 + id 'java-library' // Java 项目 id 'maven-publish' // 应用发布插件 + id 'signing' // 用于生成 .asc 文件 + id "com.kernelflux.maven.publish" version "1.0.0" } @@ -31,8 +33,36 @@ publishing { artifactId = 'wxpusher' group = 'com.smjcco.wxpusher' version = '3.0.0' - description = '微信消息实时推送服务[WxPusher],可以通过API实时给个人微信推送消息,详情请看:http://wxpusher.zjiecode.com/docs' + + pom { + name = 'WxPusher消息推送平台 Java SDK' + description = 'WxPusher消息推送平台 是一个使用微信公众号作为通道的,实时信息推送平台,你可以通过调用API的方式,把信息推送到微信上,无需安装额外的软件,即可做到信息实时通知。 你可以使用WxPusher来做服务器报警通知、抢课通知、抢票通知,信息更新提示等。' + url = 'https://wxpusher.zjiecode.com/docs' + + licenses { + license { + name = 'The Apache License, Version 2.0' + url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' + } + } + + // 开发者信息 + developers { + developer { + id = 'zjiecode' + name = 'zjiecode' + email = 'zjiecode@gmail.com' + } + } + + scm { + connection = 'scm:git@github.com:wxpusher/wxpusher-sdk-java.git' + developerConnection = 'scm:git:git@github.com:wxpusher/wxpusher-sdk-java.git' + url = 'https://github.com/wxpusher/wxpusher-sdk-java' + } + } } + } repositories { @@ -49,15 +79,18 @@ dependencies { testImplementation 'junit:junit:4.13.1' } - -// 配置生成校验文件 -tasks.withType(AbstractPublishToMaven) { - dependsOn tasks.withType(GenerateMavenPom) +signing { + useGpgCmd() + sign publishing.publications.mavenJava } tasks.withType(GenerateMavenPom).configureEach { doLast { def pomFile = destination + println("1,file=${pomFile}") + if (pomFile.name.endsWith(".asc")) { + return + } def md5File = new File(pomFile.parent, pomFile.name + '.md5') def sha1File = new File(pomFile.parent, pomFile.name + '.sha1') @@ -71,10 +104,14 @@ tasks.withType(GenerateMavenPom).configureEach { } } -tasks.withType(PublishToMavenRepository).configureEach { +tasks.withType(PublishToMavenLocal).configureEach { doLast { publication.artifacts.each { artifact -> def file = artifact.file + println("2,file=${file}") + if (file.name.endsWith(".asc")) { + return + } def md5File = new File(file.parent, file.name + '.md5') def sha1File = new File(file.parent, file.name + '.sha1') From b2951df9e23819de2f708a965beab86a867be72c Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 13 Apr 2025 12:51:03 +0800 Subject: [PATCH 07/16] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=8F=91=E5=B8=83?= =?UTF-8?q?=E5=88=B0maven=20center?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- build.gradle | 8 ++ client-sdk/build.gradle | 51 +++++++ .../com/smjcco/wxpusher/sdk/HttpUtils.java | 0 .../com/smjcco/wxpusher/sdk/WxPusher.java | 0 .../wxpusher/sdk/bean/CreateQrcodeReq.java | 0 .../wxpusher/sdk/bean/CreateQrcodeResp.java | 0 .../com/smjcco/wxpusher/sdk/bean/Message.java | 0 .../wxpusher/sdk/bean/MessageResult.java | 0 .../com/smjcco/wxpusher/sdk/bean/Page.java | 0 .../com/smjcco/wxpusher/sdk/bean/Result.java | 0 .../smjcco/wxpusher/sdk/bean/ResultCode.java | 0 .../smjcco/wxpusher/sdk/bean/UserType.java | 0 .../com/smjcco/wxpusher/sdk/bean/WxUser.java | 0 .../sdk/bean/callback/AppSubscribeBean.java | 0 .../sdk/bean/callback/BaseCallBackReq.java | 0 .../sdk/bean/callback/OrderPayBean.java | 0 .../sdk/bean/callback/UpCommandBean.java | 0 .../com/smjcco/wxpusher/sdk/ClientTest.java | 0 demo/build.gradle | 2 +- sdk/build.gradle | 127 ------------------ settings.gradle | 2 +- 22 files changed, 63 insertions(+), 130 deletions(-) create mode 100644 client-sdk/build.gradle rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/HttpUtils.java (100%) rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java (100%) rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeReq.java (100%) rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeResp.java (100%) rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java (100%) rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/bean/MessageResult.java (100%) rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/bean/Page.java (100%) rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/bean/Result.java (100%) rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/bean/ResultCode.java (100%) rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/bean/UserType.java (100%) rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/bean/WxUser.java (100%) rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/AppSubscribeBean.java (100%) rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/BaseCallBackReq.java (100%) rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/OrderPayBean.java (100%) rename {sdk => client-sdk}/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/UpCommandBean.java (100%) rename {sdk => client-sdk}/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java (100%) delete mode 100644 sdk/build.gradle diff --git a/.gitignore b/.gitignore index d954e3c..753bb80 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,5 @@ hs_err_pid* # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* -deploy-demo.sh \ No newline at end of file +deploy-demo.sh +publish.sh \ No newline at end of file diff --git a/build.gradle b/build.gradle index 539c078..6345ca7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,4 @@ +group = 'com.smjcco.wxpusher' buildscript { repositories { @@ -7,6 +8,13 @@ buildscript { classpath "org.springframework.boot:spring-boot-gradle-plugin:2.7.18" } } + +allprojects { + repositories { + mavenCentral() + } +} + tasks.register('clean', Delete) { delete new File(getRootDir(), "out") delete new File(getRootDir(), "build") diff --git a/client-sdk/build.gradle b/client-sdk/build.gradle new file mode 100644 index 0000000..ac14d73 --- /dev/null +++ b/client-sdk/build.gradle @@ -0,0 +1,51 @@ +plugins { + id 'java-library' // Java 项目 + id 'maven-publish' // 应用发布插件 + id 'signing' // 用于生成 .asc 文件 + id("org.danilopianini.publish-on-central") version "8.0.6" +} + + +//还有很多开发者用1.8,编译成低版本的,方便兼容 +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +group = 'com.smjcco.wxpusher' + +publishOnCentral { + version = '3.0.0' + repoOwner.set("wxpusher") + projectDescription.set("WxPusher消息推送平台 是一个使用微信公众号作为通道的,实时信息推送平台,你可以通过调用API的方式,把信息推送到微信上,无需安装额外的软件,即可做到信息实时通知。 你可以使用WxPusher来做服务器报警通知、抢课通知、抢票通知,信息更新提示等。") + projectLongName.set("WxPusher消息推送平台 Java SDK") + licenseName.set("Apache License, Version 2.0") + licenseUrl.set("http://www.apache.org/licenses/LICENSE-2.0") + projectUrl.set("https://github.com/wxpusher/wxpusher-sdk-java") + scmConnection.set("git@github.com:wxpusher/wxpusher-sdk-java.git") +} + +publishing { + publications { + OSSRH(MavenPublication) { + pom { + developers { + developer { + id = 'zjiecode' + name = 'zjiecode' + email = 'zjiecode@gmail.com' + } + } + } + } + } +} + +signing { + useGpgCmd() + sign publishing.publications.OSSRH +} +dependencies { + implementation 'com.alibaba.fastjson2:fastjson2:2.0.56' + testImplementation 'junit:junit:4.13.1' +} diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/HttpUtils.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/HttpUtils.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/HttpUtils.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/HttpUtils.java diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeReq.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeReq.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeReq.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeReq.java diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeResp.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeResp.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeResp.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeResp.java diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/MessageResult.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/MessageResult.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/MessageResult.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/MessageResult.java diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Page.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Page.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Page.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Page.java diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Result.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Result.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Result.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Result.java diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/ResultCode.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/ResultCode.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/ResultCode.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/ResultCode.java diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/UserType.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/UserType.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/UserType.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/UserType.java diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/WxUser.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/WxUser.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/WxUser.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/WxUser.java diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/AppSubscribeBean.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/AppSubscribeBean.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/AppSubscribeBean.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/AppSubscribeBean.java diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/BaseCallBackReq.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/BaseCallBackReq.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/BaseCallBackReq.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/BaseCallBackReq.java diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/OrderPayBean.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/OrderPayBean.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/OrderPayBean.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/OrderPayBean.java diff --git a/sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/UpCommandBean.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/UpCommandBean.java similarity index 100% rename from sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/UpCommandBean.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/UpCommandBean.java diff --git a/sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java b/client-sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java similarity index 100% rename from sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java rename to client-sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java diff --git a/demo/build.gradle b/demo/build.gradle index 2c998ed..2c3eb34 100644 --- a/demo/build.gradle +++ b/demo/build.gradle @@ -25,6 +25,6 @@ dependencies { implementation 'com.alibaba.fastjson2:fastjson2:2.0.56' //实际开发中,请直接通过jar包依赖,在本demo中,直接工程依赖的sdk源码 - implementation project(":sdk") + implementation project(":client-sdk") } diff --git a/sdk/build.gradle b/sdk/build.gradle deleted file mode 100644 index 3db9506..0000000 --- a/sdk/build.gradle +++ /dev/null @@ -1,127 +0,0 @@ -plugins { - id 'java-library' // Java 项目 - id 'maven-publish' // 应用发布插件 - id 'signing' // 用于生成 .asc 文件 - id "com.kernelflux.maven.publish" version "1.0.0" -} - - -//还有很多开发者用1.8,编译成低版本的,方便兼容 -java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - -tasks.register('sourcesJar', Jar) { - archiveClassifier = 'sources' - from sourceSets.main.allJava -} - -tasks.register('javadocJar', Jar) { - archiveClassifier = 'javadoc' - dependsOn javadoc - from javadoc.destinationDir -} -publishing { - - publications { - mavenJava(MavenPublication) { - from components.java // 发布 Java 组件(自动包含 JAR 包和 POM 文件) - artifact sourcesJar - artifact javadocJar - - artifactId = 'wxpusher' - group = 'com.smjcco.wxpusher' - version = '3.0.0' - - pom { - name = 'WxPusher消息推送平台 Java SDK' - description = 'WxPusher消息推送平台 是一个使用微信公众号作为通道的,实时信息推送平台,你可以通过调用API的方式,把信息推送到微信上,无需安装额外的软件,即可做到信息实时通知。 你可以使用WxPusher来做服务器报警通知、抢课通知、抢票通知,信息更新提示等。' - url = 'https://wxpusher.zjiecode.com/docs' - - licenses { - license { - name = 'The Apache License, Version 2.0' - url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' - } - } - - // 开发者信息 - developers { - developer { - id = 'zjiecode' - name = 'zjiecode' - email = 'zjiecode@gmail.com' - } - } - - scm { - connection = 'scm:git@github.com:wxpusher/wxpusher-sdk-java.git' - developerConnection = 'scm:git:git@github.com:wxpusher/wxpusher-sdk-java.git' - url = 'https://github.com/wxpusher/wxpusher-sdk-java' - } - } - } - - } - - repositories { - // 发布到本地 Maven 仓库(~/.m2/repository) - mavenLocal() - } -} - -repositories { - mavenCentral() -} -dependencies { - implementation 'com.alibaba.fastjson2:fastjson2:2.0.56' - testImplementation 'junit:junit:4.13.1' -} - -signing { - useGpgCmd() - sign publishing.publications.mavenJava -} - -tasks.withType(GenerateMavenPom).configureEach { - doLast { - def pomFile = destination - println("1,file=${pomFile}") - if (pomFile.name.endsWith(".asc")) { - return - } - def md5File = new File(pomFile.parent, pomFile.name + '.md5') - def sha1File = new File(pomFile.parent, pomFile.name + '.sha1') - - // 生成 MD5 - 使用正确的格式 - ant.checksum(file: pomFile, algorithm: 'MD5', property: 'md5sum') - md5File.text = ant.md5sum - - // 生成 SHA1 - 使用正确的格式 - ant.checksum(file: pomFile, algorithm: 'SHA1', property: 'sha1sum') - sha1File.text = ant.sha1sum - } -} - -tasks.withType(PublishToMavenLocal).configureEach { - doLast { - publication.artifacts.each { artifact -> - def file = artifact.file - println("2,file=${file}") - if (file.name.endsWith(".asc")) { - return - } - def md5File = new File(file.parent, file.name + '.md5') - def sha1File = new File(file.parent, file.name + '.sha1') - - // 生成 MD5 - ant.checksum(file: file, algorithm: 'MD5', property: 'md5sum') - md5File.text = ant.md5sum - - // 生成 SHA1 - ant.checksum(file: file, algorithm: 'SHA1', property: 'sha1sum') - sha1File.text = ant.sha1sum - } - } -} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 001c67e..718ef65 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,3 @@ rootProject.name = 'wxpusher-sdk-java' include ":demo" -include ":sdk" +include ":client-sdk" From a16ecf4fe3ac9fa7fc5fbbd3c1b25bf8d5ebab07 Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 13 Apr 2025 12:52:10 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E6=9C=89=E6=95=88=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish.sh | 1 - 1 file changed, 1 deletion(-) delete mode 100644 publish.sh diff --git a/publish.sh b/publish.sh deleted file mode 100644 index 5a419df..0000000 --- a/publish.sh +++ /dev/null @@ -1 +0,0 @@ -./gradlew sdk:clean :sdk:publishToMavenLocal -Psigning.gnupg.passphrase= \ No newline at end of file From 5bab1008c1969ad7ffb83bdbac74b3f3cd59884a Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 13 Apr 2025 13:47:01 +0800 Subject: [PATCH 09/16] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 142 ++++++++++++++---- .../com/smjcco/wxpusher/sdk/WxPusher.java | 18 ++- .../com/smjcco/wxpusher/sdk/bean/Message.java | 3 + .../com/smjcco/wxpusher/sdk/ClientTest.java | 107 ++++++------- .../demo/controller/CallBackController.java | 1 - 5 files changed, 173 insertions(+), 98 deletions(-) diff --git a/README.md b/README.md index 8d13482..f13ab22 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@

-升级到3.x 的版本,做了很多break change,请重新阅读一下文档。 +升级到3.x 的版本,做了很多break change,但是改动不大,2.x版本在version_2.x分支

+ # WxPusher 微信消息实时推送服务[WxPusher],可以通过API实时给个人微信推送消息.[http://wxpusher.zjiecode.com/admin](http://wxpusher.zjiecode.com/admin) @@ -10,7 +11,7 @@ 请直接访问官方说明文档[http://wxpusher.zjiecode.com/docs](http://wxpusher.zjiecode.com/docs) ## 目录说明 -- sdk 目录:JAVA SDK的源代码 +- client-sdk 目录:JAVA SDK的源代码 - demo 目录:[http://wxpusher.zjiecode.com/demo](http://wxpusher.zjiecode.com/demo)的源代码 # 其他语言SDK @@ -35,7 +36,7 @@ ```groovy dependencies { ...... - compile 'com.zjiecode:wxpusher-java-sdk:2.1.4'//使用上面的版本号 + implementation 'com.smjcco.wxpusher:client-sdk:3.0.0'//使用上面的版本号 ...... } ``` @@ -44,52 +45,129 @@ dependencies { 在*pom.xml*文件中添加: ```xml - com.zjiecode - wxpusher-java-sdk - 2.1.4 - pom + com.smjcco.wxpusher + client-sdk + 3.0.0 ``` +## 系统回调 +WxPusher会提供一些用户事件,比如用户关注、用户上行消息等,我们会通过回调的方式把消息推送给你。 +具体方式请阅读接入文档:https://wxpusher.zjiecode.com/docs/#/?id=callback +相关的数据模型,已经定义在:com.smjcco.wxpusher.sdk.bean.callback 包下面,也可以可以参考demo模块的实现。 + ## 功能说明 +具体每个功能的说明,请参考API说明文档,这里不再赘述。 +### 初始化 +如果是你只需要一个实例(一个appToken),可以直接使用default,在使用之前进行初始化; +```java +WxPusher.initDefaultWxPusher("你自己的应用appToken"); +``` +在需要使用WxPusher的地方,世界访问default即可,比如下面这样: +```java +WxPusher.getDefaultWxPusher().send(xxx); +``` + +如果需要同时使用多个实例(appToken)可以直接实例化,自己进行保存: +```java +new WxPusher("你自己的应用appToken"); +``` + ### 发送消息 -最后可以在你需要的地方,直接调用方法,即可实时推送消息到微信上了,比如下面这样: +说明:调用此接口,即可把消息推送出去。 如果传递了多个uid或者topic,会返回多个结果。 ```java Message message = new Message(); -message.setAppToken("AT_xxxxx"); +message.setContent("扫描成功,你可以使用demo演示程序发送消息"); message.setContentType(Message.CONTENT_TYPE_TEXT); -message.setContent("不加限制的自由是很可怕的,因为很容易让任何人滑向深渊。"); -message.setUid("UID_xxxxxx"); -message.setUrl("http://wxpuser.zjiecode.com");//可选参数 -Result> result = WxPusher.send(message); +message.setUid("UID_XXXX"); + +Result> result = WxPusher.getDefaultWxPusher().send(message); +System.out.println("发送结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); +if (result.isSuccess() && result.getData() != null) { + for (MessageResult messageResult : result.getData()) { + System.out.println("发送到UID: " + messageResult.getUid() + ", 结果:" + messageResult.getStatus()); + } +} ``` -### 创建带参数的二维码 -创建一个带参数的二维码,用户扫码的时候,回调里面会携带二维码的参数. +### 删除消息 +说明:消息发送以后,可以调用次接口删除消息,但是请注意,只能删除用户点击详情查看的落地页面,已经推送到用户的消息记录不可以删除。 ```java -CreateQrcodeReq createQrcodeReq = new CreateQrcodeReq(); -createQrcodeReq.setAppToken("xxxx"); //必填,应用的appTOken -createQrcodeReq.setExtra("parameter");//必填,携带的参数 -createQrcodeReq.setValidTime(3600);//可选,二维码有效时间,默认1800 s,最大30天,单位是s -Result tempQrcode = WxPusher.createAppTempQrcode(createQrcodeReq); -if (tempQrcode.isSuccess()) { - //创建成功 +Result result = WxPusher.getDefaultWxPusher().deleteMessage(messageId); +System.out.println("删除结果:" + result.isSuccess() + ", 状态:" + result.getData()); +``` + +### 创建带参数的app临时二维码 +说明:可以用于创建一个二维码,拿到扫码的用户,来和自己系统的用户做关联。 + +本接口和下面的queryScanUID配合使用,推荐更推荐回调:https://wxpusher.zjiecode.com/docs/#/?id=callback +```java +CreateQrcodeReq req = new CreateQrcodeReq(); +req.setExtra("test_extra_data"); +req.setValidTime(1800); // 设置有效期为30分钟 + +Result result = WxPusher.getDefaultWxPusher().createAppTempQrcode(req); +System.out.println("创建二维码结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); +if (result.isSuccess() && result.getData() != null) { + CreateQrcodeResp resp = result.getData(); + System.out.println("二维码Code: " + resp.getCode()); + System.out.println("二维码URL: " + resp.getUrl()); + System.out.println("二维码短链接: " + resp.getShortUrl()); + System.out.println("过期时间: " + resp.getExpires()); + System.out.println("附加数据: " + resp.getExtra()); } ``` +### 查询扫码用户UID +```java +String code = "上面 createAppTempQrcode 接口返回的code"; +// 注意:实际使用时,应该使用轮询方式,但是轮训时间不可以小于10秒,此处仅为示例 +// 更推荐使用回调的方式 https://wxpusher.zjiecode.com/docs/#/?id=callback +Result result = WxPusher.getDefaultWxPusher().queryScanUID(code); +``` +### 查询用户 +说明:同一个用户关注多个,可能返回多个数据 +```java +Result> result = WxPusher.getDefaultWxPusher().queryWxUserV2(1, 10, null, false, UserType.APP); +System.out.println("查询用户结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); +if (result.isSuccess() && result.getData() != null) { + Page page = result.getData(); + System.out.println("总用户数: " + page.getTotal()); + System.out.println("当前页: " + page.getPage()); + System.out.println("页大小: " + page.getPageSize()); + + if (page.getRecords() != null) { + for (WxUser wxUser : page.getRecords()) { + System.out.println("用户UID: " + wxUser.getUid()); + System.out.println("用户ID: " + wxUser.getId()); + System.out.println("应用/主题ID: " + wxUser.getAppOrTopicId()); + System.out.println("关注类型: " + wxUser.getType()); + System.out.println("用户是否启用: " + wxUser.isEnable()); + System.out.println("用户是否拉黑: " + wxUser.isReject()); + System.out.println("创建时间: " + wxUser.getCreateTime()); + System.out.println("---------------------"); + } + } +} +``` +### 删除用户 +你可以通过本接口,删除用户对应用,主题的关注。 -### 查询消息发送状态 -发送消息是异步的,你可以通过这个api查询消息发送状态,推送到微信,即标记发送成功。 +删除以后,用户可以重新关注,如不想让用户再次关注,可以调用拉黑接口,对用户拉黑。 ```java -Result result = WxPusher.queryMessageStatus(messageId); +Result result = wxPusher.deleteUser(userId); +System.out.println("删除用户结果:" + result.isSuccess() + ", 状态:" + result.getData()); ``` -### 查询关注APP的微信用户列表 +### 拉黑用户 +拉黑以后不能再发送消息,用户也不能再次关注,除非你取消对他的拉黑。调用拉黑接口,不用再调用删除接口。 ```java -//分页查询全部用户 -Result> wxUserList = WxPusher.queryWxUserV2("AT_xxx", 1, 50, null, false, 0); -wxUsers.getData().getRecords().forEach(d-> System.out.println(d.getUid())); -//根据查询指定UID用户 -Result> users = WxPusher.queryWxUserV2("AT_xxx", 1, 50, "UID_", false, 0); -System.out.println(JSONObject.toJSONString(users)); + // 拉黑用户 +Result result = WxPusher.getDefaultWxPusher().rejectUser(userId, true); +System.out.println("拉黑用户结果:" + result.isSuccess() + ", 状态:" + result.getData()); + +//取消拉黑用户 +Result result2 = WxPusher.getDefaultWxPusher().rejectUser(userId, false); +System.out.println("取消拉黑用户结果:" + result2.isSuccess() + ", 状态:" + result2.getData()); ``` 使用就是这么简单,有需要就来试试吧。 + diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java index e1b59eb..1787088 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java @@ -12,9 +12,9 @@ * 说明:WxPusher的客户端 * 一般通过调用 initDefaultWxPusher(),初始化以后,然后就直接用getDefaultWxPusher()即可 * 如果有多实例需求,可以用构造方法,多次实例化 - * 具体接口使用可以参考接口说明文档 - * 作者:zjiecode - * 时间:2019-05-03 + * 具体接口使用可以参考接口说明文档 + * 作者:zjiecode + * 时间:2019-05-03 */ public final class WxPusher { @@ -40,15 +40,20 @@ public static void initDefaultWxPusher(String appToken) { } public static WxPusher getDefaultWxPusher() { + if (defaultWxPusher == null) { + throw new RuntimeException("使用默认的实例前,请先调用initDefaultWxPusher进行初始化"); + } return defaultWxPusher; } /** * 发送消息 + * * @param message 发送消息的内容 * @return 发送结果,如果传递了多个uid或者topic,会返回多个结果 */ public Result> send(Message message) { + message.setAppToken(appToken); Result> result = verify(message); if (result != null) { return result; @@ -60,7 +65,8 @@ public Result> send(Message message) { /** * 查询消息发送状态 - * @param messageId 发送接口返回的的messageId + * + * @param messageId 发送接口返回的的messageId * @return 返回查询的状态 * @deprecated 此接口返回数据可能不准确,只能确保wxpusher已经将消息推送到微信服务器了,用户可能拒绝接收 */ @@ -91,6 +97,7 @@ public Result deleteMessage(Long messageId) { /** * 创建带参数的app临时二维码 + * * @param createQrcodeReq 创建二维码参数 * @return 返回创建的二维码 */ @@ -105,7 +112,6 @@ public Result createAppTempQrcode(CreateQrcodeReq createQrcode * 查询用户信息 *

* - * @param appToken 应用密钥标志 * @param page 请求数据的页码 * @param pageSize 分页大小,不能超过100 * @param uid 用户的uid,可选,如果不传就是查询所有用户,传uid就是查某个用户的信息。 @@ -113,7 +119,7 @@ public Result createAppTempQrcode(CreateQrcodeReq createQrcode * @param type 关注的类型,可选,不传查询所有用户,0是应用,1是主题 * @return 返回查询到的用户分页数据 */ - public Result> queryWxUserV2(String appToken, Integer page, Integer pageSize, + public Result> queryWxUserV2(Integer page, Integer pageSize, String uid, boolean isBlock, UserType type) { if (appToken == null || appToken.isEmpty()) { return new Result<>(ResultCode.BIZ_FAIL, "appToken不能为空"); diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java index 554494a..93ba931 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java @@ -47,6 +47,9 @@ public String getAppToken() { return appToken; } + /** + * 不需要外部设置,后面会删除这个字段 + */ public void setAppToken(String appToken) { this.appToken = appToken; } diff --git a/client-sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java b/client-sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java index 0b509cb..5a670f8 100644 --- a/client-sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java +++ b/client-sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java @@ -16,18 +16,15 @@ */ public class ClientTest { - private static final String APP_TOKEN = "AT_xxx"; // 测试用的APP_TOKEN,请替换为自己的 + private static final String TEST_APP_TOKEN = "AT_xxx"; // 测试用的APP_TOKEN,请替换为自己的 private static final String TEST_UID = "UID_xx"; // 测试用的UID,请替换为自己的 private static final Long TEST_TOPIC_ID = 6950L; // 测试用的主题ID,请替换为自己的 - private WxPusher wxPusher; @Before public void setup() { - // 使用构造函数初始化 - wxPusher = new WxPusher(APP_TOKEN); // 也可以使用静态方法初始化默认实例 - // WxPusher.initDefaultWxPusher(APP_TOKEN); + WxPusher.initDefaultWxPusher(TEST_APP_TOKEN); } /** @@ -36,25 +33,24 @@ public void setup() { @Test public void testSendTextToUser() { Message message = new Message(); - message.setAppToken(APP_TOKEN); message.setContentType(Message.CONTENT_TYPE_TEXT); message.setContent("这是一条测试文本消息"); message.setUid(TEST_UID); - Result> result = wxPusher.send(message); + Result> result = WxPusher.getDefaultWxPusher().send(message); System.out.println("发送结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); if (result.isSuccess() && result.getData() != null) { for (MessageResult messageResult : result.getData()) { System.out.println("发送到UID: " + messageResult.getUid() + ", 结果:" + messageResult.getStatus()); } } - + // 添加断言 Assert.assertTrue("发送消息应该成功", result.isSuccess()); Assert.assertEquals("处理成功", result.getMsg()); Assert.assertNotNull("返回数据不应为空", result.getData()); Assert.assertFalse("返回结果列表不应为空", result.getData().isEmpty()); - + MessageResult messageResult = result.getData().get(0); Assert.assertEquals("UID应匹配", TEST_UID, messageResult.getUid()); Assert.assertTrue("消息发送状态应包含'创建发送任务成功'", messageResult.getStatus().contains("创建发送任务成功")); @@ -67,25 +63,24 @@ public void testSendTextToUser() { @Test public void testSendHtmlToUser() { Message message = new Message(); - message.setAppToken(APP_TOKEN); message.setContentType(Message.CONTENT_TYPE_HTML); message.setContent("

HTML消息测试

这是一条红色的测试消息

"); message.setUid(TEST_UID); message.setSummary("HTML消息测试"); - Result> result = wxPusher.send(message); + Result> result = WxPusher.getDefaultWxPusher().send(message); System.out.println("发送结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); if (result.isSuccess() && result.getData() != null) { for (MessageResult messageResult : result.getData()) { System.out.println("发送到UID: " + messageResult.getUid() + ", 结果:" + messageResult.getStatus()); } } - + // 添加断言 Assert.assertTrue("发送HTML消息应该成功", result.isSuccess()); Assert.assertNotNull("返回数据不应为空", result.getData()); Assert.assertFalse("返回结果列表不应为空", result.getData().isEmpty()); - + MessageResult messageResult = result.getData().get(0); Assert.assertEquals("UID应匹配", TEST_UID, messageResult.getUid()); } @@ -96,20 +91,19 @@ public void testSendHtmlToUser() { @Test public void testSendMarkdownToUser() { Message message = new Message(); - message.setAppToken(APP_TOKEN); message.setContentType(Message.CONTENT_TYPE_MD); message.setContent("# Markdown消息测试\n\n**这是加粗文本**\n\n*这是斜体文本*"); message.setUid(TEST_UID); message.setSummary("Markdown消息测试"); - Result> result = wxPusher.send(message); + Result> result = WxPusher.getDefaultWxPusher().send(message); System.out.println("发送结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); if (result.isSuccess() && result.getData() != null) { for (MessageResult messageResult : result.getData()) { System.out.println("发送到UID: " + messageResult.getUid() + ", 结果:" + messageResult.getStatus()); } } - + // 添加断言 Assert.assertTrue("发送Markdown消息应该成功", result.isSuccess()); Assert.assertNotNull("返回数据不应为空", result.getData()); @@ -122,20 +116,19 @@ public void testSendMarkdownToUser() { @Test public void testSendToTopic() { Message message = new Message(); - message.setAppToken(APP_TOKEN); message.setContentType(Message.CONTENT_TYPE_TEXT); message.setContent("这是一条发送到主题的测试消息"); message.setTopicId(TEST_TOPIC_ID); message.setSummary("主题消息测试"); - Result> result = wxPusher.send(message); + Result> result = WxPusher.getDefaultWxPusher().send(message); System.out.println("发送结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); if (result.isSuccess() && result.getData() != null) { for (MessageResult messageResult : result.getData()) { System.out.println("发送结果:" + messageResult.getStatus()); } } - + // 添加断言 Assert.assertTrue("发送主题消息应该成功", result.isSuccess()); Assert.assertNotNull("返回数据不应为空", result.getData()); @@ -148,7 +141,6 @@ public void testSendToTopic() { @Test public void testSendToMultiUsers() { Message message = new Message(); - message.setAppToken(APP_TOKEN); message.setContentType(Message.CONTENT_TYPE_TEXT); message.setContent("这是一条发送到多个用户的测试消息"); @@ -159,19 +151,19 @@ public void testSendToMultiUsers() { // uids.add("UID_xxx2"); message.setUids(uids); - Result> result = wxPusher.send(message); + Result> result = WxPusher.getDefaultWxPusher().send(message); System.out.println("发送结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); if (result.isSuccess() && result.getData() != null) { for (MessageResult messageResult : result.getData()) { System.out.println("发送到UID: " + messageResult.getUid() + ", 结果:" + messageResult.getStatus()); } } - + // 添加断言 Assert.assertTrue("发送多用户消息应该成功", result.isSuccess()); Assert.assertNotNull("返回数据不应为空", result.getData()); Assert.assertFalse("返回结果列表不应为空", result.getData().isEmpty()); - + MessageResult messageResult = result.getData().get(0); Assert.assertEquals("UID应匹配", TEST_UID, messageResult.getUid()); Assert.assertTrue("消息发送状态应包含'创建发送任务成功'", messageResult.getStatus().contains("创建发送任务成功")); @@ -183,26 +175,25 @@ public void testSendToMultiUsers() { @Test public void testSendWithUrl() { Message message = new Message(); - message.setAppToken(APP_TOKEN); message.setContentType(Message.CONTENT_TYPE_TEXT); message.setContent("这是一条带链接的测试消息"); message.setUid(TEST_UID); message.setUrl("https://wxpusher.zjiecode.com"); - Result> result = wxPusher.send(message); + Result> result = WxPusher.getDefaultWxPusher().send(message); System.out.println("发送结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); if (result.isSuccess() && result.getData() != null) { for (MessageResult messageResult : result.getData()) { System.out.println("发送到UID: " + messageResult.getUid() + ", 结果:" + messageResult.getStatus()); } } - + // 添加断言 Assert.assertTrue("发送带URL消息应该成功", result.isSuccess()); Assert.assertEquals("处理成功", result.getMsg()); Assert.assertNotNull("返回数据不应为空", result.getData()); Assert.assertFalse("返回结果列表不应为空", result.getData().isEmpty()); - + MessageResult messageResult = result.getData().get(0); Assert.assertEquals("UID应匹配", TEST_UID, messageResult.getUid()); Assert.assertTrue("消息发送状态应包含'创建发送任务成功'", messageResult.getStatus().contains("创建发送任务成功")); @@ -215,18 +206,17 @@ public void testSendWithUrl() { public void testQueryMessageStatus() { // 先发送一条消息获取消息ID Message message = new Message(); - message.setAppToken(APP_TOKEN); message.setContentType(Message.CONTENT_TYPE_TEXT); message.setContent("这是一条用于测试查询状态的消息"); message.setUid(TEST_UID); - Result> sendResult = wxPusher.send(message); + Result> sendResult = WxPusher.getDefaultWxPusher().send(message); if (sendResult.isSuccess() && sendResult.getData() != null && !sendResult.getData().isEmpty()) { Long messageId = sendResult.getData().get(0).getMessageId(); if (messageId != null) { - Result result = wxPusher.queryMessageStatus(messageId); + Result result = WxPusher.getDefaultWxPusher().queryMessageStatus(messageId); System.out.println("查询结果:" + result.isSuccess() + ", 消息状态:" + result.getData()); - + // 添加断言 Assert.assertTrue("查询消息状态应该成功", result.isSuccess()); Assert.assertNotNull("状态码不应为空", result.getData()); @@ -248,18 +238,17 @@ public void testQueryMessageStatus() { public void testDeleteMessage() { // 先发送一条消息获取消息ID Message message = new Message(); - message.setAppToken(APP_TOKEN); message.setContentType(Message.CONTENT_TYPE_TEXT); message.setContent("这是一条用于测试删除的消息"); message.setUid(TEST_UID); - Result> sendResult = wxPusher.send(message); + Result> sendResult = WxPusher.getDefaultWxPusher().send(message); if (sendResult.isSuccess() && sendResult.getData() != null && !sendResult.getData().isEmpty()) { Long messageId = sendResult.getData().get(0).getMessageId(); if (messageId != null) { - Result result = wxPusher.deleteMessage(messageId); + Result result = WxPusher.getDefaultWxPusher().deleteMessage(messageId); System.out.println("删除结果:" + result.isSuccess() + ", 状态:" + result.getData()); - + // 根据实际情况,可能删除失败是正常的,因为消息已经推送给用户 // 这里我们只检查API调用是否返回了结果,而不检查删除是否成功 Assert.assertNotNull("应该返回结果", result); @@ -282,7 +271,7 @@ public void testCreateTempQrcode() { req.setExtra("test_extra_data"); req.setValidTime(1800); // 设置有效期为30分钟 - Result result = wxPusher.createAppTempQrcode(req); + Result result = WxPusher.getDefaultWxPusher().createAppTempQrcode(req); System.out.println("创建二维码结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); if (result.isSuccess() && result.getData() != null) { CreateQrcodeResp resp = result.getData(); @@ -292,12 +281,12 @@ public void testCreateTempQrcode() { System.out.println("过期时间: " + resp.getExpires()); System.out.println("附加数据: " + resp.getExtra()); } - + // 添加断言 Assert.assertTrue("创建二维码应该成功", result.isSuccess()); Assert.assertEquals("处理成功", result.getMsg()); Assert.assertNotNull("返回数据不应为空", result.getData()); - + CreateQrcodeResp resp = result.getData(); Assert.assertNotNull("二维码Code不应为空", resp.getCode()); Assert.assertNotNull("二维码URL不应为空", resp.getUrl()); @@ -311,7 +300,7 @@ public void testCreateTempQrcode() { */ @Test public void testQueryWxUser() { - Result> result = wxPusher.queryWxUserV2(APP_TOKEN, 1, 10, null, false, UserType.APP); + Result> result = WxPusher.getDefaultWxPusher().queryWxUserV2(1, 10, null, false, UserType.APP); System.out.println("查询用户结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); if (result.isSuccess() && result.getData() != null) { Page page = result.getData(); @@ -332,23 +321,23 @@ public void testQueryWxUser() { } } } - + // 添加断言 Assert.assertTrue("查询用户应该成功", result.isSuccess()); Assert.assertEquals("处理成功", result.getMsg()); Assert.assertNotNull("返回数据不应为空", result.getData()); - + Page page = result.getData(); Assert.assertNotNull("用户列表不应为空", page.getRecords()); Assert.assertFalse("用户列表不应为空", page.getRecords().isEmpty()); Assert.assertEquals("当前页应为1", Integer.valueOf(1), page.getPage()); Assert.assertEquals("页大小应为10", Integer.valueOf(10), page.getPageSize()); Assert.assertTrue("总用户数应大于0", page.getTotal() > 0); - + // 检查是否包含测试用户 boolean containsTestUser = false; - for(WxUser user : page.getRecords()) { - if(TEST_UID.equals(user.getUid())) { + for (WxUser user : page.getRecords()) { + if (TEST_UID.equals(user.getUid())) { containsTestUser = true; Assert.assertEquals("应用ID应匹配", Long.valueOf(141), user.getAppOrTopicId()); Assert.assertEquals("关注类型应为APP", 0, user.getType()); @@ -363,7 +352,7 @@ public void testQueryWxUser() { */ @Test public void testQuerySpecificUser() { - Result> result = wxPusher.queryWxUserV2(APP_TOKEN, 1, 10, TEST_UID, false, UserType.APP); + Result> result = WxPusher.getDefaultWxPusher().queryWxUserV2(1, 10, TEST_UID, false, UserType.APP); System.out.println("查询指定用户结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); if (result.isSuccess() && result.getData() != null) { Page page = result.getData(); @@ -380,16 +369,16 @@ public void testQuerySpecificUser() { System.out.println("未找到指定UID的用户"); } } - + // 添加断言 Assert.assertTrue("查询指定用户应该成功", result.isSuccess()); Assert.assertEquals("处理成功", result.getMsg()); Assert.assertNotNull("返回数据不应为空", result.getData()); - + Page page = result.getData(); Assert.assertNotNull("用户记录不应为空", page.getRecords()); Assert.assertFalse("用户记录不应为空", page.getRecords().isEmpty()); - + WxUser wxUser = page.getRecords().get(0); Assert.assertEquals("用户UID应匹配", TEST_UID, wxUser.getUid()); Assert.assertEquals("应用ID应匹配", Long.valueOf(141), wxUser.getAppOrTopicId()); @@ -407,19 +396,19 @@ public void testQueryScanUID() { req.setExtra("test_scan_uid"); req.setValidTime(300); // 设置有效期为5分钟 - Result createResult = wxPusher.createAppTempQrcode(req); + Result createResult = WxPusher.getDefaultWxPusher().createAppTempQrcode(req); if (createResult.isSuccess() && createResult.getData() != null) { String code = createResult.getData().getCode(); System.out.println("请扫描这个二维码URL: " + createResult.getData().getUrl()); System.out.println("等待用户扫描..."); // 注意:实际使用时,应该使用轮询方式,此处仅为示例 - Result result = wxPusher.queryScanUID(code); + Result result = WxPusher.getDefaultWxPusher().queryScanUID(code); System.out.println("查询扫码用户结果:" + result.isSuccess() + ", 消息:" + result.getMsg()); if (result.isSuccess() && result.getData() != null) { System.out.println("扫码用户UID: " + result.getData()); } - + // 添加断言 - 注意这里可能失败是正常的,因为没有用户扫码 Assert.assertNotNull("查询结果不应为空", result); } else { @@ -435,7 +424,7 @@ public void testQueryScanUID() { @Test public void testDeleteUser() { // 先查询出用户ID - Result> queryResult = wxPusher.queryWxUserV2(APP_TOKEN, 1, 10, TEST_UID, false, UserType.APP); + Result> queryResult = WxPusher.getDefaultWxPusher().queryWxUserV2(1, 10, TEST_UID, false, UserType.APP); if (queryResult.isSuccess() && queryResult.getData() != null && queryResult.getData().getRecords() != null && !queryResult.getData().getRecords().isEmpty()) { @@ -446,7 +435,7 @@ public void testDeleteUser() { // 谨慎执行以下代码,会真实删除用户关注 // Result result = wxPusher.deleteUser(userId); // System.out.println("删除用户结果:" + result.isSuccess() + ", 状态:" + result.getData()); - + // 添加断言 Assert.assertTrue("查询用户应该成功", queryResult.isSuccess()); Assert.assertNotNull("用户ID不应为空", userId); @@ -466,7 +455,7 @@ public void testDeleteUser() { @Test public void testRejectUser() { // 先查询出用户ID - Result> queryResult = wxPusher.queryWxUserV2(APP_TOKEN, 1, 10, TEST_UID, false, UserType.APP); + Result> queryResult = WxPusher.getDefaultWxPusher().queryWxUserV2(1, 10, TEST_UID, false, UserType.APP); if (queryResult.isSuccess() && queryResult.getData() != null && queryResult.getData().getRecords() != null && !queryResult.getData().getRecords().isEmpty()) { @@ -475,16 +464,16 @@ public void testRejectUser() { System.out.println("找到用户ID: " + userId); // 拉黑和取消拉黑用户的完整测试 - Result result = wxPusher.rejectUser(userId, true); + Result result = WxPusher.getDefaultWxPusher().rejectUser(userId, true); System.out.println("拉黑用户结果:" + result.isSuccess() + ", 状态:" + result.getData()); - + // 添加断言 Assert.assertTrue("拉黑用户应该成功", result.isSuccess()); Assert.assertTrue("操作状态应为true", result.getData()); - - Result result2 = wxPusher.rejectUser(userId, false); + + Result result2 = WxPusher.getDefaultWxPusher().rejectUser(userId, false); System.out.println("取消拉黑用户结果:" + result2.isSuccess() + ", 状态:" + result2.getData()); - + // 添加断言 Assert.assertTrue("取消拉黑用户应该成功", result2.isSuccess()); Assert.assertTrue("操作状态应为true", result2.getData()); diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/controller/CallBackController.java b/demo/src/main/java/com/smjcco/wxpusher/demo/controller/CallBackController.java index 7ddf422..4316205 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/controller/CallBackController.java +++ b/demo/src/main/java/com/smjcco/wxpusher/demo/controller/CallBackController.java @@ -43,7 +43,6 @@ public String callback(@RequestBody BaseCallBackReq callBackReq) { message.setContent("扫描成功,你可以使用demo演示程序发送消息"); message.setContentType(Message.CONTENT_TYPE_TEXT); message.setUid(appSubscribeBean.getUid()); - message.setAppToken(appToken); WxPusher.getDefaultWxPusher().send(message); } else { //无参数二维码(默认二维码),不需要发送提醒,会自动发送后台设置的 From e3a541a9b4b31059a38bd42db331ff5751a2fb2c Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 13 Apr 2025 13:48:28 +0800 Subject: [PATCH 10/16] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=8C=85=E5=90=8D?= =?UTF-8?q?=E5=92=8C=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client-sdk/build.gradle | 2 +- .../wxpusher/{ => client}/sdk/HttpUtils.java | 6 ++--- .../wxpusher/{ => client}/sdk/WxPusher.java | 4 +-- .../sdk/bean/CreateQrcodeReq.java | 2 +- .../sdk/bean/CreateQrcodeResp.java | 2 +- .../{ => client}/sdk/bean/Message.java | 2 +- .../{ => client}/sdk/bean/MessageResult.java | 2 +- .../wxpusher/{ => client}/sdk/bean/Page.java | 2 +- .../{ => client}/sdk/bean/Result.java | 2 +- .../{ => client}/sdk/bean/ResultCode.java | 2 +- .../{ => client}/sdk/bean/UserType.java | 2 +- .../{ => client}/sdk/bean/WxUser.java | 2 +- .../sdk/bean/callback/AppSubscribeBean.java | 2 +- .../sdk/bean/callback/BaseCallBackReq.java | 2 +- .../sdk/bean/callback/OrderPayBean.java | 2 +- .../sdk/bean/callback/UpCommandBean.java | 2 +- .../wxpusher/{ => client}/sdk/ClientTest.java | 4 +-- .../sdk}/demo/AppWebMvcConfigurer.java | 5 ++-- .../{ => client/sdk}/demo/CommonService.java | 4 +-- .../sdk}/demo/JavaWebApplication.java | 2 +- .../demo/controller/CallBackController.java | 16 ++++++------ .../demo/controller/CommonController.java | 2 +- .../demo/controller/DisplayController.java | 25 +++++++++---------- .../controller/HealthCheckController.java | 14 +++++------ .../sdk}/demo/controller/SendController.java | 8 +++--- .../cron/ClearTimeoutDataScheduleTask.java | 6 ++--- .../sdk}/demo/data/ScanQrocodeDataRepo.java | 4 +-- .../sdk}/demo/data/UpCommandDataRepo.java | 4 +-- .../sdk}/demo/result/AppException.java | 2 +- .../sdk}/demo/result/BizException.java | 2 +- .../sdk}/demo/result/HttpException.java | 2 +- .../{ => client/sdk}/demo/result/Result.java | 2 +- .../sdk}/demo/result/ResultCode.java | 2 +- .../{ => client/sdk}/demo/utils/DateUtil.java | 2 +- .../sdk}/demo/utils/RandomUtil.java | 2 +- .../sdk}/demo/utils/ThrowableUtils.java | 2 +- 36 files changed, 74 insertions(+), 74 deletions(-) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/HttpUtils.java (97%) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/WxPusher.java (99%) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/bean/CreateQrcodeReq.java (94%) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/bean/CreateQrcodeResp.java (95%) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/bean/Message.java (98%) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/bean/MessageResult.java (95%) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/bean/Page.java (94%) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/bean/Result.java (94%) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/bean/ResultCode.java (93%) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/bean/UserType.java (82%) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/bean/WxUser.java (98%) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/bean/callback/AppSubscribeBean.java (97%) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/bean/callback/BaseCallBackReq.java (93%) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/bean/callback/OrderPayBean.java (96%) rename client-sdk/src/main/java/com/smjcco/wxpusher/{ => client}/sdk/bean/callback/UpCommandBean.java (95%) rename client-sdk/src/test/java/com/smjcco/wxpusher/{ => client}/sdk/ClientTest.java (99%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/AppWebMvcConfigurer.java (97%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/CommonService.java (85%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/JavaWebApplication.java (86%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/controller/CallBackController.java (85%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/controller/CommonController.java (89%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/controller/DisplayController.java (76%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/controller/HealthCheckController.java (71%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/controller/SendController.java (92%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/cron/ClearTimeoutDataScheduleTask.java (78%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/data/ScanQrocodeDataRepo.java (91%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/data/UpCommandDataRepo.java (86%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/result/AppException.java (90%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/result/BizException.java (92%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/result/HttpException.java (87%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/result/Result.java (95%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/result/ResultCode.java (91%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/utils/DateUtil.java (97%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/utils/RandomUtil.java (95%) rename demo/src/main/java/com/smjcco/wxpusher/{ => client/sdk}/demo/utils/ThrowableUtils.java (88%) diff --git a/client-sdk/build.gradle b/client-sdk/build.gradle index ac14d73..65f66a9 100644 --- a/client-sdk/build.gradle +++ b/client-sdk/build.gradle @@ -15,7 +15,7 @@ java { group = 'com.smjcco.wxpusher' publishOnCentral { - version = '3.0.0' + version = '3.0.1' repoOwner.set("wxpusher") projectDescription.set("WxPusher消息推送平台 是一个使用微信公众号作为通道的,实时信息推送平台,你可以通过调用API的方式,把信息推送到微信上,无需安装额外的软件,即可做到信息实时通知。 你可以使用WxPusher来做服务器报警通知、抢课通知、抢票通知,信息更新提示等。") projectLongName.set("WxPusher消息推送平台 Java SDK") diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/HttpUtils.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/HttpUtils.java similarity index 97% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/HttpUtils.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/HttpUtils.java index 6809c47..242f05f 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/HttpUtils.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/HttpUtils.java @@ -1,10 +1,10 @@ -package com.smjcco.wxpusher.sdk; +package com.smjcco.wxpusher.client.sdk; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.TypeReference; -import com.smjcco.wxpusher.sdk.bean.Result; -import com.smjcco.wxpusher.sdk.bean.ResultCode; +import com.smjcco.wxpusher.client.sdk.bean.Result; +import com.smjcco.wxpusher.client.sdk.bean.ResultCode; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/WxPusher.java similarity index 99% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/WxPusher.java index 1787088..24ea11d 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/WxPusher.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/WxPusher.java @@ -1,7 +1,7 @@ -package com.smjcco.wxpusher.sdk; +package com.smjcco.wxpusher.client.sdk; import com.alibaba.fastjson2.TypeReference; -import com.smjcco.wxpusher.sdk.bean.*; +import com.smjcco.wxpusher.client.sdk.bean.*; import java.lang.reflect.Type; import java.util.HashMap; diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeReq.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/CreateQrcodeReq.java similarity index 94% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeReq.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/CreateQrcodeReq.java index ce36785..18c20fa 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeReq.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/CreateQrcodeReq.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.sdk.bean; +package com.smjcco.wxpusher.client.sdk.bean; /** * 说明:创建带参数的app临时二维码 diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeResp.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/CreateQrcodeResp.java similarity index 95% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeResp.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/CreateQrcodeResp.java index 8ed84ab..cdfd41b 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/CreateQrcodeResp.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/CreateQrcodeResp.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.sdk.bean; +package com.smjcco.wxpusher.client.sdk.bean; /** * 说明:创建带参数的app临时二维码 diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/Message.java similarity index 98% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/Message.java index 93ba931..06f4cd4 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Message.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/Message.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.sdk.bean; +package com.smjcco.wxpusher.client.sdk.bean; import java.util.HashSet; import java.util.Set; diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/MessageResult.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/MessageResult.java similarity index 95% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/MessageResult.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/MessageResult.java index 48f1e16..969645b 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/MessageResult.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/MessageResult.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.sdk.bean; +package com.smjcco.wxpusher.client.sdk.bean; /** * 说明: diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Page.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/Page.java similarity index 94% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Page.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/Page.java index c3f80a5..35db8e8 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Page.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/Page.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.sdk.bean; +package com.smjcco.wxpusher.client.sdk.bean; import java.util.List; diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Result.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/Result.java similarity index 94% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Result.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/Result.java index fb57440..e1beec3 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/Result.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/Result.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.sdk.bean; +package com.smjcco.wxpusher.client.sdk.bean; public class Result { private Integer code; diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/ResultCode.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/ResultCode.java similarity index 93% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/ResultCode.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/ResultCode.java index d17eda4..84f6d7a 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/ResultCode.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/ResultCode.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.sdk.bean; +package com.smjcco.wxpusher.client.sdk.bean; /** * 返回编码,参考http语义 diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/UserType.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/UserType.java similarity index 82% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/UserType.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/UserType.java index bddb1ea..0525593 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/UserType.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/UserType.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.sdk.bean; +package com.smjcco.wxpusher.client.sdk.bean; public enum UserType { APP(0), diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/WxUser.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/WxUser.java similarity index 98% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/WxUser.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/WxUser.java index 413b41e..b3cbf21 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/WxUser.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/WxUser.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.sdk.bean; +package com.smjcco.wxpusher.client.sdk.bean; /** * 说明:微信用户数据 diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/AppSubscribeBean.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/callback/AppSubscribeBean.java similarity index 97% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/AppSubscribeBean.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/callback/AppSubscribeBean.java index aef9fec..1a61959 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/AppSubscribeBean.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/callback/AppSubscribeBean.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.sdk.bean.callback; +package com.smjcco.wxpusher.client.sdk.bean.callback; /** * 说明:二维码被扫描的时候的回调数据结构 diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/BaseCallBackReq.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/callback/BaseCallBackReq.java similarity index 93% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/BaseCallBackReq.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/callback/BaseCallBackReq.java index a146cec..b4134bd 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/BaseCallBackReq.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/callback/BaseCallBackReq.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.sdk.bean.callback; +package com.smjcco.wxpusher.client.sdk.bean.callback; /** * 说明:wxpusher回调的数据结构 diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/OrderPayBean.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/callback/OrderPayBean.java similarity index 96% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/OrderPayBean.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/callback/OrderPayBean.java index 3093c6b..4bfd54c 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/OrderPayBean.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/callback/OrderPayBean.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.sdk.bean.callback; +package com.smjcco.wxpusher.client.sdk.bean.callback; public class OrderPayBean { //付费增加的时间,毫秒。退款是负数,表示减少的订阅时间。 diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/UpCommandBean.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/callback/UpCommandBean.java similarity index 95% rename from client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/UpCommandBean.java rename to client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/callback/UpCommandBean.java index e21d9c1..d88728e 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/sdk/bean/callback/UpCommandBean.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/callback/UpCommandBean.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.sdk.bean.callback; +package com.smjcco.wxpusher.client.sdk.bean.callback; /** * 说明:上行消息内容 diff --git a/client-sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java b/client-sdk/src/test/java/com/smjcco/wxpusher/client/sdk/ClientTest.java similarity index 99% rename from client-sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java rename to client-sdk/src/test/java/com/smjcco/wxpusher/client/sdk/ClientTest.java index 5a670f8..272e4cc 100644 --- a/client-sdk/src/test/java/com/smjcco/wxpusher/sdk/ClientTest.java +++ b/client-sdk/src/test/java/com/smjcco/wxpusher/client/sdk/ClientTest.java @@ -1,6 +1,6 @@ -package com.smjcco.wxpusher.sdk; +package com.smjcco.wxpusher.client.sdk; -import com.smjcco.wxpusher.sdk.bean.*; +import com.smjcco.wxpusher.client.sdk.bean.*; import org.junit.Assert; import org.junit.Before; import org.junit.Test; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/AppWebMvcConfigurer.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/AppWebMvcConfigurer.java similarity index 97% rename from demo/src/main/java/com/smjcco/wxpusher/demo/AppWebMvcConfigurer.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/AppWebMvcConfigurer.java index 57a2b8c..127f7ff 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/AppWebMvcConfigurer.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/AppWebMvcConfigurer.java @@ -1,9 +1,10 @@ -package com.smjcco.wxpusher.demo; +package com.smjcco.wxpusher.client.sdk.demo; import com.fasterxml.jackson.databind.ObjectMapper; +import com.smjcco.wxpusher.client.sdk.demo.result.*; import com.smjcco.wxpusher.demo.result.*; -import com.smjcco.wxpusher.demo.utils.ThrowableUtils; +import com.smjcco.wxpusher.client.sdk.demo.utils.ThrowableUtils; import org.springframework.context.annotation.Configuration; import org.springframework.validation.BindException; import org.springframework.validation.ObjectError; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/CommonService.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/CommonService.java similarity index 85% rename from demo/src/main/java/com/smjcco/wxpusher/demo/CommonService.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/CommonService.java index 14729e5..d874557 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/CommonService.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/CommonService.java @@ -1,6 +1,6 @@ -package com.smjcco.wxpusher.demo; +package com.smjcco.wxpusher.client.sdk.demo; -import com.smjcco.wxpusher.sdk.WxPusher; +import com.smjcco.wxpusher.client.sdk.WxPusher; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/JavaWebApplication.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/JavaWebApplication.java similarity index 86% rename from demo/src/main/java/com/smjcco/wxpusher/demo/JavaWebApplication.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/JavaWebApplication.java index 8992821..b12cae8 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/JavaWebApplication.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/JavaWebApplication.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.demo; +package com.smjcco.wxpusher.client.sdk.demo; import org.springframework.boot.SpringApplication; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/controller/CallBackController.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/CallBackController.java similarity index 85% rename from demo/src/main/java/com/smjcco/wxpusher/demo/controller/CallBackController.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/CallBackController.java index 4316205..8c7b6e0 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/controller/CallBackController.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/CallBackController.java @@ -1,13 +1,13 @@ -package com.smjcco.wxpusher.demo.controller; +package com.smjcco.wxpusher.client.sdk.demo.controller; import com.alibaba.fastjson2.JSON; -import com.smjcco.wxpusher.demo.data.ScanQrocodeDataRepo; -import com.smjcco.wxpusher.demo.data.UpCommandDataRepo; -import com.smjcco.wxpusher.sdk.WxPusher; -import com.smjcco.wxpusher.sdk.bean.Message; -import com.smjcco.wxpusher.sdk.bean.callback.AppSubscribeBean; -import com.smjcco.wxpusher.sdk.bean.callback.BaseCallBackReq; -import com.smjcco.wxpusher.sdk.bean.callback.UpCommandBean; +import com.smjcco.wxpusher.client.sdk.demo.data.ScanQrocodeDataRepo; +import com.smjcco.wxpusher.client.sdk.demo.data.UpCommandDataRepo; +import com.smjcco.wxpusher.client.sdk.WxPusher; +import com.smjcco.wxpusher.client.sdk.bean.Message; +import com.smjcco.wxpusher.client.sdk.bean.callback.AppSubscribeBean; +import com.smjcco.wxpusher.client.sdk.bean.callback.BaseCallBackReq; +import com.smjcco.wxpusher.client.sdk.bean.callback.UpCommandBean; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.StringUtils; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/controller/CommonController.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/CommonController.java similarity index 89% rename from demo/src/main/java/com/smjcco/wxpusher/demo/controller/CommonController.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/CommonController.java index dea236b..70c6098 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/controller/CommonController.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/CommonController.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.demo.controller; +package com.smjcco.wxpusher.client.sdk.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/controller/DisplayController.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/DisplayController.java similarity index 76% rename from demo/src/main/java/com/smjcco/wxpusher/demo/controller/DisplayController.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/DisplayController.java index dca95da..ee8b6b4 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/controller/DisplayController.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/DisplayController.java @@ -1,18 +1,17 @@ -package com.smjcco.wxpusher.demo.controller; +package com.smjcco.wxpusher.client.sdk.demo.controller; -import com.smjcco.wxpusher.demo.data.ScanQrocodeDataRepo; -import com.smjcco.wxpusher.demo.data.UpCommandDataRepo; -import com.smjcco.wxpusher.demo.result.BizException; -import com.smjcco.wxpusher.demo.utils.RandomUtil; -import com.smjcco.wxpusher.sdk.WxPusher; -import com.smjcco.wxpusher.sdk.bean.CreateQrcodeReq; -import com.smjcco.wxpusher.sdk.bean.CreateQrcodeResp; -import com.smjcco.wxpusher.sdk.bean.Result; -import com.smjcco.wxpusher.sdk.bean.ResultCode; -import com.smjcco.wxpusher.sdk.bean.callback.AppSubscribeBean; -import com.smjcco.wxpusher.sdk.bean.callback.UpCommandBean; +import com.smjcco.wxpusher.client.sdk.demo.data.ScanQrocodeDataRepo; +import com.smjcco.wxpusher.client.sdk.demo.data.UpCommandDataRepo; +import com.smjcco.wxpusher.client.sdk.demo.result.BizException; +import com.smjcco.wxpusher.client.sdk.demo.utils.RandomUtil; +import com.smjcco.wxpusher.client.sdk.WxPusher; +import com.smjcco.wxpusher.client.sdk.bean.CreateQrcodeReq; +import com.smjcco.wxpusher.client.sdk.bean.CreateQrcodeResp; +import com.smjcco.wxpusher.client.sdk.bean.Result; +import com.smjcco.wxpusher.client.sdk.bean.ResultCode; +import com.smjcco.wxpusher.client.sdk.bean.callback.AppSubscribeBean; +import com.smjcco.wxpusher.client.sdk.bean.callback.UpCommandBean; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/controller/HealthCheckController.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/HealthCheckController.java similarity index 71% rename from demo/src/main/java/com/smjcco/wxpusher/demo/controller/HealthCheckController.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/HealthCheckController.java index 9767368..8f9a94c 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/controller/HealthCheckController.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/HealthCheckController.java @@ -1,11 +1,11 @@ -package com.smjcco.wxpusher.demo.controller; +package com.smjcco.wxpusher.client.sdk.demo.controller; import com.alibaba.fastjson2.JSON; -import com.smjcco.wxpusher.demo.result.HttpException; -import com.smjcco.wxpusher.demo.result.Result; -import com.smjcco.wxpusher.demo.result.ResultCode; -import com.smjcco.wxpusher.demo.utils.DateUtil; -import com.smjcco.wxpusher.sdk.WxPusher; +import com.smjcco.wxpusher.client.sdk.demo.result.HttpException; +import com.smjcco.wxpusher.client.sdk.demo.result.Result; +import com.smjcco.wxpusher.client.sdk.demo.result.ResultCode; +import com.smjcco.wxpusher.client.sdk.demo.utils.DateUtil; +import com.smjcco.wxpusher.client.sdk.WxPusher; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -28,7 +28,7 @@ public Result alive() { long now = System.currentTimeMillis(); Map data = new HashMap<>(); data.put("系统启动时间", DateUtil.formatTimeLong(now - startTime)); - com.smjcco.wxpusher.sdk.bean.Result result = WxPusher.getDefaultWxPusher().queryMessageStatus(1L); + com.smjcco.wxpusher.client.sdk.bean.Result result = WxPusher.getDefaultWxPusher().queryMessageStatus(1L); boolean connectWxPusher = (result.getCode() == ResultCode.SUCCESS.getCode()) || (result.getCode() == ResultCode.BIZ_FAIL.getCode()); data.put("到WxPuhser的链接状态", connectWxPusher); diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/controller/SendController.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/SendController.java similarity index 92% rename from demo/src/main/java/com/smjcco/wxpusher/demo/controller/SendController.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/SendController.java index f501bea..6aebd56 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/controller/SendController.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/controller/SendController.java @@ -1,8 +1,8 @@ -package com.smjcco.wxpusher.demo.controller; +package com.smjcco.wxpusher.client.sdk.demo.controller; -import com.smjcco.wxpusher.sdk.WxPusher; -import com.smjcco.wxpusher.sdk.bean.Message; -import com.smjcco.wxpusher.sdk.bean.Result; +import com.smjcco.wxpusher.client.sdk.WxPusher; +import com.smjcco.wxpusher.client.sdk.bean.Message; +import com.smjcco.wxpusher.client.sdk.bean.Result; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/cron/ClearTimeoutDataScheduleTask.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/cron/ClearTimeoutDataScheduleTask.java similarity index 78% rename from demo/src/main/java/com/smjcco/wxpusher/demo/cron/ClearTimeoutDataScheduleTask.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/cron/ClearTimeoutDataScheduleTask.java index eba3dec..73fa84e 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/cron/ClearTimeoutDataScheduleTask.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/cron/ClearTimeoutDataScheduleTask.java @@ -1,7 +1,7 @@ -package com.smjcco.wxpusher.demo.cron; +package com.smjcco.wxpusher.client.sdk.demo.cron; -import com.smjcco.wxpusher.demo.data.ScanQrocodeDataRepo; -import com.smjcco.wxpusher.demo.data.UpCommandDataRepo; +import com.smjcco.wxpusher.client.sdk.demo.data.ScanQrocodeDataRepo; +import com.smjcco.wxpusher.client.sdk.demo.data.UpCommandDataRepo; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/data/ScanQrocodeDataRepo.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/data/ScanQrocodeDataRepo.java similarity index 91% rename from demo/src/main/java/com/smjcco/wxpusher/demo/data/ScanQrocodeDataRepo.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/data/ScanQrocodeDataRepo.java index 02c81a7..7d75f75 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/data/ScanQrocodeDataRepo.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/data/ScanQrocodeDataRepo.java @@ -1,8 +1,8 @@ -package com.smjcco.wxpusher.demo.data; +package com.smjcco.wxpusher.client.sdk.demo.data; import java.util.*; -import com.smjcco.wxpusher.sdk.bean.callback.AppSubscribeBean; +import com.smjcco.wxpusher.client.sdk.bean.callback.AppSubscribeBean; import lombok.extern.slf4j.Slf4j; /** diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/data/UpCommandDataRepo.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/data/UpCommandDataRepo.java similarity index 86% rename from demo/src/main/java/com/smjcco/wxpusher/demo/data/UpCommandDataRepo.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/data/UpCommandDataRepo.java index 73e0903..f082da2 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/data/UpCommandDataRepo.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/data/UpCommandDataRepo.java @@ -1,6 +1,6 @@ -package com.smjcco.wxpusher.demo.data; +package com.smjcco.wxpusher.client.sdk.demo.data; -import com.smjcco.wxpusher.sdk.bean.callback.UpCommandBean; +import com.smjcco.wxpusher.client.sdk.bean.callback.UpCommandBean; import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/result/AppException.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/AppException.java similarity index 90% rename from demo/src/main/java/com/smjcco/wxpusher/demo/result/AppException.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/AppException.java index 644c494..3a51039 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/result/AppException.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/AppException.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.demo.result; +package com.smjcco.wxpusher.client.sdk.demo.result; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/result/BizException.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/BizException.java similarity index 92% rename from demo/src/main/java/com/smjcco/wxpusher/demo/result/BizException.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/BizException.java index ecb3c2e..788945d 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/result/BizException.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/BizException.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.demo.result; +package com.smjcco.wxpusher.client.sdk.demo.result; /** * 业务异常,一般不是应用的错误,比如:用户登陆没有输入账号 diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/result/HttpException.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/HttpException.java similarity index 87% rename from demo/src/main/java/com/smjcco/wxpusher/demo/result/HttpException.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/HttpException.java index 3e0d841..691a0a6 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/result/HttpException.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/HttpException.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.demo.result; +package com.smjcco.wxpusher.client.sdk.demo.result; import lombok.Getter; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/result/Result.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/Result.java similarity index 95% rename from demo/src/main/java/com/smjcco/wxpusher/demo/result/Result.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/Result.java index 08beffe..51b3f15 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/result/Result.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/Result.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.demo.result; +package com.smjcco.wxpusher.client.sdk.demo.result; import lombok.Getter; import lombok.Setter; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/result/ResultCode.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/ResultCode.java similarity index 91% rename from demo/src/main/java/com/smjcco/wxpusher/demo/result/ResultCode.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/ResultCode.java index 0ad4f00..4ec6b8b 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/result/ResultCode.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/result/ResultCode.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.demo.result; +package com.smjcco.wxpusher.client.sdk.demo.result; /** * 返回编码,参考http语义 diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/utils/DateUtil.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/utils/DateUtil.java similarity index 97% rename from demo/src/main/java/com/smjcco/wxpusher/demo/utils/DateUtil.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/utils/DateUtil.java index 953f87e..8a4ae6d 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/utils/DateUtil.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/utils/DateUtil.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.demo.utils; +package com.smjcco.wxpusher.client.sdk.demo.utils; import java.text.SimpleDateFormat; import java.util.Date; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/utils/RandomUtil.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/utils/RandomUtil.java similarity index 95% rename from demo/src/main/java/com/smjcco/wxpusher/demo/utils/RandomUtil.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/utils/RandomUtil.java index 1fd03ac..c33000b 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/utils/RandomUtil.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/utils/RandomUtil.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.demo.utils; +package com.smjcco.wxpusher.client.sdk.demo.utils; import java.util.concurrent.ThreadLocalRandom; diff --git a/demo/src/main/java/com/smjcco/wxpusher/demo/utils/ThrowableUtils.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/utils/ThrowableUtils.java similarity index 88% rename from demo/src/main/java/com/smjcco/wxpusher/demo/utils/ThrowableUtils.java rename to demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/utils/ThrowableUtils.java index 529b6f9..bc7ec90 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/demo/utils/ThrowableUtils.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/utils/ThrowableUtils.java @@ -1,4 +1,4 @@ -package com.smjcco.wxpusher.demo.utils; +package com.smjcco.wxpusher.client.sdk.demo.utils; import org.springframework.lang.Nullable; From d0110409c88554a6ee0f47a30798643aa9f1d3a6 Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 13 Apr 2025 13:54:10 +0800 Subject: [PATCH 11/16] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++++ .../java/com/smjcco/wxpusher/client/sdk/ClientTest.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f13ab22..7b16452 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,12 @@ WxPusher会提供一些用户事件,比如用户关注、用户上行消息等 ## 功能说明 具体每个功能的说明,请参考API说明文档,这里不再赘述。 + +

+不想看文档,可以直接参考[单元测试的用法 client-sdk/src/test/java/com/smjcco/wxpusher/client/sdk/ClientTest.java](https://github.com/wxpusher/wxpusher-sdk-java/blob/master/client-sdk/src/test/java/com/smjcco/wxpusher/client/sdk/ClientTest.java) +

+ + ### 初始化 如果是你只需要一个实例(一个appToken),可以直接使用default,在使用之前进行初始化; ```java diff --git a/client-sdk/src/test/java/com/smjcco/wxpusher/client/sdk/ClientTest.java b/client-sdk/src/test/java/com/smjcco/wxpusher/client/sdk/ClientTest.java index 272e4cc..c6def30 100644 --- a/client-sdk/src/test/java/com/smjcco/wxpusher/client/sdk/ClientTest.java +++ b/client-sdk/src/test/java/com/smjcco/wxpusher/client/sdk/ClientTest.java @@ -439,7 +439,7 @@ public void testDeleteUser() { // 添加断言 Assert.assertTrue("查询用户应该成功", queryResult.isSuccess()); Assert.assertNotNull("用户ID不应为空", userId); - Assert.assertEquals("用户ID应匹配预期", Long.valueOf(34334), userId); + Assert.assertEquals("用户ID应匹配预期", Long.valueOf(28134), userId); System.out.println("为避免真实删除用户,该测试方法已被注释"); } else { From 903b584a7ee9f83e73e54588765bdae918f218a3 Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 13 Apr 2025 13:55:16 +0800 Subject: [PATCH 12/16] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/smjcco/wxpusher/client/sdk/bean/Message.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/Message.java b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/Message.java index 06f4cd4..e07b6a8 100644 --- a/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/Message.java +++ b/client-sdk/src/main/java/com/smjcco/wxpusher/client/sdk/bean/Message.java @@ -49,6 +49,8 @@ public String getAppToken() { /** * 不需要外部设置,后面会删除这个字段 + * @param appToken 应用token + * @deprecated 不要使用,内部接口依赖,后面会删除。 */ public void setAppToken(String appToken) { this.appToken = appToken; From c10e4b36a1d6d98cd17bab789cd1ab817b362f5d Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 13 Apr 2025 13:56:44 +0800 Subject: [PATCH 13/16] 3.0.2 --- client-sdk/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client-sdk/build.gradle b/client-sdk/build.gradle index 65f66a9..d154e12 100644 --- a/client-sdk/build.gradle +++ b/client-sdk/build.gradle @@ -15,7 +15,7 @@ java { group = 'com.smjcco.wxpusher' publishOnCentral { - version = '3.0.1' + version = '3.0.2' repoOwner.set("wxpusher") projectDescription.set("WxPusher消息推送平台 是一个使用微信公众号作为通道的,实时信息推送平台,你可以通过调用API的方式,把信息推送到微信上,无需安装额外的软件,即可做到信息实时通知。 你可以使用WxPusher来做服务器报警通知、抢课通知、抢票通知,信息更新提示等。") projectLongName.set("WxPusher消息推送平台 Java SDK") From debf394b2baa3760b90fad3f17ec50037aba9cbb Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 13 Apr 2025 14:00:40 +0800 Subject: [PATCH 14/16] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=A5=BD=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7b16452..4732b76 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ 如果不存在你需要语言的sdk,请你按照[参考文档](http://wxpusher.zjiecode.com/docs)直接使用http调用,另外,欢迎你贡献更多语言的SDK。 # Java版本SDK -[ ![version](https://img.shields.io/static/v1.svg?label=version&message=3.0.0&color=brightgreen) ](https://bintray.com/zjiecode/maven/wxpusher-java-sdk) +[ ![version](https://img.shields.io/static/v1.svg?label=version&message=3.0.2&color=brightgreen) ](https://bintray.com/zjiecode/maven/wxpusher-java-sdk) ## 目录模块说明 - demo @@ -47,7 +47,7 @@ dependencies { com.smjcco.wxpusher client-sdk - 3.0.0 + 3.0.2 ``` ## 系统回调 From 25db3a57ec748768f939d20aef7db82d27419fd3 Mon Sep 17 00:00:00 2001 From: zjiecode Date: Sun, 13 Apr 2025 14:22:04 +0800 Subject: [PATCH 15/16] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4732b76..47699ad 100644 --- a/README.md +++ b/README.md @@ -58,9 +58,8 @@ WxPusher会提供一些用户事件,比如用户关注、用户上行消息等 ## 功能说明 具体每个功能的说明,请参考API说明文档,这里不再赘述。 -

-不想看文档,可以直接参考[单元测试的用法 client-sdk/src/test/java/com/smjcco/wxpusher/client/sdk/ClientTest.java](https://github.com/wxpusher/wxpusher-sdk-java/blob/master/client-sdk/src/test/java/com/smjcco/wxpusher/client/sdk/ClientTest.java) -

+不想看文档,可以直接参考[单元测试的用法(client-sdk/src/test/java/com/smjcco/wxpusher/client/sdk/ClientTest.java)](https://github.com/wxpusher/wxpusher-sdk-java/blob/master/client-sdk/src/test/java/com/smjcco/wxpusher/client/sdk/ClientTest.java) + ### 初始化 From b98d378e5e6f70d448c8887356165047a0274849 Mon Sep 17 00:00:00 2001 From: zjiecode Date: Mon, 15 Jun 2026 14:35:16 +0800 Subject: [PATCH 16/16] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/sdk/demo/AppWebMvcConfigurer.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/AppWebMvcConfigurer.java b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/AppWebMvcConfigurer.java index 127f7ff..b4f2ebd 100644 --- a/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/AppWebMvcConfigurer.java +++ b/demo/src/main/java/com/smjcco/wxpusher/client/sdk/demo/AppWebMvcConfigurer.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.smjcco.wxpusher.client.sdk.demo.result.*; -import com.smjcco.wxpusher.demo.result.*; import com.smjcco.wxpusher.client.sdk.demo.utils.ThrowableUtils; import org.springframework.context.annotation.Configuration; @@ -79,11 +78,11 @@ public void configureHandlerExceptionResolvers(List re result = new Result(ResultCode.INTERNAL_SERVER_ERROR, "服务器错误:" + throwable.getMessage()); responseResult(response, result); log.error(result.toString(), throwable); - }else if (throwable instanceof HttpException){ + } else if (throwable instanceof HttpException) { //返回原始的http status code result = new Result(ResultCode.INTERNAL_SERVER_ERROR, "服务器错误:" + throwable.getMessage()); - responseResult(response, result,((HttpException) throwable).getHttpStatus()); - } else { + responseResult(response, result, ((HttpException) throwable).getHttpStatus()); + } else { //其他错误 String message = String.format("接口 [%s] 出现异常", request.getRequestURI()); result = new Result(ResultCode.INTERNAL_SERVER_ERROR, message); @@ -106,12 +105,13 @@ public void addCorsMappings(CorsRegistry registry) { } private void responseResult(HttpServletResponse response, Result result) { - responseResult(response, result,200); + responseResult(response, result, 200); } - /** - * 遇到错误,拦截以后输出响应到客户端 - */ - private void responseResult(HttpServletResponse response, Result result,int httpCode) { + + /** + * 遇到错误,拦截以后输出响应到客户端 + */ + private void responseResult(HttpServletResponse response, Result result, int httpCode) { response.setCharacterEncoding("UTF-8"); response.setHeader("Content-type", "application/json;charset=UTF-8"); response.setHeader("Access-Control-Allow-Credentials", "true");