diff --git a/pom.xml b/pom.xml index c0c6685..ca2656e 100644 --- a/pom.xml +++ b/pom.xml @@ -231,6 +231,12 @@ io.netty netty-all + + + com.alipay.sdk + alipay-sdk-java + 4.39.165.ALL + org.springframework.boot spring-boot-starter-amqp diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/alipayUtil/AlipayUtil.java b/src/main/java/com/chaozhanggui/system/cashierservice/alipayUtil/AlipayUtil.java new file mode 100644 index 0000000..2ede67d --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/alipayUtil/AlipayUtil.java @@ -0,0 +1,92 @@ +package com.chaozhanggui.system.cashierservice.alipayUtil; + +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.AlipayConfig; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipaySystemOauthTokenRequest; +import com.alipay.api.response.AlipaySystemOauthTokenResponse; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * 支付宝通用SDK工具类 + * + * @author tankaikai + * @since 2024-09-23 16:15 + */ + +@Slf4j +@Component +public class AlipayUtil { + + /** + * 网关地址 线上:https://openapi.alipay.com/gateway.do 沙箱:https://openapi.alipaydev.com/gateway.do + */ + @Value("${alipay.sdk.config.serverUrl}") + private String serverUrl; + /** + * 应用ID + */ + @Value("${alipay.sdk.config.appId}") + private String appId; + /** + * 应用私钥 + */ + @Value("${alipay.sdk.config.privateKey}") + private String privateKey; + /** + * 支付宝公钥 + */ + @Value("${alipay.sdk.config.alipayPublicKey}") + private String alipayPublicKey; + + /** + * 创建支付宝客户端 + * @return AlipayClient + */ + @SneakyThrows + public AlipayClient createClient() { + AlipayConfig alipayConfig = new AlipayConfig(); + //设置网关地址 + alipayConfig.setServerUrl(serverUrl); + //设置应用ID + alipayConfig.setAppId(appId); + //设置应用私钥 + alipayConfig.setPrivateKey(privateKey); + //设置支付宝公钥 + alipayConfig.setAlipayPublicKey(alipayPublicKey); + return new DefaultAlipayClient(alipayConfig); + } + + /** + * 获取支付宝用户的openId + * @param code 用户信息授权码 + * @return openId + */ + public String getOpenId(String code) throws AlipayApiException{ + AlipaySystemOauthTokenRequest req = new AlipaySystemOauthTokenRequest(); + //SDK已经封装掉了公共参数,这里只需要传入业务参数 + req.setCode(code); + req.setGrantType("authorization_code"); + //此次只是参数展示,未进行字符串转义,实际情况下请转义 + //req.setBizContent(" {" + " \"primary_industry_name\":\"IT科技/IT软件与服务\"," + " \"primary_industry_code\":\"10001/20102\"," + " \"secondary_industry_code\":\"10001/20102\"," + " \"secondary_industry_name\":\"IT科技/IT软件与服务\"" + " }"); + AlipaySystemOauthTokenResponse response; + try { + response = createClient().execute(req); + }catch (AlipayApiException e){ + log.error("获取支付宝用户信息失败,错误码:{},错误信息:{}", e.getErrCode(), e.getErrMsg()); + throw e; + } + //调用失败 + if (!response.isSuccess()) { + log.error("获取支付宝用户信息失败,错误码:{},错误信息:{}", response.getSubCode(), response.getSubMsg()); + throw new AlipayApiException(response.getSubCode(), response.getSubMsg()); + } + //调用成功,则处理业务逻辑 + return response.getOpenId(); + } + +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/auth/AuthSource.java b/src/main/java/com/chaozhanggui/system/cashierservice/auth/AuthSource.java new file mode 100644 index 0000000..11b952e --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/auth/AuthSource.java @@ -0,0 +1,35 @@ +package com.chaozhanggui.system.cashierservice.auth; + +/** + * 三方登录认证来源 + * @author tankaikai + * @since 2024-09-23 17:51 + */ +public enum AuthSource { + WECHAT("微信", "wechat"), + ALIPAY("支付宝", "alipay"); + + private String name; + private String value; + + AuthSource(String name, String value) { + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java b/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java index d2d0f9c..f15ea8e 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/auth/LoginFilter.java @@ -49,6 +49,7 @@ public class LoginFilter implements Filter { // "cashierService/login/**",//登录部分接口不校验 "cashierService/login/wx/**",//登录部分接口不校验 + "cashierService/login/auth/**",//登录部分接口不校验 "cashierService/login/app/login",//登录部分接口不校验 "cashierService/product/queryProduct", "cashierService/product/queryProductSku", diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/LoginContoller.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/LoginContoller.java index 8fd3de8..ab82adf 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/LoginContoller.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/LoginContoller.java @@ -4,6 +4,9 @@ import cn.binarywang.wx.miniapp.util.crypt.WxMaCryptUtils; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.alipay.api.AlipayApiException; +import com.chaozhanggui.system.cashierservice.alipayUtil.AlipayUtil; +import com.chaozhanggui.system.cashierservice.auth.AuthSource; import com.chaozhanggui.system.cashierservice.dao.TbMerchantAccountMapper; import com.chaozhanggui.system.cashierservice.entity.TbMerchantAccount; import com.chaozhanggui.system.cashierservice.entity.TbUserInfo; @@ -16,10 +19,13 @@ import com.chaozhanggui.system.cashierservice.service.LoginService; import com.chaozhanggui.system.cashierservice.service.OnlineUserService; import com.chaozhanggui.system.cashierservice.sign.CodeEnum; import com.chaozhanggui.system.cashierservice.sign.Result; -import com.chaozhanggui.system.cashierservice.util.*; +import com.chaozhanggui.system.cashierservice.util.IpUtil; +import com.chaozhanggui.system.cashierservice.util.MD5Utils; +import com.chaozhanggui.system.cashierservice.util.StringUtil; +import com.chaozhanggui.system.cashierservice.util.TokenUtil; import com.chaozhanggui.system.cashierservice.wxUtil.WechatUtil; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -60,28 +66,27 @@ public class LoginContoller { @Autowired RedisUtil redisUtil; + @Resource + AlipayUtil alipayUtil; + @RequestMapping("/wx/business/login") - public Result wxBusinessLogin(@RequestParam(value = "code", required = false) String code, - @RequestParam(value = "shopId", required = false) String shopId - ) { + public Result wxBusinessLogin(@RequestParam(value = "code", required = false) String code, @RequestParam(value = "shopId", required = false) String shopId) { JSONObject SessionKeyOpenId = WechatUtil.getSessionKeyOrOpenId(code, businessAppId, businessSecrete); String openid = SessionKeyOpenId.getString("openid"); - if(Objects.isNull(openid)){ + if (Objects.isNull(openid)) { return Result.fail("获取微信id失败"); } - return loginService.wxBusinessLogin(openid,shopId); + return loginService.wxBusinessLogin(openid, shopId); } @GetMapping("/wx/business/openId") - public Result getOpenId( - @RequestParam String code - ) { + public Result getOpenId(@RequestParam String code) { JSONObject SessionKeyOpenId = WechatUtil.getSessionKeyOrOpenId(code, customAppId, customSecrete); String openid = SessionKeyOpenId.getString("openid"); - if(Objects.isNull(openid)){ + if (Objects.isNull(openid)) { return Result.fail("获取微信id失败"); } @@ -95,48 +100,41 @@ public class LoginContoller { * @param map * @return */ - @RequestMapping("/wx/custom/login") - public Result wxCustomLogin(HttpServletRequest request, @RequestBody Map map) { + @RequestMapping("/auth/custom/login") + @SneakyThrows + public Result authCustomLogin(HttpServletRequest request, @RequestBody Map map) { if (ObjectUtil.isNull(map) || ObjectUtil.isEmpty(map) || !map.containsKey("code") || ObjectUtil.isEmpty(map.get("code"))) { Result.fail("code不能为空"); } - String code = map.get("code").toString(); - String rawData = map.get("rawData"); -// String signature = map.get("signature"); -// String encryptedData = map.get("encryptedData"); -// String ivStr = map.get("iv"); -// String phone = map.get("phone"); - // 用户非敏感信息:rawData - // 签名:signature - JSONObject rawDataJson = JSON.parseObject(rawData); - // 1.接收小程序发送的code - // 2.开发者服务器 登录凭证校验接口 appi + appsecret + code - JSONObject SessionKeyOpenId = WechatUtil.getSessionKeyOrOpenId(code, customAppId, customSecrete); - // 3.接收微信接口服务 获取返回的参数 - String openid = SessionKeyOpenId.getString("openid"); -// String sessionKey = SessionKeyOpenId.getString("session_key"); - - // 4.校验签名 小程序发送的签名signature与服务器端生成的签名signature2 = sha1(rawData + sessionKey) -// String signature2 = DigestUtils.sha1Hex(rawData + sessionKey); -// if (!signature.equals(signature2)) { -// return Result.fail("签名校验失败"); -// } -// String phone = ""; -// try{ -// String data = WxMaCryptUtils.decrypt(sessionKey, encryptedData, ivStr); -// if (ObjectUtil.isNotEmpty(data) && JSONObject.parseObject(data).containsKey("phoneNumber")) { -// }// phone =JSONObject.parseObject(data).get("phoneNumber").toString(); -// }catch (Exception e){ -// log.info("登录传参:获取手机号失败{}",e.getMessage()); -// } - String nickName = rawDataJson.getString("nickName"); - String avatarUrl = rawDataJson.getString("avatarUrl"); - try { - return loginService.wxCustomLogin(openid, avatarUrl, nickName, "", IpUtil.getIpAddr(request)); - } catch (Exception e) { - e.printStackTrace(); + // 三方登录来源 wechat、alipay + String source = map.getOrDefault("source",AuthSource.WECHAT.getValue()); + String code = map.get("code"); + if(AuthSource.WECHAT.getValue().equals(source)){ + String rawData = map.get("rawData"); + // 签名:signature + JSONObject rawDataJson = JSON.parseObject(rawData); + // 1.接收小程序发送的code + // 2.开发者服务器 登录凭证校验接口 appi + appsecret + code + JSONObject SessionKeyOpenId = WechatUtil.getSessionKeyOrOpenId(code, customAppId, customSecrete); + // 3.接收微信接口服务 获取返回的参数 + String openid = SessionKeyOpenId.getString("openid"); + String nickName = rawDataJson.getString("nickName"); + String avatarUrl = rawDataJson.getString("avatarUrl"); + try { + return loginService.wxCustomLogin(openid, avatarUrl, nickName, "", IpUtil.getIpAddr(request)); + } catch (Exception e) { + e.printStackTrace(); + } + }else if(AuthSource.ALIPAY.getValue().equals(source)){ + try { + String openId = alipayUtil.getOpenId(code); + return loginService.alipayCustomLogin(openId); + }catch (AlipayApiException e){ + return Result.fail("登录失败:"+e.getErrMsg()); + }catch (Exception e){ + e.printStackTrace(); + } } - return Result.fail("登录失败"); } @@ -179,7 +177,7 @@ public class LoginContoller { // return Result.fail("获取手机号失败,请重试!"); // } @RequestMapping("getPhoneNumber") - public Result getPhoneNumber(@RequestHeader String openId,@RequestBody Map map) { + public Result getPhoneNumber(@RequestHeader String openId, @RequestBody Map map) { if (ObjectUtil.isNull(map) || ObjectUtil.isEmpty(map) || !map.containsKey("code") || ObjectUtil.isEmpty(map.get("code"))) { Result.fail("code不能为空"); @@ -201,14 +199,14 @@ public class LoginContoller { try { if (ObjectUtil.isNotEmpty(data) && JSONObject.parseObject(data).containsKey("phoneNumber")) { // if (!map.containsKey("shopId") || ObjectUtil.isEmpty(map.get("shopId"))) { - return Result.success(CodeEnum.SUCCESS, JSONObject.parseObject(data).get("phoneNumber")); + return Result.success(CodeEnum.SUCCESS, JSONObject.parseObject(data).get("phoneNumber")); // } // log.info("登录传参 获取手机号成功 sessionKey:{}\n encryptedData:{} \nivStr:{} \n data:{},",sessionKey,encryptedData,ivStr,JSONObject.parseObject(data).get("phoneNumber")); // return loginService.upPhone(openId,JSONObject.parseObject(data).get("phoneNumber").toString(),map.get("shopId").toString()); } - } catch (Exception e){ + } catch (Exception e) { // e.printStackTrace(); - log.info("登录传参 获取手机号失败 sessionKey:{}\n encryptedData:{} \nivStr:{} \n data:{},",sessionKey,encryptedData,ivStr,data); + log.info("登录传参 获取手机号失败 sessionKey:{}\n encryptedData:{} \nivStr:{} \n data:{},", sessionKey, encryptedData, ivStr, data); } return Result.fail("获取手机号失败,请重试!"); } @@ -254,10 +252,8 @@ public class LoginContoller { * @return */ @GetMapping("createCardNo") - public Result createCardNo(@RequestHeader("openId") String openId, @RequestHeader("token") String token, @RequestHeader("id") String id, - @RequestParam("shopId") String shopId - ) { - return loginService.createCardNo(id, openId,shopId); + public Result createCardNo(@RequestHeader("openId") String openId, @RequestHeader("token") String token, @RequestHeader("id") String id, @RequestParam("shopId") String shopId) { + return loginService.createCardNo(id, openId, shopId); } @GetMapping("/userInfo") @@ -267,6 +263,7 @@ public class LoginContoller { /** * 更新用户信息 + * * @param token * @param userInfo * @return @@ -281,16 +278,16 @@ public class LoginContoller { } @PostMapping(value = "/upPass") - public Result upPass(@RequestHeader String token,@RequestBody UserPassDto passVo){ + public Result upPass(@RequestHeader String token, @RequestBody UserPassDto passVo) { String userId = TokenUtil.parseParamFromToken(token).getString("userId"); String newPass = MD5Utils.MD5Encode(passVo.getNewPass(), "utf-8"); if (ObjectUtil.isNull(passVo.getCode())) { String oldPass = MD5Utils.MD5Encode(passVo.getOldPass(), "utf-8"); - return loginService.upPass(userId,oldPass, newPass); + return loginService.upPass(userId, oldPass, newPass); } else { boolean tf = loginService.validate(passVo.getCode(), passVo.getPhone()); if (tf) { - TbUserInfo userInfo=new TbUserInfo(); + TbUserInfo userInfo = new TbUserInfo(); userInfo.setId(Integer.valueOf(userId)); userInfo.setPassword(newPass); return loginService.upUserInfo(userInfo); @@ -301,16 +298,16 @@ public class LoginContoller { } @PostMapping(value = "modityPass") - public Result modityPass(@RequestHeader String token,@RequestBody UserPassDto passVo){ + public Result modityPass(@RequestHeader String token, @RequestBody UserPassDto passVo) { String userId = TokenUtil.parseParamFromToken(token).getString("userId"); String newPass = MD5Utils.MD5Encode(passVo.getNewPass(), "utf-8"); if (ObjectUtil.isNull(passVo.getCode())) { String oldPass = MD5Utils.MD5Encode(passVo.getOldPass(), "utf-8"); - return loginService.upPass(userId,oldPass, newPass); + return loginService.upPass(userId, oldPass, newPass); } else { boolean tf = loginService.validate(passVo.getCode(), passVo.getPhone()); if (tf) { - TbUserInfo userInfo=new TbUserInfo(); + TbUserInfo userInfo = new TbUserInfo(); userInfo.setId(Integer.valueOf(userId)); userInfo.setPassword(newPass); return loginService.upUserInfo(userInfo); @@ -359,12 +356,12 @@ public class LoginContoller { } //验证密码 String mdPasswordString = MD5Utils.MD5Encode(authUserDto.getPassword(), "utf-8"); - return loginService.appLogin(authUserDto.getUsername(),openid, mdPasswordString); + return loginService.appLogin(authUserDto.getUsername(), openid, mdPasswordString); } else { // tf = true; tf = loginService.validate(authUserDto.getCode(), authUserDto.getUsername()); if (tf) { - return loginService.appLogin(authUserDto.getUsername(),openid, null); + return loginService.appLogin(authUserDto.getUsername(), openid, null); } else { return Result.fail("验证码输入有误"); } @@ -393,29 +390,31 @@ public class LoginContoller { /** * 重置资金密码 + * * @param token * @param map * @return */ @RequestMapping("resetPwd") - public Result resetPwd(@RequestHeader String token,@RequestBody Map map){ + public Result resetPwd(@RequestHeader String token, @RequestBody Map map) { String userId = TokenUtil.parseParamFromToken(token).getString("userId"); - return loginService.resetPwd(userId,map); + return loginService.resetPwd(userId, map); } /** * 修改密码 + * * @param token * @param map * @return */ @RequestMapping("mpdifyPwd") - public Result mpdifyPwd(@RequestHeader String token,@RequestBody Map map){ + public Result mpdifyPwd(@RequestHeader String token, @RequestBody Map map) { String userId = TokenUtil.parseParamFromToken(token).getString("userId"); - return loginService.modifyPwd(userId,map); + return loginService.modifyPwd(userId, map); } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/LoginService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/LoginService.java index bf59077..4c1ba0e 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/LoginService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/LoginService.java @@ -1,14 +1,14 @@ package com.chaozhanggui.system.cashierservice.service; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; -import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.chaozhanggui.system.cashierservice.dao.*; -import com.chaozhanggui.system.cashierservice.entity.*; -import com.chaozhanggui.system.cashierservice.exception.MsgException; +import com.chaozhanggui.system.cashierservice.entity.TbShopOpenId; +import com.chaozhanggui.system.cashierservice.entity.TbShopUser; +import com.chaozhanggui.system.cashierservice.entity.TbUserInfo; +import com.chaozhanggui.system.cashierservice.entity.TbUserShopMsg; import com.chaozhanggui.system.cashierservice.redis.RedisCst; import com.chaozhanggui.system.cashierservice.redis.RedisUtil; import com.chaozhanggui.system.cashierservice.sign.CodeEnum; @@ -141,34 +141,72 @@ public class LoginService { } + private void buildNewUserInfo(TbUserInfo userInfo) { + userInfo = new TbUserInfo(); + userInfo.setAmount(BigDecimal.ZERO); + userInfo.setChargeAmount(BigDecimal.ZERO); + userInfo.setLineOfCredit(BigDecimal.ZERO); + userInfo.setConsumeNumber(0); + userInfo.setConsumeAmount(BigDecimal.ZERO); + userInfo.setTotalScore(0); + userInfo.setLockScore(0); + userInfo.setHeadImg(""); + userInfo.setNickName(""); + userInfo.setTelephone(""); + userInfo.setStatus(Byte.parseByte("1")); + userInfo.setParentType("PERSON"); + userInfo.setIsResource(Byte.parseByte("0")); + userInfo.setIsOnline(Byte.parseByte("0")); + userInfo.setIsVip(Byte.parseByte("0")); + userInfo.setIsAttentionMp(Byte.parseByte("0")); + userInfo.setIsPwd("0"); + userInfo.setPwd(MD5Utils.md5("123456")); + userInfo.setCreatedAt(System.currentTimeMillis()); + userInfo.setLastLogInAt(System.currentTimeMillis()); + userInfo.setUpdatedAt(System.currentTimeMillis()); + } + public Result wxCustomLogin(String openId, String headImage, String nickName, String telephone, String ip) { TbUserInfo userInfo = tbUserInfoMapper.selectByOpenId(openId); if (ObjectUtil.isNull(userInfo)) { userInfo = new TbUserInfo(); - userInfo.setAmount(BigDecimal.ZERO); - userInfo.setChargeAmount(BigDecimal.ZERO); - userInfo.setLineOfCredit(BigDecimal.ZERO); - userInfo.setConsumeNumber(0); - userInfo.setConsumeAmount(BigDecimal.ZERO); - userInfo.setTotalScore(0); - userInfo.setLockScore(0); + buildNewUserInfo(userInfo); userInfo.setHeadImg(ObjectUtil.isNotNull(headImage) ? headImage : ""); userInfo.setNickName(ObjectUtil.isNotNull(nickName) ? nickName : "微信用户"); userInfo.setTelephone(ObjectUtil.isNotNull(telephone) ? telephone : ""); - userInfo.setMiniAppOpenId(openId); - userInfo.setStatus(Byte.parseByte("1")); - userInfo.setParentType("PERSON"); - userInfo.setIsResource(Byte.parseByte("0")); - userInfo.setIsOnline(Byte.parseByte("0")); - userInfo.setIsVip(Byte.parseByte("0")); userInfo.setSourcePath("WECHAT-APP"); - userInfo.setIsAttentionMp(Byte.parseByte("0")); userInfo.setSearchWord("||微信用户"); - userInfo.setIsPwd("0"); - userInfo.setPwd(MD5Utils.md5("123456")); - userInfo.setCreatedAt(System.currentTimeMillis()); - userInfo.setLastLogInAt(System.currentTimeMillis()); + userInfo.setMiniAppOpenId(openId); + tbUserInfoMapper.insert(userInfo); + } else { userInfo.setUpdatedAt(System.currentTimeMillis()); + userInfo.setLastLogInAt(System.currentTimeMillis()); + tbUserInfoMapper.updateByPrimaryKeySelective(userInfo); + } + //生成token 信息 + String token = TokenUtil.generateToken(userInfo.getId(), userInfo.getMiniAppOpenId(), userInfo.getTelephone(), userInfo.getNickName()); + Map map = new HashMap<>(); + map.put("token", token); + map.put("userInfo", userInfo); + redisUtil.saveMessage(RedisCst.ONLINE_USER.concat(openId), JSON.toJSONString(map), 60 * 60 * 24 * 30L); + log.info("登录传参 结果:" + JSONUtil.toJSONString(map)); + return Result.success(CodeEnum.SUCCESS, map); + } + + /** + * 支付宝用户登录 + * @param openId + * @return + */ + public Result alipayCustomLogin(String openId) { + TbUserInfo userInfo = tbUserInfoMapper.selectByOpenId(openId); + if (ObjectUtil.isNull(userInfo)) { + userInfo = new TbUserInfo(); + buildNewUserInfo(userInfo); + userInfo.setNickName("支付宝用户"); + userInfo.setSourcePath("ALIPAY-APP"); + userInfo.setSearchWord("||支付宝用户"); + userInfo.setMiniAppOpenId(openId); tbUserInfoMapper.insert(userInfo); } else { userInfo.setUpdatedAt(System.currentTimeMillis()); diff --git a/src/main/resources/application-pre.yml b/src/main/resources/application-pre.yml index e2140ec..6a25699 100644 --- a/src/main/resources/application-pre.yml +++ b/src/main/resources/application-pre.yml @@ -1,6 +1,7 @@ spring: datasource: - url: jdbc:mysql://rm-bp1kn7h89nz62cno1ro.mysql.rds.aliyuncs.com:3306/fycashier_pre?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useJDBCCompliantTimezoneShift=true&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true + # 内网地址 + url: jdbc:mysql://rm-bp1kn7h89nz62cno1.mysql.rds.aliyuncs.com:3306/fycashier_pre?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useJDBCCompliantTimezoneShift=true&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true username: cashier password: Cashier@1@ driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 562f160..aee6778 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -24,6 +24,13 @@ wx: appId: wx212769170d2c6b2a secrete: 8492a7e8d55bbb1b57f5c8276ea1add0 warnMsgTmpId: C08OUr80x6wGmUN1zpFhSQ3Sv7VF5vksdZigiEx2pD0 +alipay: + sdk: + config: + serverUrl: https://openapi.alipay.com/gateway.do + appId: 2021004145625815 + privateKey: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCAjDBuS8K/IJb9ui+KuNm/sTUdEiaji4BNpZ92avO1N5JpNlGmac6ec4p3tNFT950sBLcQkClcUpQxUHQzAT6DYNNXOKyvfI/EmcqwCw6PaMNLs/8cV//J2WWZBUhLaOsjKurpm9/3W5MnTh4BGxIfBoeBMA8f8K3BgKdmyKtvIEV2h2cyjsMskdn+g6oNZcmWcms0pvpPHyH46mRaGFhpp0v19wX3WsamGldh1L2VntmaDN3C2XbSrXv90XYp5bEUqwTbLwXpMAlzTibF56d/iqv9oYi8cpAKougUFLOymnbutLNs2tLrEDSFwHcmG2/wbZHybZyYcIgFgv4arf+tAgMBAAECggEAf7hKKlw1y6Z6vvAtalxNZUuRZSfyog3p1bwYWxTavZPQcZ7Zs0lvVDmiO1u5m/7q96BbryY9IhCeUv0H5uF2lhwu/3s9AEL3qTPQkeb6eXxyhhX6A9RfPdM1Qbtg4CQHdHKg4qjP9znSVHwmDZ0y/QaEvdPdQzPjv92u9c2tn4N4x6XyBYcU5gzxiJNnIugCmBgcJo/3H2fgV+XXEhORPvy5of9b4oATHEaLS/8dAS2wuOjhzaGS4MXp3VkXn3XaYjwSzaL03qYWA+xm+aO5sJv8bmqZW7sNVck5o3sPo7cQ4VkBFVzyrRdmJcxcSRJ9MsB9JsrhoKI8pgaXrVie4QKBgQDU2vai0lpBIK/0jzRpPNoqdT8lnafnnWni8nU4kfAh+gCLi+HBPhQRT0kv4unQc2q2/gALE7sgZVO00JGY5a3R0orsojPoUSZlpypGW7GGqKy576NHn0nw4o/PdfysT92VWgt1hlfTf6qfCDhfE9APU+RGvlSWXcT8nxVel3iUaQKBgQCamoJN6+4v+chJvL2nqV8NVVRLp0vDIHxs1QOtKwUodx8Qp1D6CJYtavCXn8aNUFVNQJPJ7TQPpJjXP2rI4SN01weDwx+I+wh8PBGHV6/234R+6TvFgY1PrYgCdfNP4i/E7B4uyEhAxdU73PB8qkqRAeJGok05p7oG71KCOBiYpQKBgEZfGflcuDAeAW5GRhqg3rP4zWa/R7qgZVh9tll8jjp9b96y4XFE99d9MgId8BVVgyt6sEL5Q/2C4ni+F9TH4n6jMADp42VkJuCmsqhOOlP9whU67+2G8Sgtj0QUivPg964f9ffl8XVgGOW5DwIIB9p5btggptCLscufQK5kP545AoGADBvf6tR4wl8w9b2HqTMV08iEIqzGvVC1Dh0c/Zop/EJgN4CzUfIMOSBwGaAVAApzs+pD6QPgGP2OTwWTioo/qa4R05sbxDHNN1XJFa2jhZV6HiqMWOrNs5jm1zJ/zRjtHuJTdtyO9CvKiLbESy9XScY4/8lEfSiK5HIoJzTXkFUCgYAkYkvkW6psJpWj05XWq44UN0n6QOU/Igl35Um/iuOMVhsTmIt09STQVTuzJzfH82+sCqoRsD1blE5unKNUC1DK77aNKTv3Z0dxN9R7FAyfZRiYQXTrbBPBqWjay6FCNxn8e8UsJN4Z6FIV2LGlQI114krSap1MALKLVvnld0NaUQ== + alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiQkrz+emAuS1mB3KKDOMmAZRd/BlPbh7fAIHAqAj1+QCZNcV3o2BTLIIqnuKpSlFXDG3uDzp2VsBxcizXuBbFyPGylnD9CgCj5abyh3+FIHPAZ2IM3TtpqImZ0TSPGXrMli4Nir7MvZktgccCqQKCC4o6iaDGz+UwWwJUIPna8fm2tiTZ+KH150CZbKVj4ZGNpBh5XSV/1dRgyQIV9D/EwSbkZ0n6VgKQLJBi0C2UE3QB17aL1Ir6+gDXIDbknN8O7GUD3aMGdThYdSRUb5wp9CZ5qfV7vCS/CgaRo38nhH3NOzkTL+7v0m1ZDHPmqEkn9VzZN6sCQdL7PoAOjHOCwIDAQAB decorator: datasource: p6spy: