From b6ee78665e4986e3fbc75af2c67454a7fb0e02f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=8C=E5=85=88=E8=88=9C?= <2499071264@qq.com> Date: Thu, 8 Oct 2026 20:55:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=82=E8=80=83v3=E9=87=8C=E9=9D=A2?= =?UTF-8?q?=E5=A4=84=E7=90=86=E6=8E=A5=E5=8F=A3=E9=80=BB=E8=BE=91=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/base/sms/impl/SmsServiceImpl.java | 9 + .../app/base/sms/impl/ZjnuMessageService.java | 165 ++++++++++++++++++ .../sys/controller/SysLoginController.java | 65 +++++-- .../app/web/commons/proc/WkFailProcessor.java | 27 +-- .../fitnesswalk/utils/WeAppCloudUtil.java | 38 ++-- src/main/resources/application-dev.yaml | 28 ++- src/main/resources/application-prd.yaml | 24 ++- src/main/resources/application.yaml | 11 ++ 8 files changed, 300 insertions(+), 67 deletions(-) create mode 100644 src/main/java/com/budwk/app/base/sms/impl/ZjnuMessageService.java diff --git a/src/main/java/com/budwk/app/base/sms/impl/SmsServiceImpl.java b/src/main/java/com/budwk/app/base/sms/impl/SmsServiceImpl.java index 184a58d..3419242 100644 --- a/src/main/java/com/budwk/app/base/sms/impl/SmsServiceImpl.java +++ b/src/main/java/com/budwk/app/base/sms/impl/SmsServiceImpl.java @@ -50,6 +50,8 @@ public class SmsServiceImpl implements SmsService { @Inject private PropertiesProxy conf; + @Inject + private ZjnuMessageService zjnuMessageService; /** * 发送短信消息。 @@ -59,6 +61,9 @@ public class SmsServiceImpl implements SmsService { */ @Override public MsgPlatformResponse sendSms(MsgPlatformSmsRequest request) { + if ("zjnu".equals(conf.get("msg.platform.provider", "cug"))) { + return zjnuMessageService.send(request, false); + } validateCommonRequest(request); JSONObject payload = buildCommonPayload(request, true); return doPost(SMS_API_PATH, payload); @@ -107,6 +112,9 @@ public class SmsServiceImpl implements SmsService { */ @Override public MsgPlatformResponse sendWechat(MsgPlatformWechatRequest request) { + if ("zjnu".equals(conf.get("msg.platform.provider", "cug"))) { + return zjnuMessageService.send(request, true); + } validateCommonRequest(request); if (Strings.isBlank(request.getWechatType())) { request.setWechatType("text"); @@ -342,6 +350,7 @@ public class SmsServiceImpl implements SmsService { * @param request 平台请求参数 */ private void fillDefaultSenderInfo(MsgPlatformBaseRequest request) { + if ("zjnu".equals(conf.get("msg.platform.provider", "cug"))) return; request.setSendUserId(getRequiredConfig("msg.platform.default-send-user-id", "请先配置 msg.platform.default-send-user-id")); request.setSendUserName(getRequiredConfig("msg.platform.default-send-user-name", "请先配置 msg.platform.default-send-user-name")); request.setSendUnitId(conf.get("msg.platform.default-send-unit-id", "")); diff --git a/src/main/java/com/budwk/app/base/sms/impl/ZjnuMessageService.java b/src/main/java/com/budwk/app/base/sms/impl/ZjnuMessageService.java new file mode 100644 index 0000000..58f6331 --- /dev/null +++ b/src/main/java/com/budwk/app/base/sms/impl/ZjnuMessageService.java @@ -0,0 +1,165 @@ +package com.budwk.app.base.sms.impl; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.digest.DigestUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.budwk.app.base.exception.BaseException; +import com.budwk.app.base.sms.model.*; +import com.budwk.app.sys.models.Sys_user; +import com.budwk.app.web.commons.base.Globals; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.integration.jedis.RedisService; +import org.nutz.ioc.impl.PropertiesProxy; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +@IocBean +public class ZjnuMessageService { + @Inject + private PropertiesProxy conf; + @Inject + private RedisService redisService; + @Inject + private Dao dao; + + public MsgPlatformResponse send(MsgPlatformBaseRequest request, boolean wechat) { + if (request == null) throw new BaseException("请求参数不能为空"); + if (!Globals.sso || !Globals.MyConfig.getBoolean("AppSms", false) + || !conf.getBoolean("msg.platform.enabled", false)) { + MsgPlatformResponse result = new MsgPlatformResponse(); + result.setHttpStatus(200); + result.setCode(0); + result.setResult(true); + result.setMsg("消息发送开关未开启,已跳过实际发送"); + return result; + } + String content = request.getInfo(); + if (StrUtil.isBlank(content) && request instanceof MsgPlatformWechatRequest) { + List items = ((MsgPlatformWechatRequest) request).getNewsItems(); + if (items != null) { + StringBuilder text = new StringBuilder(); + for (MsgPlatformNewsItem item : items) { + if (item == null) continue; + for (String value : new String[]{item.getTitle(), item.getDescription(), item.getUrl()}) { + if (StrUtil.isNotBlank(value)) text.append(value).append('\n'); + } + } + content = text.toString(); + } + } + if (StrUtil.isBlank(content)) { + throw new BaseException("学校消息平台需要消息正文,不能仅使用原通讯平台的模板ID"); + } + List recipients = recipients(request); + if (recipients.isEmpty() || recipients.size() > 500) { + throw new BaseException("单次消息接收人数必须为1至500人"); + } + List> receivers = new ArrayList<>(); + for (MsgPlatformRecipient recipient : recipients) { + if (recipient == null) throw new BaseException("接收人不能为空"); + String account = recipient.getAccount(); + String name = recipient.getName(); + // v3消息平台使用学工号;仅提供手机号时从本地人员表解析,不能把手机号冒充学工号。 + if (StrUtil.isBlank(account) || account.matches("\\d{11}")) { + String mobile = StrUtil.blankToDefault(recipient.getMobile(), account); + if (StrUtil.isBlank(mobile)) throw new BaseException("Message recipient requires an account or mobile number"); + List users = dao.query(Sys_user.class, + StrUtil.isBlank(account) ? Cnd.where("mobile", "=", mobile) + : Cnd.where("loginname", "=", account).or("mobile", "=", mobile)); + if (users.size() != 1) throw new BaseException("无法为消息接收人确定唯一学工号"); + account = users.get(0).getLoginname(); + name = StrUtil.blankToDefault(name, users.get(0).getUsername()); + } + if (StrUtil.isBlank(account)) throw new BaseException("消息接收人缺少学工号"); + receivers.add(Map.of("type", "User", "userId", account, "name", StrUtil.nullToEmpty(name))); + } + Map form = new LinkedHashMap<>(); + form.put("token", getToken()); + form.put("msgtitle", conf.get("msg.platform.default-title", "工会通知")); + form.put("msgContent", content.replace("<", "<").replace(">", ">")); + form.put("msgType", "0"); + form.put("sendStatus", "1"); + form.put("sendChannel", wechat ? conf.get("msg.platform.wechat-channel", "IntelligenceMode") : "SMS"); + form.put("sendMode", "normal"); + form.put("receivers", JSONUtil.toJsonStr(receivers)); + form.put("summary", ""); + form.put("sendTime", StrUtil.nullToEmpty(request.getSendTime())); + form.put("isReply", "0"); + form.put("sendMsgType", "1"); + try (HttpResponse response = HttpRequest.post(required("msg.platform.send-url")) + .form(form).timeout(conf.getInt("msg.platform.read-timeout", 10000)).execute()) { + MsgPlatformResponse result = new MsgPlatformResponse(); + result.setHttpStatus(response.getStatus()); + result.setRawBody(response.body()); + if (!response.isOk() || !JSONUtil.isTypeJSONObject(response.body())) { + result.setCode(-1); + result.setResult(false); + result.setMsg("学校消息平台返回异常,HTTP状态码:" + response.getStatus()); + return result; + } + JSONObject body = JSONUtil.parseObj(response.body()); + Integer code = body.getInt("rspCode"); + result.setCode(code == null ? -1 : code); + result.setResult(Integer.valueOf(0).equals(code)); + result.setMsg(body.getStr("rspMsg")); + return result; + } + } + + private List recipients(MsgPlatformBaseRequest request) { + if (StrUtil.isBlank(request.getPersonInfo())) { + return request.getRecipients() == null ? List.of() : request.getRecipients(); + } + List result = new ArrayList<>(); + for (String line : request.getPersonInfo().split("\\^@\\^", -1)) { + String[] fields = line.split("\\|", -1); + if (fields.length != 5) throw new BaseException("personInfo 必须包含姓名、学工号、机构ID、机构名称和手机号五段"); + MsgPlatformRecipient recipient = new MsgPlatformRecipient(); + recipient.setName(fields[0]); + recipient.setAccount(fields[1]); + recipient.setMobile(fields[4]); + result.add(recipient); + } + return result; + } + + private String getToken() { + String url = required("msg.platform.token-url"); + String appId = required("msg.platform.app-id"); + String password = required("msg.platform.app-password"); + String cacheKey = "zjnu:msg:token:" + DigestUtil.sha256Hex(url + "|" + appId + "|" + password); + String cached = redisService.get(cacheKey); + if (StrUtil.isNotBlank(cached)) return cached; + try (HttpResponse response = HttpRequest.get(url).form(Map.of("appId", appId, "appPassword", password)) + .timeout(conf.getInt("msg.platform.read-timeout", 10000)).execute()) { + if (!response.isOk()) throw new BaseException("学校消息平台Token请求失败"); + JSONObject body = JSONUtil.parseObj(response.body()); + if (body.containsKey("rspCode") && !Integer.valueOf(0).equals(body.getInt("rspCode"))) { + throw new BaseException("学校消息平台Token返回失败"); + } + Object data = body.get("resultData"); + JSONObject result = data instanceof CharSequence ? JSONUtil.parseObj(data.toString()) : JSONUtil.parseObj(data); + String token = result.getStr("token"); + if (StrUtil.isBlank(token)) throw new BaseException("学校消息平台未返回Token"); + redisService.setex(cacheKey, 1200, token); + return token; + } catch (RuntimeException e) { + throw new BaseException("获取学校消息平台Token失败,请检查地址和凭证配置"); + } + } + + private String required(String key) { + String value = conf.get(key, ""); + if (StrUtil.isBlank(value)) throw new BaseException("请先配置{}", key); + return value; + } +} diff --git a/src/main/java/com/budwk/app/sys/controller/SysLoginController.java b/src/main/java/com/budwk/app/sys/controller/SysLoginController.java index 9df02a2..3e44dae 100644 --- a/src/main/java/com/budwk/app/sys/controller/SysLoginController.java +++ b/src/main/java/com/budwk/app/sys/controller/SysLoginController.java @@ -194,25 +194,56 @@ public class SysLoginController { @Ok("re") @ApiOperation("企业微信登录回调") public String wxworkOAuth2(@Param("code") String code, @Param("redirect") String redirect, HttpServletRequest request) { - if (StrUtil.isBlank(code)) { - return ">>:/platform/home"; - } - String token = redisService.get(RedisConstant.REDIS_KEY_WX_WORK_TOKEN); - if (StrUtil.isBlank(token)) { - return ">>:/platform/home"; - } - String url = "https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=ACCESS_TOKEN&code=CODE"; - url = url.replace("ACCESS_TOKEN", token).replace("CODE", code); - String response = HttpUtil.get(url); - JSONObject jsonObject = JSONUtil.parseObj(response); - if (jsonObject.getInt("errcode") == 0) { - String loginName = jsonObject.getStr("userid"); - sysUserService.checkThirdPlatformLoginName(loginName); - Sys_user sysUser = sysUserService.loginByLoginName(loginName); - return ">>:" + sysUserService.loginPlus(sysUser, LoginType.QI_YE_WECHAT, request); - } else { + Object expectedState = request.getSession().getAttribute("wxwork.oauth.state"); + request.getSession().removeAttribute("wxwork.oauth.state"); + if (!Globals.sso || !conf.getBoolean("wxwork.enable", false) + || StrUtil.isBlank(code) || expectedState == null + || !expectedState.equals(request.getParameter("state"))) { return ">>:/platform/home/500"; } + try { + JSONObject userInfo = null; + for (int attempt = 0; attempt < 2; attempt++) { + String token = getWxWorkToken(attempt > 0); + String response = HttpUtil.get("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo", + Map.of("access_token", token, "code", code)); + userInfo = JSONUtil.parseObj(response); + Integer error = userInfo.getInt("errcode"); + if (!Integer.valueOf(40014).equals(error) && !Integer.valueOf(42001).equals(error) + && !Integer.valueOf(40001).equals(error)) break; + } + if (userInfo != null && Integer.valueOf(0).equals(userInfo.getInt("errcode"))) { + String loginName = StrUtil.blankToDefault(userInfo.getStr("UserId"), userInfo.getStr("userid")); + if (StrUtil.isBlank(loginName)) return ">>:/platform/home/500"; + sysUserService.checkThirdPlatformLoginName(loginName); + Sys_user sysUser = sysUserService.loginByLoginName(loginName); + return ">>:" + sysUserService.loginPlus(sysUser, LoginType.QI_YE_WECHAT, request); + } + } catch (RuntimeException e) { + log.warn("Enterprise WeChat authentication failed"); + } + return ">>:/platform/home/500"; + } + + private String getWxWorkToken(boolean refresh) { + String corpId = conf.get("wxwork.corpId", ""); + String secret = conf.get("wxwork.corpSecret", ""); + if (StrUtil.isBlank(corpId) || StrUtil.isBlank(secret)) { + throw new BaseException("Missing enterprise WeChat configuration"); + } + String key = RedisConstant.REDIS_KEY_WX_WORK_TOKEN + ":" + + cn.hutool.crypto.digest.DigestUtil.sha256Hex(corpId + "|" + secret); + if (refresh) redisService.del(key); + String token = redisService.get(key); + if (StrUtil.isNotBlank(token)) return token; + JSONObject result = JSONUtil.parseObj(HttpUtil.get("https://qyapi.weixin.qq.com/cgi-bin/gettoken", + Map.of("corpid", corpId, "corpsecret", secret))); + token = result.getStr("access_token"); + if (!Integer.valueOf(0).equals(result.getInt("errcode")) || StrUtil.isBlank(token)) { + throw new BaseException("Failed to acquire enterprise WeChat token"); + } + redisService.setex(key, Math.max(1, result.getInt("expires_in", 7200) - 200), token); + return token; } @At(value = "/platform/wx/oauth2/callback", top = true) diff --git a/src/main/java/com/budwk/app/web/commons/proc/WkFailProcessor.java b/src/main/java/com/budwk/app/web/commons/proc/WkFailProcessor.java index 5fa871d..4be036e 100644 --- a/src/main/java/com/budwk/app/web/commons/proc/WkFailProcessor.java +++ b/src/main/java/com/budwk/app/web/commons/proc/WkFailProcessor.java @@ -189,25 +189,9 @@ public class WkFailProcessor extends ViewProcessor { if (Globals.sso) { //1.判断是否为企业微信浏览器并且对接了企业微信 if (browserPlatform == BrowserPlatform.QI_YE_WEI_XIN && propertiesProxy.getBoolean("wxwork.enable", false)) { - //进行企业微信授权 -// String token = getWxWorkToken(); -// if (StrUtil.isNotBlank(token)) { -// //跳转到企业微信授权地址 -// new ServerRedirectView(buildWxWorkOauth2Url()).render(request, response, null); -// } else { -// //跳转到错误页 别问我为啥错了 我也不知道 首先去检查配置文件里的参数有没有写对 -//// new ServerRedirectView(Globals.AppDomain + errorUri).render(request, response, null); -// //跳转到cas登录页 -// String callBackUrl = propertiesProxy.get("cas.client-host-url") + propertiesProxy.get("cas.client-call-back-url") + "?redirect=" + redirect; -// String authUrl = propertiesProxy.get("cas.qi-wx-server-login-url") + "?service=" + URLEncoder.encode(callBackUrl, StandardCharsets.UTF_8); -// new ServerRedirectView(authUrl).render(request, response, null); -// } - - // 武汉城市职业学院 跳转到企业微信cas登录页 - String callBackUrl = propertiesProxy.get("wecom.wecom-client-host-url") + propertiesProxy.get("wecom.wecom-client-call-back-url") + "?redirect=" + redirect; - String authUrl = propertiesProxy.get("wecom.wecom-server-login-url") + "?service=" + URLEncoder.encode(callBackUrl, StandardCharsets.UTF_8); - log.info("auth:"+authUrl); - new ServerRedirectView(authUrl).render(request, response, null); + String state = java.util.UUID.randomUUID().toString(); + request.getSession().setAttribute("wxwork.oauth.state", state); + new ServerRedirectView(buildWxWorkOauth2Url(redirect, state)).render(request, response, null); } else if (browserPlatform == BrowserPlatform.WEI_XIN && propertiesProxy.getBoolean("wx.enable", false)) { //进行微信公众号授权 //跳转到微信授权页 @@ -275,11 +259,12 @@ public class WkFailProcessor extends ViewProcessor { * * @return */ - private String buildWxWorkOauth2Url() { + private String buildWxWorkOauth2Url(String redirect, String state) { String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE&agentid=AGENTID#wechat_redirect"; url = url.replace("CORPID", propertiesProxy.get("wxwork.corpId")); - url = url.replace("REDIRECT_URI", URLEncoder.encode(Globals.AppDomain + propertiesProxy.get("wxwork.redirectUri"), StandardCharsets.UTF_8)); + url = url.replace("REDIRECT_URI", URLEncoder.encode(propertiesProxy.get("cas.client-host-url") + propertiesProxy.get("wxwork.redirectUri") + "?redirect=" + redirect, StandardCharsets.UTF_8)); url = url.replace("AGENTID", propertiesProxy.get("wxwork.agentId")); + url = url.replace("STATE", state); return url; } diff --git a/src/main/java/com/budwk/app/zhgh/activity/fitnesswalk/utils/WeAppCloudUtil.java b/src/main/java/com/budwk/app/zhgh/activity/fitnesswalk/utils/WeAppCloudUtil.java index 4b47711..4b6aefa 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/fitnesswalk/utils/WeAppCloudUtil.java +++ b/src/main/java/com/budwk/app/zhgh/activity/fitnesswalk/utils/WeAppCloudUtil.java @@ -25,24 +25,21 @@ import java.util.*; */ @IocBean public class WeAppCloudUtil { - public static String ENV = "cloud1-1gxxg6xx50b1860e"; - - private static final String APPID = "wxf750f43635f770e0"; - - private static final String APP_SECRET = "a54517e19ab700f745f20f27312ab8b2"; + @Inject + private org.nutz.ioc.impl.PropertiesProxy conf; @Inject public RedisService redisService; public JSONObject request(CRUD crud, String sql) { String url = crud.url.replace("ACCESS_TOKEN", getAccessToken()); - String responseJson = HttpUtil.createPost(url).header("Content-Type", "application/json").body(JSON.toJSONString(Map.of("env", ENV, "query", sql))).execute().body(); + String responseJson = HttpUtil.createPost(url).header("Content-Type", "application/json").body(JSON.toJSONString(Map.of("env", requiredConfig("weapp.env"), "query", sql))).execute().body(); JSONObject response = JSON.parseObject(responseJson); if (response.getIntValue("errcode") == 42001) { - redisService.del(RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN); + redisService.del(tokenCacheKey()); // request(crud, sql); } else if (response.getIntValue("errcode") == 40001) { - redisService.del(RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN); + redisService.del(tokenCacheKey()); } else if (response.getIntValue("errcode") != 0) { throw new RuntimeException("小程序云函数接口调用失败,errcode:" + response.getString("errcode") + ",errmsg:" + response.getString("errmsg")); } @@ -55,14 +52,17 @@ public class WeAppCloudUtil { * @return */ private String getAccessToken() { - String token = redisService.get(RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN); + String token = redisService.get(tokenCacheKey()); if (StrUtil.isNotBlank(token)) { return token; } - String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET".replace("APPID", APPID).replace("APPSECRET", APP_SECRET); + String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET".replace("APPID", requiredConfig("weapp.app-id")).replace("APPSECRET", requiredConfig("weapp.app-secret")); String responseJson = HttpUtil.createGet(url).execute().body(); TokenResponse tokenResponse = JSON.parseObject(responseJson, TokenResponse.class); - redisService.setex(RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN, 7000, tokenResponse.getAccess_token()); + if (tokenResponse == null || StrUtil.isBlank(tokenResponse.getAccess_token())) { + throw new RuntimeException("Failed to acquire mini-program access token"); + } + redisService.setex(tokenCacheKey(), Math.max(1, tokenResponse.getExpires_in() - 200), tokenResponse.getAccess_token()); return tokenResponse.getAccess_token(); /*String result = Http.get(url).getContent(); @@ -76,6 +76,18 @@ public class WeAppCloudUtil { return null;*/ } + private String requiredConfig(String key) { + String value = conf.get(key, ""); + if (StrUtil.isBlank(value)) throw new RuntimeException("Missing configuration: " + key); + return value; + } + + private String tokenCacheKey() { + return RedisConstant.REDIS_KEY_WE_APP_ACCESS_TOKEN + ":" + + cn.hutool.crypto.digest.DigestUtil.sha256Hex(requiredConfig("weapp.app-id") + + "|" + requiredConfig("weapp.app-secret")); + } + @Getter @AllArgsConstructor public enum CRUD { @@ -111,7 +123,7 @@ public class WeAppCloudUtil { public String uploadFile(String rootPath, File file) { String path = rootPath + file.getName(); String url = "https://api.weixin.qq.com/tcb/uploadfile?access_token=ACCESS_TOKEN".replace("ACCESS_TOKEN", getAccessToken()); - String responseJson = HttpUtil.createPost(url).header("Content-Type", "application/json").body(JSON.toJSONString(Map.of("env", ENV, "path", path))).execute().body(); + String responseJson = HttpUtil.createPost(url).header("Content-Type", "application/json").body(JSON.toJSONString(Map.of("env", requiredConfig("weapp.env"), "path", path))).execute().body(); JSONObject jsonObject = JSON.parseObject(responseJson); if (jsonObject.getIntValue("errcode") != 0) { throw new RuntimeException(jsonObject.getString("errmsg")); @@ -134,7 +146,7 @@ public class WeAppCloudUtil { String url = "https://api.weixin.qq.com/tcb/batchdownloadfile?access_token=ACCESS_TOKEN".replace("ACCESS_TOKEN", getAccessToken()); HashMap body = new HashMap<>(2) {{ - put("env", ENV); + put("env", requiredConfig("weapp.env")); put("file_list", new ArrayList<>() {{ add(new HashMap<>() {{ put("fileid", fileId); diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/application-dev.yaml index 953d93e..e9e0fb6 100644 --- a/src/main/resources/application-dev.yaml +++ b/src/main/resources/application-dev.yaml @@ -24,10 +24,14 @@ sdk: wxwork: enable: true - corpId: wwaca81b3016b9a58c - corpSecret: Auc7919Su1Uds5ZErfZybBrt-8FkP5NA - agentId: 1000131 + corpId: 'ww5386df99fd3b6b0f' + corpSecret: 'HpSptE9wKZRq_c_kemAPJc0AfXkNSevpfYCJd1TTgrI' + agentId: '1000002' redirectUri: /platform/wxwork/oauth2/callback + weapp: + app-id: 'wxb83d5697d571cd4f' + app-secret: '40a4f000c12424f23864a1d7e19eb080' + env: 'jsz-zjxu-3gg38x7m6cdd4c0f' wx: enable: false appID: wx4f65ff5f1b72e99d @@ -35,10 +39,10 @@ sdk: redirectUri: /platform/wx/oauth2/callback cas: enable: false - server-url-prefix: https://i.zjnu.njupt.edu.cn/cas - server-login-url: https://i.zjnu.njupt.edu.cn/cas/login - qi-wx-server-login-url: httos:/cas.zjnu.whcp.eou.cn/lyuapServer/wechatauz/wxAuthRedirect - client-host-url: https://zhgh.zjnu.njupt.edu.cn + server-url-prefix: 'https://authserver.zjnu.edu.cn/authserver' + server-login-url: 'https://authserver.zjnu.edu.cn/authserver/login' + qi-wx-server-login-url: 'https://authserver.zjnu.edu.cn/authserver/login' + client-host-url: 'http://localhost:8080' client-call-back-url: /platform/sso/login validation-type: cas minio: @@ -61,10 +65,16 @@ custom: password: 3848A3C738EFBB2C2E76E0D59B419DACA16A80F3AB0354CD token-url: https://bd.whcp.zjnu.edu.cn/sjjkfwpt/api/bd-api/oauth/token urls: - teacher: http://mdm.zjnu.edu.cn/do/api/call/lxyxt_jzgjbxx - unit: http://mdm.zjnu.edu.cn/do/api/call/lxyxt_dwxx + teacher: http://localhost:3000/do/api/call/lxyxt_jzgjbxx + unit: http://localhost:3000/do/api/call/lxyxt_dwxx msg: platform: + provider: 'zjnu' + token-url: 'http://xxt.zjnu.edu.cn/msg/getThirdAPIToken' + send-url: 'http://xxt.zjnu.edu.cn/message/sendMessageApi' + app-id: 'MSG45363193' + app-password: 'OGQxNzVmOTJkZjM5NzJhZDg1MDNiZGM0MDQ5ZTJlNDY' + wechat-channel: 'IntelligenceMode' enabled: false base-url: https://msg.zjnu.cug.edu.cn tp-name: nwszl.cug.edu.cn diff --git a/src/main/resources/application-prd.yaml b/src/main/resources/application-prd.yaml index 5e9782c..9a38044 100644 --- a/src/main/resources/application-prd.yaml +++ b/src/main/resources/application-prd.yaml @@ -24,10 +24,14 @@ sdk: wxwork: enable: true - corpId: wwaca81b3016b9a58c - corpSecret: Auc7919Su1Uds5ZErfZybBrt-8FkP5NA-dldZyQuOrM - agentId: 1000131 + corpId: 'ww5386df99fd3b6b0f' + corpSecret: 'HpSptE9wKZRq_c_kemAPJc0AfXkNSevpfYCJd1TTgrI' + agentId: '1000002' redirectUri: /platform/wxwork/oauth2/callback + weapp: + app-id: 'wxb83d5697d571cd4f' + app-secret: '40a4f000c12424f23864a1d7e19eb080' + env: 'jsz-zjxu-3gg38x7m6cdd4c0f' wx: enable: false appID: wx4f65ff5f1b72e99d @@ -35,10 +39,10 @@ sdk: redirectUri: /platform/wx/oauth2/callback cas: enable: false - server-url-prefix: https://i.zjnu.edu.cn/cas - server-login-url: https://i.zjnu.edu.cn/cas/login - qi-wx-server-login-url: httos:/cas.whcp.eou.cn/lyuapServer/wechatauz/wxAuthRedirect - client-host-url: https://zhgh.zjnu.edu.cn + server-url-prefix: 'https://authserver.zjnu.edu.cn/authserver' + server-login-url: 'https://authserver.zjnu.edu.cn/authserver/login' + qi-wx-server-login-url: 'https://authserver.zjnu.edu.cn/authserver/login' + client-host-url: 'https://lxy.zjnu.edu.cn' client-call-back-url: /platform/sso/login validation-type: cas minio: @@ -65,6 +69,12 @@ custom: unit: http://mdm.zjnu.edu.cn/do/api/call/lxyxt_dwxx msg: platform: + provider: 'zjnu' + token-url: 'http://xxt.zjnu.edu.cn/msg/getThirdAPIToken' + send-url: 'http://xxt.zjnu.edu.cn/message/sendMessageApi' + app-id: 'MSG45363193' + app-password: 'OGQxNzVmOTJkZjM5NzJhZDg1MDNiZGM0MDQ5ZTJlNDY' + wechat-channel: 'IntelligenceMode' enabled: false base-url: https://msg.cug.edu.cn tp-name: nwszl.cug.edu.cn diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 2da5430..702d344 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -54,6 +54,11 @@ wxwork: agentId: '${sdk.wxwork.agentId}' redirectUri: '${sdk.wxwork.redirectUri}' +weapp: + app-id: '${sdk.weapp.app-id}' + app-secret: '${sdk.weapp.app-secret}' + env: '${sdk.weapp.env}' + wx: enable: '${sdk.wx.enable}' appID: '${sdk.wx.appID}' @@ -191,6 +196,12 @@ data-center: unit: '${custom.data-center.urls.unit}' msg: platform: + provider: '${custom.msg.platform.provider}' + token-url: '${custom.msg.platform.token-url}' + send-url: '${custom.msg.platform.send-url}' + app-id: '${custom.msg.platform.app-id}' + app-password: '${custom.msg.platform.app-password}' + wechat-channel: '${custom.msg.platform.wechat-channel}' enabled: '${custom.msg.platform.enabled}' # 地大通讯平台基础地址,默认对接正式地址 base-url: '${custom.msg.platform.base-url}'