From cfe0b79fbea0fb1d7a5a796e71ada7d3b7812046 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期一, 15 十二月 2025 22:31:33 +0800
Subject: [PATCH] feat: 企业微信发送微信小程序cetd
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/QyWechatServiceImpl.java | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 100 insertions(+), 0 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/QyWechatServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/QyWechatServiceImpl.java
index 8615f04..6d511f2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/QyWechatServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/QyWechatServiceImpl.java
@@ -65,6 +65,30 @@
}
}
+ @Override
+ public boolean sendNotifyMessage(Long userId, String title, String content, String appId, String businessUrl) {
+ try {
+ // 妫�鏌ユ湇鍔℃槸鍚﹀惎鐢�
+ if (!isEnabled()) {
+ log.info("浼佷笟寰俊鏈嶅姟鏈惎鐢紝璺宠繃娑堟伅鍙戦��");
+ return false;
+ }
+
+ // 鑾峰彇鐢ㄦ埛鐨勪紒涓氬井淇D
+ String qyUserId = getQyUserIdByUserId(userId);
+ if (StringUtils.isEmpty(qyUserId)) {
+ log.warn("鐢ㄦ埛{}鏈粦瀹氫紒涓氬井淇D锛屾棤娉曞彂閫佹秷鎭�", userId);
+ return false;
+ }
+
+ // 鍙戦�佹枃鏈秷鎭�
+ return sendTextMessage(qyUserId, title, content, appId, businessUrl);
+ } catch (Exception e) {
+ log.error("浼佷笟寰俊娑堟伅鍙戦�佸紓甯革紝userId={}", userId, e);
+ return false;
+ }
+ }
+
/**
* 鍙戦�佷紒涓氬井淇℃枃鏈秷鎭�
*/
@@ -101,6 +125,7 @@
article.setTitle(title);
article.setDescription(content);
article.setUrl(notifyUrl);
+
// 璁剧疆榛樿鍥剧墖URL锛屾偍鍙互鏍规嵁闇�瑕佷慨鏀�
@@ -141,6 +166,81 @@
}
}
+ @Override
+ public boolean sendTextMessage(String qyUserId, String title, String content, String appId, String businessUrl) {
+ try {
+ // 妫�鏌ユ湇鍔℃槸鍚﹀惎鐢�
+ if (!isEnabled()) {
+ log.info("浼佷笟寰俊鏈嶅姟鏈惎鐢紝璺宠繃娑堟伅鍙戦��");
+ return false;
+ }
+
+ // 鑾峰彇浼佷笟寰俊閰嶇疆
+ String corpId = configService.selectConfigByKey("qy_wechat.corp_id");
+ String corpSecret = configService.selectConfigByKey("qy_wechat.miniprogram_secret");
+
+ if (StringUtils.isEmpty(corpId) || StringUtils.isEmpty(corpSecret)) {
+ log.error("浼佷笟寰俊閰嶇疆涓嶅畬鏁达紝缂哄皯corpId鎴朿orpSecret");
+ return false;
+ }
+
+ // 鑾峰彇AccessToken
+ String accessToken = qyWechatAccessTokenService.getQyMiniAccessToken(corpId, corpSecret);
+ if (StringUtils.isEmpty(accessToken)) {
+ log.error("鑾峰彇浼佷笟寰俊AccessToken澶辫触");
+ return false;
+ }
+
+ // 鏋勯�犺姹俇RL
+ String url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + accessToken;
+
+ // 鏋勯�犳枃绔犲璞�
+ QyWechatArticle article = new QyWechatArticle();
+ article.setTitle(title);
+ article.setDescription(content);
+ article.setAppid(appId);
+ article.setPagepath(businessUrl);
+
+ // 璁剧疆榛樿鍥剧墖URL锛屾偍鍙互鏍规嵁闇�瑕佷慨鏀�
+
+
+ // 鏋勯�犺姹傚弬鏁�
+ Map<String, Object> params = new HashMap<>();
+ params.put("touser", qyUserId);
+ params.put("msgtype", "news");
+ params.put("agentid", Integer.parseInt(configService.selectConfigByKey("qywechat.miniprogram.agentid")));
+
+ // 鏋勯�犳枃绔犲垪琛�
+ List<QyWechatArticle> articles = new ArrayList<>();
+ articles.add(article);
+ params.put("news", Collections.singletonMap("articles", articles));
+
+ // 鍙戦�丠TTP POST璇锋眰
+ String response = sendHttpPostRequest(url, params);
+
+ if (StringUtils.isEmpty(response)) {
+ log.error("鍙戦�佷紒涓氬井淇℃秷鎭け璐ワ紝鍝嶅簲涓虹┖");
+ return false;
+ }
+
+ // 瑙f瀽鍝嶅簲缁撴灉
+ QyWechatResponse result = parseResponse(response);
+
+ if (result != null && result.getErrcode() == 0) {
+ log.info("浼佷笟寰俊娑堟伅鍙戦�佹垚鍔燂紝鐢ㄦ埛ID: {}", qyUserId);
+ return true;
+ } else {
+ log.error("浼佷笟寰俊娑堟伅鍙戦�佸け璐ワ紝閿欒鐮�: {}, 閿欒淇℃伅: {}",
+ result != null ? result.getErrcode() : "unknown",
+ result != null ? result.getErrmsg() : response);
+ return false;
+ }
+ } catch (Exception e) {
+ log.error("浼佷笟寰俊鏂囨湰娑堟伅鍙戦�佸紓甯革紝qyUserId={}", qyUserId, e);
+ return false;
+ }
+ }
+
/**
* 鑾峰彇鐢ㄦ埛鐨勪紒涓氬井淇D
*/
--
Gitblit v1.9.1