提交 06fd41aa 作者: zhenjie

微信相关接口

上级 38960d02
package com.mmc.iuav.user.model.vo;
import com.alibaba.fastjson2.JSONObject;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/5/23 17:18
*/
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AppletMsgVO implements Serializable {
private static final long serialVersionUID = -8496071009977568319L;
@ApiModelProperty(value = "openid")
@NotBlank
private String touser;
@ApiModelProperty(value = "模板ID")
@NotBlank
private String template_id;
@ApiModelProperty(value = "点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。")
private String page;
@ApiModelProperty(value = "模板内容")
private JSONObject data;
@ApiModelProperty(value = "跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版")
private String miniprogram_state;
@ApiModelProperty(value = "默认为zh_CN")
private String lang;
}
package com.mmc.iuav.user.model.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/5/23 19:25
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MsgData implements Serializable {
private static final long serialVersionUID = 1479503488297727536L;
private String value;
private String color = "#173177";// 字体颜色
}
\ No newline at end of file
package com.mmc.iuav.user.model.vo;
import com.alibaba.fastjson2.JSONObject;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang.StringUtils;
import org.springframework.util.CollectionUtils;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
* @author: zj
* @Date: 2023/5/23 19:24
*/
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WxMsgVO implements Serializable {
private static final long serialVersionUID = 107288179600606045L;
@ApiModelProperty(value = "用户id-仅适用云享飞客户端")
private Integer userAccountId;
@ApiModelProperty(value = "公众号的openId")
private String openId;
@ApiModelProperty(value = "unionId-全局通用")
private String unionId;
@ApiModelProperty(value = "模板id")
@NotNull(message = "模板id不能为空")
private String templemteId;
@ApiModelProperty(value = "网页跳转连接")
private String url;
@ApiModelProperty(value = "小程序APPID")
private String wxAppltAppId;
@ApiModelProperty(value = "小程序跳转连接")
private String appletPath;
@ApiModelProperty(value = "标题")
private MsgData title;
@ApiModelProperty(value = "消息数组")
private List<MsgData> data;
@ApiModelProperty(value = "消息备注")
private MsgData remark;
public String buildMsgJson() {
JSONObject obj = new JSONObject();
obj.put("touser", this.openId);
obj.put("template_id", this.templemteId);
if (!StringUtils.isBlank(this.url)) {
obj.put("url", this.url);
}
if (!StringUtils.isBlank(this.wxAppltAppId) && !StringUtils.isBlank(this.appletPath)) {
JSONObject mini = new JSONObject();
mini.put("appid", this.wxAppltAppId);
mini.put("pagepath", this.appletPath);
obj.put("miniprogram", mini);
}
JSONObject jd = new JSONObject();
jd.put("first", this.convertMsg(title));
if (!CollectionUtils.isEmpty(this.data)) {
for (int i = 0; i < data.size(); i++) {
String key = "keyword" + (i + 1);
jd.put(key, this.convertMsg(data.get(i)));
}
}
if (this.remark != null && !StringUtils.isBlank(this.remark.getValue())) {
jd.put("remark", this.convertMsg(this.remark));
}
obj.put("data", jd);
return obj.toJSONString();
}
public JSONObject convertMsg(MsgData msg) {
JSONObject jb = new JSONObject();
jb.put("value", msg.getValue());
jb.put("color", msg.getColor());
return jb;
}
}
...@@ -14,6 +14,10 @@ public enum ResultEnum implements BaseErrorInfoInterface{ ...@@ -14,6 +14,10 @@ public enum ResultEnum implements BaseErrorInfoInterface{
COMPANY_NOT_AUTH_ERROR("1001", "未进行企业认证"), COMPANY_NOT_AUTH_ERROR("1001", "未进行企业认证"),
BUSINESS_LICENSE_CHECK_PARAMETER_ERROR("1002", "企业信息与营业执照信息不一致,请重新上传"), BUSINESS_LICENSE_CHECK_PARAMETER_ERROR("1002", "企业信息与营业执照信息不一致,请重新上传"),
//微信相关
WX_ACCESS_TOKEN_ERROR("5027", "获取微信AccessToken失败"),
APPLET_QR_CODE_CREATE_ERROR("5030", "生成小程序码错误:"),
APPLET_PORT_TYPE_ERROR("7001", "小程序端口类型错误"), APPLET_PORT_TYPE_ERROR("7001", "小程序端口类型错误"),
APPLET_LOGIN_ERROR("7002", "获取小程序登录失败"); APPLET_LOGIN_ERROR("7002", "获取小程序登录失败");
......
...@@ -90,6 +90,13 @@ ...@@ -90,6 +90,13 @@
<!-- <version>4.0.0</version>--> <!-- <version>4.0.0</version>-->
<!-- </dependency>--> <!-- </dependency>-->
<!-- https://mvnrepository.com/artifact/com.github.wxpay/wxpay-sdk -->
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -15,5 +15,10 @@ public class WxConstant { ...@@ -15,5 +15,10 @@ public class WxConstant {
public static final String OPEN_ID = "openid"; public static final String OPEN_ID = "openid";
public static final String UNION_ID = "unionid"; public static final String UNION_ID = "unionid";
public static final String SESSION_KEY = "session_key"; public static final String SESSION_KEY = "session_key";
public final static String subscribe = "subscribe";
public final static String unsubscribe = "unsubscribe";
public static final String IUAV_MINI_PROGRAM_ACCESS_TOKEN = "IUAV_MINI_PROGRAM_ACCESS_TOKEN";
public static final String SHARE_FLY_SUB_ACCESS_TOKEN = "SHARE_FLY_SUB_ACCESS_TOKEN";
} }
...@@ -2,16 +2,14 @@ package com.mmc.iuav.user.controller; ...@@ -2,16 +2,14 @@ package com.mmc.iuav.user.controller;
import com.mmc.iuav.response.ResultBody; import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.service.WxService; import com.mmc.iuav.user.service.WxService;
import io.swagger.annotations.Api; import io.swagger.annotations.*;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/** /**
* @author: zj * @author: zj
...@@ -29,8 +27,42 @@ public class WxController { ...@@ -29,8 +27,42 @@ public class WxController {
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = String.class) }) @ApiResponses({ @ApiResponse(code = 200, message = "OK", response = String.class) })
@PostMapping("getAppletRcdCode") @PostMapping("getAppletRcdCode")
public ResultBody getAppletRcdCode(HttpServletRequest request) { public ResultBody getAppletRcdCode(HttpServletRequest request) {
return ResultBody.success(); return null;
// return wxService.getAppletCodeImgBase64(WxMsgDataConfig.USER_APPLET_PAGE_INDEX, }
// WxHandler.createRcdScene(this.getCurrentUser(request).getId()));
@ApiOperation(value = "小程序-测试专用")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = ResultBody.class) })
@PostMapping("testDemo")
public ResultBody testDemo() {
return ResultBody.success("app:" + wxService.getAccessToken() + "sub: " + wxService.getSubAccessToken());
}
/**
* https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-link/urllink.generate.html#method-http
* (有效期最长不超过30天)
*
* @param path
* smsCode=SMS00003&scene=7 scene:表示用户用户来源渠道
* @return
*/
@ApiOperation(value = "URL_Link")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = Integer.class) })
@GetMapping("createUrlLink")
public ResultBody createUrlLink(
@ApiParam(value = "小程序路径", required = false) @RequestParam(required = false) String path,
@ApiParam(value = "路径携带参数", required = false) @RequestParam(required = false) String query) {
return ResultBody.success(wxService.createUrlLink(path, query));
}
@ApiOperation(value = "监控微信公众号的事件变化通知")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = String.class) })
@PostMapping("wxSendMessage")
public void wxSendMessage(HttpServletRequest req, HttpServletResponse resp) throws IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
PrintWriter out = resp.getWriter();
System.out.println("##########接收到微信事件推送############");
String msg = wxService.receiveSubAccountEvents(req);
out.println(msg);
} }
} }
package com.mmc.iuav.user.service; package com.mmc.iuav.user.service;
import com.mmc.iuav.response.ResultBody; import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.vo.AppletMsgVO;
import com.mmc.iuav.user.model.vo.WxLoginVO; import com.mmc.iuav.user.model.vo.WxLoginVO;
import com.mmc.iuav.user.model.vo.WxMsgVO;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
...@@ -40,25 +42,27 @@ public interface WxService { ...@@ -40,25 +42,27 @@ public interface WxService {
/** /**
* 监控微信公众号的事件变化通知 * 监控微信公众号的事件变化通知
* @param request * @param request
* @param response
*/ */
void receiveSubAccountEvents(HttpServletRequest request, HttpServletResponse response); String receiveSubAccountEvents(HttpServletRequest request);
/** /**
* 推送订阅消息 * 公众号推送模板消息-不需要用户同意
* @return * @return
*/ */
ResultBody sendSubMsg(); ResultBody sendSubTemplateMsg(WxMsgVO ws);
/** /**
* 获取不限制的小程序码 * 获取不限制的小程序码
* @param path * @param path
* @param scene * @param scene
*/ */
void getUnLimitedQRCode(String path, String scene); ResultBody getUnLimitedQRCode(String path, String scene);
/**
* 小程序推送订阅号消息-需用户同意订阅
* @param appletMsgVO
*/
ResultBody sendAppletMsg(AppletMsgVO appletMsgVO);
String createUrlLink(String path, String query);
} }
package com.mmc.iuav.user.service.impl; package com.mmc.iuav.user.service.impl;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.github.wxpay.sdk.WXPayUtil;
import com.mmc.iuav.http.HttpHelper;
import com.mmc.iuav.http.HttpsRequestUtil; import com.mmc.iuav.http.HttpsRequestUtil;
import com.mmc.iuav.response.ResultBody; import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.response.ResultEnum;
import com.mmc.iuav.user.constant.UserSystemConstant; import com.mmc.iuav.user.constant.UserSystemConstant;
import com.mmc.iuav.user.constant.WxConstant; import com.mmc.iuav.user.constant.WxConstant;
import com.mmc.iuav.user.model.vo.AppletMsgVO;
import com.mmc.iuav.user.model.vo.WxLoginVO; import com.mmc.iuav.user.model.vo.WxLoginVO;
import com.mmc.iuav.user.model.vo.WxMsgVO;
import com.mmc.iuav.user.service.WxService; import com.mmc.iuav.user.service.WxService;
import com.mmc.iuav.user.util.WxApiUtil;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/** /**
* @author: zj * @author: zj
...@@ -23,6 +33,9 @@ public class WxServiceImpl implements WxService { ...@@ -23,6 +33,9 @@ public class WxServiceImpl implements WxService {
@Autowired @Autowired
private UserSystemConstant userSystemConstant; private UserSystemConstant userSystemConstant;
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Override @Override
public String appLogin(WxLoginVO wxLoginVO) { public String appLogin(WxLoginVO wxLoginVO) {
String url = WxConstant.CODE2_SESSION_URL + "?appid=" + userSystemConstant.getWxAppId() + "&secret=" + String url = WxConstant.CODE2_SESSION_URL + "?appid=" + userSystemConstant.getWxAppId() + "&secret=" +
...@@ -41,9 +54,8 @@ public class WxServiceImpl implements WxService { ...@@ -41,9 +54,8 @@ public class WxServiceImpl implements WxService {
@Override @Override
public String getAccessToken() { public String getAccessToken() {
//token有效期为7200s,需要保存起来 //token有效期为7200s,需要保存起来,先从redis中获取accessToken,没有则请求获取
//先从redis中获取accessToken,没有则请求获取 String accessToken = stringRedisTemplate.opsForValue().get(WxConstant.IUAV_MINI_PROGRAM_ACCESS_TOKEN);
String accessToken = null;
if (StringUtils.isBlank(accessToken)){ if (StringUtils.isBlank(accessToken)){
String getAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token" + "?grant_type=client_credential" + "&appid=" + String getAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token" + "?grant_type=client_credential" + "&appid=" +
userSystemConstant.getWxAppId() + "&secret" + userSystemConstant.getWxAppSecret(); userSystemConstant.getWxAppId() + "&secret" + userSystemConstant.getWxAppSecret();
...@@ -56,29 +68,151 @@ public class WxServiceImpl implements WxService { ...@@ -56,29 +68,151 @@ public class WxServiceImpl implements WxService {
accessToken = tokenResult.getString("access_token"); accessToken = tokenResult.getString("access_token");
long expiresIn = tokenResult.getLong("expires_in"); long expiresIn = tokenResult.getLong("expires_in");
//保存进redis //保存进redis
return accessToken; stringRedisTemplate.opsForValue().set(WxConstant.IUAV_MINI_PROGRAM_ACCESS_TOKEN, accessToken, expiresIn, TimeUnit.SECONDS);
}else {
return accessToken; return accessToken;
} }
return accessToken;
} }
@Override @Override
public String getSubAccessToken() { public String getSubAccessToken() {
return null; //token有效期为7200s,需要保存起来,先从redis中获取accessToken,没有则请求获取
String accessToken = stringRedisTemplate.opsForValue().get(WxConstant.SHARE_FLY_SUB_ACCESS_TOKEN);
if (StringUtils.isBlank(accessToken)){
String getAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token" + "?grant_type=client_credential" + "&appid=" +
userSystemConstant.getWxSubAppId() + "&secret" + userSystemConstant.getWxSubSecret();
String accessTokenMsg = HttpsRequestUtil.httpsGet(getAccessTokenUrl, null);
JSONObject tokenResult = JSONObject.parseObject(accessTokenMsg);
if (accessTokenMsg.indexOf("access_token") == -1) {
System.out.println("获取用户信息有误:access_token请求失败:" + tokenResult);
return null;
}
accessToken = tokenResult.getString("access_token");
long expiresIn = tokenResult.getLong("expires_in");
//保存进redis
stringRedisTemplate.opsForValue().set(WxConstant.SHARE_FLY_SUB_ACCESS_TOKEN, accessToken, expiresIn, TimeUnit.SECONDS);
return accessToken;
}
return accessToken;
} }
@Override @Override
public void receiveSubAccountEvents(HttpServletRequest request, HttpServletResponse response) { public String receiveSubAccountEvents(HttpServletRequest request) {
try {
Map<String, String> map = this.convertRequestToMap(request);
String event = map.get("Event");
if (WxConstant.subscribe.equals(event)) {
// 关注事件
this.subScribeUser(map);
} else if (WxConstant.unsubscribe.equals(event)) {
// 取消关注事件
System.out.println("############################");
System.out.println("###########取消关注############");
System.out.println("############################");
String openId = map.get("FromUserName");
//userSubInfoDao.removeUserSubInfo(openId);
}
} catch (Exception e) {
System.out.println("接收消息异常" + e.getMessage());
return "error";
}
return "success";
}
private void subScribeUser(Map<String, String> map) {
} }
private Map<String, String> convertRequestToMap(HttpServletRequest request) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
String line = "";
StringBuffer buffer = new StringBuffer();
while ((line = br.readLine()) != null) {
buffer.append(line);
}
String notifyXml = buffer.toString();
return WXPayUtil.xmlToMap(notifyXml);
}
@Override @Override
public ResultBody sendSubMsg() { public ResultBody sendSubTemplateMsg(WxMsgVO ws) {
return null; System.out.println("###########开始发送公众号消息##########");
String accessToken = null;
try {
accessToken = this.getSubAccessToken();
System.out.println("accesstoken:" + accessToken);
String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;
String param = ws.buildMsgJson();
System.out.println("参数:" + param);
String result = HttpHelper.httpPost(url, param);
System.out.println("###########结束发送公众号消息##########");
System.out.println(result);
} catch (Exception e) {
System.out.println("accessToken获取失败:" + e.getMessage());
return ResultBody.error(ResultEnum.WX_ACCESS_TOKEN_ERROR.getResultCode(),
ResultEnum.WX_ACCESS_TOKEN_ERROR.getResultMsg() + e.getMessage());
}
return ResultBody.success();
}
@Override
public ResultBody getUnLimitedQRCode(String path, String scene) {
String base64 = "";
try {
String accessToken = this.getAccessToken();
JSONObject param = new JSONObject();
param.put("scene", scene);
param.put("page", path);
param.put("width", 430);
param.put("env_version", userSystemConstant.getEnvVersion());
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
base64 = HttpHelper.httpPost(url, param.toJSONString());
return ResultBody.success(base64);
} catch (Exception e) {
return ResultBody.error(ResultEnum.APPLET_QR_CODE_CREATE_ERROR);
}
} }
@Override @Override
public void getUnLimitedQRCode(String path, String scene) { public ResultBody sendAppletMsg(AppletMsgVO appletMsgVO) {
System.out.println("###########开始发送-小程序-用户端消息##########");
String accessToken = this.getAccessToken();
if (StringUtils.isBlank(accessToken)){
return ResultBody.error(ResultEnum.WX_ACCESS_TOKEN_ERROR.getResultCode(),
ResultEnum.WX_ACCESS_TOKEN_ERROR.getResultMsg());
}
try {
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken;
appletMsgVO.setData(WxApiUtil.buildMsgJson(appletMsgVO.getData()));
String param = JSONObject.toJSONString(appletMsgVO);
System.out.println("参数:" + param);
HttpHelper.httpPost(url, param);
} catch (Exception e){
System.out.println("系统异常:" + e.getMessage());
}
System.out.println("###########结束发送-小程序-消息##########");
return ResultBody.success();
}
@Override
public String createUrlLink(String path, String query) {
try {
String accessToken = this.getAccessToken();
JSONObject param = new JSONObject();
param.put("path", path);
param.put("env_version", userSystemConstant.getEnvVersion());
param.put("query", query);
String url = "https://api.weixin.qq.com/wxa/generate_urllink?access_token=" + accessToken;
String res = HttpHelper.httpPost(url, param.toString());
JSONObject result = JSONObject.parseObject(res);
if (result.getString("errcode").equals("0")) {
return result.getString("url_link");
}
return res;
} catch (Exception e) {
e.printStackTrace();
}
return null;
} }
} }
package com.mmc.iuav.user.util;
/**
* @author 作者 geDuo
* @version 创建时间:2021年10月15日 下午6:43:11
* @explain 类说明
*/
import com.alibaba.fastjson2.JSONObject;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.Map;
public class WxApiUtil {
// 与接口配置信息中的Token要一致
private static final String token = "MMCDingYueHaoToken2020";
public static boolean checkSignature(String signature, String timestrap, String nonce) {
String[] arr = new String[] { token, timestrap, nonce };
// 将token、timestamp、nonce三个参数进行字典序排序
Arrays.sort(arr);
StringBuffer buf = new StringBuffer();
for (int i = 0; i < arr.length; i++) {
buf.append(arr[i]);
}
String temp = getSha1(buf.toString());
return temp.equals(signature);
}
public static String getSha1(String str) {
if (null == str || str.length() == 0) {
return null;
}
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
try {
MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
mdTemp.update(str.getBytes("UTF-8"));
byte[] md = mdTemp.digest();
int j = md.length;
char[] buf = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byTemp = md[i];
buf[k++] = hexDigits[byTemp >>> 4 & 0xf];
buf[k++] = hexDigits[byTemp & 0xf];
}
return new String(buf);
} catch (Exception e) {
return null;
}
}
/**
* 截取模板长度
*/
public static JSONObject buildMsgJson(JSONObject jsonObject) {
for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
if (entry.getKey().startsWith("thing") && entry.getValue() != null) {
String json = JSONObject.toJSONString(entry.getValue());
JSONObject obj = JSONObject.parseObject(json);
String str = obj.getString("value");
if (str.length() > 20) {
obj.put("value", str.substring(0, 17) + "...");
entry.setValue(obj);
}
}
if (entry.getKey().startsWith("phrase") && entry.getValue() != null) {
String json = JSONObject.toJSONString(entry.getValue());
JSONObject obj = JSONObject.parseObject(json);
String str = obj.getString("value");
if (str.length() > 5) {
obj.put("value", str.substring(0, 5));
entry.setValue(obj);
}
}
if (entry.getKey().startsWith("character_string") && entry.getValue() != null) {
String json = JSONObject.toJSONString(entry.getValue());
JSONObject obj = JSONObject.parseObject(json);
String str = obj.getString("value");
if (str.length() > 32) {
obj.put("value", str.substring(0, 29) + "...");
entry.setValue(obj);
}
}
}
return jsonObject;
}
}
...@@ -44,6 +44,11 @@ spring: ...@@ -44,6 +44,11 @@ spring:
# login-password: druid # login-password: druid
jackson: jackson:
date-format: yyyy-MM-dd HH:mm:ss date-format: yyyy-MM-dd HH:mm:ss
redis:
database: 1
host: r-wz9ke310fs684hacn1pd.redis.rds.aliyuncs.com
password: MMC@2022&REDIS
port: 6379
#mybatis #mybatis
mybatis: mybatis:
......
...@@ -14,6 +14,11 @@ spring: ...@@ -14,6 +14,11 @@ spring:
password: MMC@2022&MYSQL password: MMC@2022&MYSQL
# Druid数据源配置 # Druid数据源配置
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
redis:
database: 1
host: r-wz9ke310fs684hacn1pd.redis.rds.aliyuncs.com
password: MMC@2022&REDIS
port: 6379
jackson: jackson:
date-format: yyyy-MM-dd HH:mm:ss date-format: yyyy-MM-dd HH:mm:ss
......
...@@ -44,6 +44,11 @@ spring: ...@@ -44,6 +44,11 @@ spring:
# login-password: druid # login-password: druid
jackson: jackson:
date-format: yyyy-MM-dd HH:mm:ss date-format: yyyy-MM-dd HH:mm:ss
redis:
database: 1
host: r-wz9ke310fs684hacn1pd.redis.rds.aliyuncs.com
password: MMC@2022&REDIS
port: 6379
#mybatis #mybatis
mybatis: mybatis:
...@@ -60,8 +65,8 @@ wx: ...@@ -60,8 +65,8 @@ wx:
app: app:
id: wx18b7883acd204278 id: wx18b7883acd204278
secret: 28afe74ba373830237a8133a7431ee82 secret: 28afe74ba373830237a8133a7431ee82
miniprogram-state: trial miniprogram-state: formal
env-version: trial env-version: formal
token-path: /userservlet/wechat/getAppletUserAccessToken token-path: /userservlet/wechat/getAppletUserAccessToken
port: user port: user
......
...@@ -98,6 +98,11 @@ ...@@ -98,6 +98,11 @@
<version>5.3</version> <version>5.3</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies> </dependencies>
<!-- 标识 SpringCloud 的版本 --> <!-- 标识 SpringCloud 的版本 -->
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论