springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/microCommercialStreet/BindUserPhoneDTO.java
New file @@ -0,0 +1,33 @@ package com.panzhihua.common.model.dtos.community.microCommercialStreet; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Pattern; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @title: BindUserPhoneDTO * @projectName: 成都呐喊信息技术有限公司-智慧社区项目 * @description: 商业街用户绑定手机号 * @author: hans * @date: 2022/01/13 10:58 */ @Data @ApiModel("商业街用户绑定手机号") public class BindUserPhoneDTO { @ApiModelProperty("手机号") @NotBlank(message = "手机号不能为空") @Pattern(message = "手机号格式错误", regexp = "^(13[0-9]|14[01456879]|15[0-3,5-9]|16[2567]|17[0-8]|18[0-9]|19[0-3,5-9])\\d{8}$") private String phone; @ApiModelProperty("验证码") @NotBlank(message = "验证码不能为空") private String code; @ApiModelProperty("openId") @NotBlank(message = "openId不能为空") private String openId; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/community/microCommercialStreet/McsMerchantDTO.java
@@ -85,4 +85,7 @@ @ApiModelProperty(value = "用户头像", hidden = true) private String imageUrl; @ApiModelProperty(value = "openId", hidden = true) private String openId; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/LoginReturnVO.java
@@ -19,4 +19,6 @@ private String refreshToken; @ApiModelProperty("communityId") private Long communityId; @ApiModelProperty("openId") private String openId; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/user/UserService.java
@@ -5,6 +5,8 @@ import com.panzhihua.common.model.dtos.DataKanBansDto; import com.panzhihua.common.model.dtos.community.convenient.ConvenientMerchantDTO; import com.panzhihua.common.model.dtos.community.convenient.DisableOrEnableConvenientMerchantDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.BindUserPhoneDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.LoginWithPhoneDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsMerchantDTO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; @@ -18,6 +20,8 @@ import com.panzhihua.common.model.vos.*; import com.panzhihua.common.model.vos.shop.ShopStoreVO; import com.panzhihua.common.model.vos.user.*; import javax.validation.Valid; /** * @program: springcloud_k8s_panzhihuazhihuishequ @@ -1129,7 +1133,7 @@ R getSysUserByPhone(@RequestParam("phone") String phone, @RequestParam("type") Integer type); /** * 发送验证码登录 * 发送验证码 * @param phone 手机号 * @param clientIP 用户ip * @param prefixKey redis Key 前缀 @@ -1137,10 +1141,26 @@ * @param timeout 超次数获取时间等待 * @return */ @GetMapping("/sendMessageCodeForLogin") R sendMessageCodeForLogin(@RequestParam("phone") String phone, @GetMapping("/sendMessageCode") R sendMessageCode(@RequestParam("phone") String phone, @RequestParam(value = "clientIP", required = false) String clientIP, @RequestParam("prefixKey") String prefixKey, @RequestParam("limit") Integer limit, @RequestParam("timeout") Integer timeout); /** * 根据openId获取微商业街用户 * @param openid * @return */ @GetMapping("/getMcsUserByOpenId") R getMcsUserByOpenId(@RequestParam("openid") String openid); /** * 商业街用户微信授权-绑定手机号 * @param bindUserPhoneDTO * @return */ @PostMapping("/mcs/bindPhone") R bindOrAddMcsUser(@RequestBody @Valid BindUserPhoneDTO bindUserPhoneDTO); } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/McsGameServiceImpl.java
@@ -232,6 +232,9 @@ } Integer beforeCoins = mcsGame.getCoins(); Integer beforeSurplusCoins = mcsGame.getSurplusCoins(); if (isNull(beforeSurplusCoins)) { beforeSurplusCoins = beforeCoins; } Integer beforeUsedCoins = beforeCoins - beforeSurplusCoins; Integer surplusCoins = coins - beforeUsedCoins; if (surplusCoins < 0) { @@ -443,7 +446,7 @@ public R getMcsGame(Long gameId) { McsGameVO mcsGameVO = this.baseMapper.selectDetailById(gameId); Integer gameCount = this.baseMapper.selectCount(new QueryWrapper<McsGame>().lambda() .eq(McsGame::getMerchantId, mcsGameVO.getMerchantId()).eq(McsGame::getIsDel, false)); .eq(McsGame::getMerchantId, mcsGameVO.getMerchantId()).eq(McsGame::getStatus, McsGame.Status.jxz).eq(McsGame::getIsDel, false)); mcsGameVO.setGameCount(gameCount); return R.ok(mcsGameVO); } springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/api/UserApi.java
@@ -7,6 +7,8 @@ import com.panzhihua.common.model.dtos.DataKanBansDto; import com.panzhihua.common.model.dtos.community.convenient.ConvenientMerchantDTO; import com.panzhihua.common.model.dtos.community.convenient.DisableOrEnableConvenientMerchantDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.BindUserPhoneDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.LoginWithPhoneDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsMerchantDTO; import org.springframework.web.bind.annotation.*; @@ -1281,7 +1283,7 @@ } /** * 发送验证码登录 * 发送验证码 * @param phone 手机号 * @param clientIP 用户ip * @param prefixKey redis Key 前缀 @@ -1289,12 +1291,32 @@ * @param timeout 超次数获取时间等待 * @return */ @GetMapping("/sendMessageCodeForLogin") public R sendMessageCodeForLogin(@RequestParam("phone") String phone, @GetMapping("/sendMessageCode") public R sendMessageCode(@RequestParam("phone") String phone, @RequestParam(value = "clientIP", required = false) String clientIP, @RequestParam("prefixKey") String prefixKey, @RequestParam("limit") Integer limit, @RequestParam("timeout") Integer timeout) { return userService.sendMessageCodeForLogin(phone, clientIP, prefixKey, limit, timeout); return userService.sendMessageCode(phone, clientIP, prefixKey, limit, timeout); } /** * 根据openId获取微商业街用户 * @param openid * @return */ @GetMapping("/getMcsUserByOpenId") public R getMcsUserByOpenId(@RequestParam("openid") String openid) { return userService.getMcsUserByOpenId(openid); } /** * 商业街用户微信授权-绑定手机号 * @param bindUserPhoneDTO * @return */ @PostMapping("/mcs/bindPhone") public R bindOrAddMcsUser(@RequestBody BindUserPhoneDTO bindUserPhoneDTO) { return userService.bindOrAddMcsUser(bindUserPhoneDTO); } } springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/UserService.java
@@ -8,6 +8,7 @@ import com.panzhihua.common.model.dtos.community.NoticeReadDTO; import com.panzhihua.common.model.dtos.community.convenient.ConvenientMerchantDTO; import com.panzhihua.common.model.dtos.community.convenient.DisableOrEnableConvenientMerchantDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.BindUserPhoneDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsMerchantDTO; import com.panzhihua.common.model.dtos.grid.*; import com.panzhihua.common.model.dtos.user.PageFeedBackDTO; @@ -789,7 +790,7 @@ R getSysUserByPhone(String phone, Integer type); /** * 发送验证码登录 * 发送验证码 * @param phone 手机号 * @param clientIP 用户ip * @param prefixKey redis Key 前缀 @@ -797,5 +798,19 @@ * @param timeout 超次数获取时间等待 * @return */ R sendMessageCodeForLogin(String phone, String clientIP, String prefixKey, Integer limit, Integer timeout); R sendMessageCode(String phone, String clientIP, String prefixKey, Integer limit, Integer timeout); /** * 根据openId获取微商业街用户 * @param openid * @return */ R getMcsUserByOpenId(String openid); /** * 商业街用户微信授权-绑定手机号 * @param bindUserPhoneDTO * @return */ R bindOrAddMcsUser(BindUserPhoneDTO bindUserPhoneDTO); } springcloud_k8s_panzhihuazhihuishequ/service_user/src/main/java/com/panzhihua/service_user/service/impl/UserServiceImpl.java
@@ -16,7 +16,10 @@ import java.util.stream.Collectors; import javax.annotation.Resource; import javax.validation.constraints.NotBlank; import com.alibaba.fastjson.JSONObject; import com.panzhihua.common.model.dtos.community.microCommercialStreet.BindUserPhoneDTO; import com.panzhihua.common.model.vos.community.microCommercialStreet.McsLoginUserInfoVO; import org.apache.commons.lang.time.DateFormatUtils; import org.apache.commons.lang.time.DateUtils; @@ -139,6 +142,9 @@ @Slf4j @Service public class UserServiceImpl implements UserService { private static final String DEFAULT_IMAGE_URL = "https://www.psciio.com//idcard/91313573d071436ab1f934231b31c6e5.jpg"; @Resource private UserDao userDao; @Resource @@ -2925,7 +2931,7 @@ } /** * 发送验证码登录 * 发送验证码 * @param phone 手机号 * @param clientIP 用户ip * @param prefixKey redis Key 前缀 @@ -2934,13 +2940,13 @@ * @return */ @Override public R sendMessageCodeForLogin(String phone, String clientIP, String prefixKey, Integer limit, Integer timeout) { public R sendMessageCode(String phone, String clientIP, String prefixKey, Integer limit, Integer timeout) { ValueOperations<String, String> opsForValue = stringRedisTemplate.opsForValue(); if (isNotBlank(clientIP)) { String redisKey = String.join("::", prefixKey, clientIP); Long increment = opsForValue.increment(redisKey, 1); if (increment > limit) { return R.fail("请求频繁,请稍后再试"); return R.fail(String.format("请求过于频繁,请%d分钟后再次尝试!", timeout/60)); } stringRedisTemplate.expire(redisKey, timeout, TimeUnit.SECONDS); } @@ -2958,4 +2964,78 @@ } return R.fail(); } /** * 根据openId获取微商业街用户 * @param openid * @return */ @Override public R getMcsUserByOpenId(String openid) { SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getOpenid, openid).eq(SysUserDO::getType, 11)); McsLoginUserInfoVO loginUserInfoVO = null; if (nonNull(sysUserDO)) { loginUserInfoVO = new McsLoginUserInfoVO(); BeanUtils.copyProperties(sysUserDO, loginUserInfoVO); } return R.ok(loginUserInfoVO); } /** * 商业街用户微信授权-绑定手机号 * @param bindUserPhoneDTO * @return */ @Override public R bindOrAddMcsUser(BindUserPhoneDTO bindUserPhoneDTO) { String phone = bindUserPhoneDTO.getPhone(); String openId = bindUserPhoneDTO.getOpenId(); String redisKey = String.join("::", phone, bindUserPhoneDTO.getCode()); Boolean hasKey = stringRedisTemplate.hasKey(redisKey); if (hasKey) { //通过验证 SysUserDO sysUserDO = userDao.selectOne(new QueryWrapper<SysUserDO>().lambda().eq(SysUserDO::getPhone, phone).eq(SysUserDO::getType, 11)); if (nonNull(sysUserDO)) { //已有用户 sysUserDO.setOpenid(openId); int result = userDao.updateById(sysUserDO); if (result > 0) { McsLoginUserInfoVO loginUserInfoVO = new McsLoginUserInfoVO(); BeanUtils.copyProperties(sysUserDO, loginUserInfoVO); stringRedisTemplate.delete(redisKey); return R.ok(loginUserInfoVO); } return R.fail("绑定失败,请重试"); } else { //自动创建用户 McsMerchantDTO mcsMerchantDTO = new McsMerchantDTO(); mcsMerchantDTO.setAccount(phone); mcsMerchantDTO.setPassword("88888888"); mcsMerchantDTO.setAccountStatus(1); mcsMerchantDTO.setPhone(phone); mcsMerchantDTO.setName("用户" + retrieveRandomCode(5)); mcsMerchantDTO.setImageUrl(DEFAULT_IMAGE_URL); mcsMerchantDTO.setOpenId(openId); R addUserResult = addMcsMerchantUser(mcsMerchantDTO); if (R.isOk(addUserResult)) { McsLoginUserInfoVO loginUserInfoVO = JSONObject.parseObject(JSONObject.toJSONString(addUserResult.getData()), McsLoginUserInfoVO.class); loginUserInfoVO.setPlaintextPassword("88888888"); stringRedisTemplate.delete(redisKey); return R.ok(loginUserInfoVO); } return addUserResult; } } else { return R.fail("验证码错误"); } } private String retrieveRandomCode(int length) { Random r = new Random(); StringBuilder rs = new StringBuilder(); for (int i = 0; i < length; i++) { rs.append(r.nextInt(10)); } return rs.toString(); } } springcloud_k8s_panzhihuazhihuishequ/shop_backstage/pom.xml
@@ -47,6 +47,11 @@ <groupId>com.github.xiaoymin</groupId> <artifactId>swagger-bootstrap-ui</artifactId> </dependency> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-miniapp</artifactId> <version>3.9.9.B</version> </dependency> <!--添加监控依赖包--> <dependency> <groupId>io.micrometer</groupId> springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/api/MicroCommercialStreetApi.java
@@ -1,50 +1,49 @@ package com.panzhihua.shop_backstage.api; import static java.util.Objects.nonNull; import javax.annotation.Resource; import javax.validation.Valid; import com.panzhihua.common.model.dtos.community.microCommercialStreet.DeleteProductDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsEvaluateDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageJoinGameListDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageVerifyRecordDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.PutUserInfoDTO; import com.panzhihua.common.model.vos.community.microCommercialStreet.GameStatisticsVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.McsConfigVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.McsVerifyRecordVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.TopStatisticsVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.VerifiedReturnVO; import com.panzhihua.shop_backstage.aop.CheckMcsMerchantExpiration; import com.panzhihua.common.model.dtos.community.microCommercialStreet.BindUserPhoneDTO; import org.springframework.beans.BeanUtils; import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.alibaba.fastjson.JSONObject; import com.panzhihua.common.controller.BaseController; import com.panzhihua.common.model.dtos.community.microCommercialStreet.DeleteProductDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.LoginWithPhoneDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsEvaluateDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsGameDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsInfoDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsMerchantDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.McsProductDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageJoinGameListDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageMcsEvaluateDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageMcsGameDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageMcsInformationDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageMcsMerchantDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageMcsProductDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.PageVerifyRecordDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.PutUserInfoDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.SetShelfForGameDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.SetShelfForInfoDTO; import com.panzhihua.common.model.dtos.community.microCommercialStreet.SetShelfForProductDTO; import com.panzhihua.common.model.vos.LoginReturnVO; import com.panzhihua.common.model.vos.LoginUserInfoVO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.microCommercialStreet.GameStatisticsVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.IndexTopStatisticsVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.McsConfigVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.McsCouponVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.McsEvaluateVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.McsGameVO; @@ -53,24 +52,27 @@ import com.panzhihua.common.model.vos.community.microCommercialStreet.McsLoginUserInfoVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.McsMerchantVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.McsProductVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.McsVerifyRecordVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.MyCouponVO; import com.panzhihua.common.model.vos.shop.LoginMerchantUserInfoVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.TopStatisticsVO; import com.panzhihua.common.model.vos.community.microCommercialStreet.VerifiedReturnVO; import com.panzhihua.common.service.auth.TokenService; import com.panzhihua.common.service.community.CommunityService; import com.panzhihua.common.service.user.UserService; import com.panzhihua.common.validated.AddGroup; import com.panzhihua.common.validated.PutGroup; import com.panzhihua.shop_backstage.aop.CheckMcsMerchantExpiration; import com.panzhihua.shop_backstage.config.WxMaConfiguration; import com.panzhihua.shop_backstage.model.request.LoginRequest; import com.panzhihua.shop_backstage.model.vos.LoginBody; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import java.util.List; import static java.util.Objects.nonNull; /** * @title: MicroCommercialStreetApi @@ -91,6 +93,76 @@ private TokenService tokenService; @Resource private UserService userService; @Resource private WxMaConfiguration wxMaConfiguration; @ApiOperation(value = "H5授权登录", response = LoginReturnVO.class) @PostMapping("/auth/login") public R mcsAuthLogin(@RequestBody LoginRequest loginRequest) { String code = loginRequest.getCode(); if (ObjectUtils.isEmpty(code)) { return R.fail("缺少登录参数"); } log.info(code); WxMaService maService = wxMaConfiguration.getMaH5Service(); WxMaJscode2SessionResult sessionInfo = null; try { sessionInfo = maService.getUserService().getSessionInfo(code); } catch (Exception e) { log.error("微信登录失败【{}】", e.getMessage()); if (code.equals("22")) { sessionInfo = new WxMaJscode2SessionResult(); sessionInfo.setOpenid("88888888"); sessionInfo.setSessionKey("9999999"); } else { return R.fail("微信登录失败"); } } log.info("微信登录成功【{}】", JSONObject.toJSONString(sessionInfo)); log.info("loginRequest参数【{}】", JSONObject.toJSONString(loginRequest)); String openid = sessionInfo.getOpenid(); R r = userService.getMcsUserByOpenId(openid); if (R.isOk(r) && nonNull(r.getData())) { McsLoginUserInfoVO loginUserInfoVO = JSONObject.parseObject(JSONObject.toJSONString(r.getData()), McsLoginUserInfoVO.class); return tokenService.loginMcsUser(loginUserInfoVO.getAccount(), loginUserInfoVO.getPlaintextPassword()); } LoginReturnVO loginReturnVO = new LoginReturnVO(); loginReturnVO.setOpenId(openid); return R.ok(loginReturnVO); } @ApiOperation(value = "获取绑定验证码") @ApiImplicitParams({ @ApiImplicitParam(name = "phone", value = "手机号", required = true) }) @GetMapping("/bind/verifyCode") public R getBindVerifyCode(@RequestParam("phone") String phone) { String clientIP = this.getRequest().getHeader("X-Real-IP"); log.info("获取验证码用户ip信息【{}】", clientIP); try { return userService.sendMessageCode(phone, clientIP, "MCS_BIND_WITH_PHONE", 5, 5 * 60); } catch (Exception e) { return R.fail("获取失败"); } } @ApiOperation(value = "微信授权-绑定手机号", response = LoginReturnVO.class) @PostMapping("/bindPhone") public R bindOrAddMcsUser(@RequestBody @Valid BindUserPhoneDTO bindUserPhoneDTO) { R r = userService.bindOrAddMcsUser(bindUserPhoneDTO); Boolean isValid = false; if (R.isOk(r) && r.getData() != null) { McsLoginUserInfoVO loginUserInfoVO = JSONObject.parseObject(JSONObject.toJSONString(r.getData()), McsLoginUserInfoVO.class); isValid = loginUserInfoVO.getStatus() == 1; if (isValid) { R result = tokenService.loginMcsUser(loginUserInfoVO.getAccount(), loginUserInfoVO.getPlaintextPassword()); return result; } else { return R.fail("账号被禁用"); } } return R.fail(r.getMsg()); } @ApiOperation(value = "微商业街商家后台登录", response = LoginReturnVO.class) @PostMapping("/merchant/login") @@ -141,14 +213,14 @@ @ApiOperation(value = "获取登录验证码") @ApiImplicitParams({ @ApiImplicitParam(name = "phone", value = "手机号", required = true), @ApiImplicitParam(paramType = "header", name = "X-Real-IP", example = "192.168.1.1", value = "用户ip") @ApiImplicitParam(name = "phone", value = "手机号", required = true) }) @GetMapping("/verifyCode") public R loginWithPhone(@RequestParam("phone") String phone, @RequestHeader(value = "X-Real-IP", required = false) String clientIP) { public R getLoginVerifyCode(@RequestParam("phone") String phone) { String clientIP = this.getRequest().getHeader("X-Real-IP"); log.info("获取验证码用户ip信息【{}】", clientIP); try { return userService.sendMessageCodeForLogin(phone, clientIP, "MCS_LOGIN_WITH_PHONE", 5, 5 * 60); return userService.sendMessageCode(phone, clientIP, "MCS_LOGIN_WITH_PHONE", 5, 5 * 60); } catch (Exception e) { return R.fail("获取失败"); } springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/config/WxH5Properties.java
New file @@ -0,0 +1,58 @@ package com.panzhihua.shop_backstage.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import lombok.Data; /** * @program: springcloud_k8s_panzhihuazhihuishequ * @description: 微信配置 * @author: huang.hongfa weixin hhf9596 qq 959656820 * @create: 2020-11-23 14:52 **/ @Data @Component @ConfigurationProperties(prefix = "wx.h5") public class WxH5Properties { /** * 设置微信小程序的appid */ private String appid; /** * 设置微信小程序的Secret */ private String secret; /** * 设置微信小程序消息服务器配置的token */ private String token; /** * 设置微信小程序消息服务器配置的EncodingAESKey */ private String aesKey; /** * 消息格式,XML或者JSON */ private String msgDataFormat; /** * 商户号 */ private String mchId; /** * 微信支付密钥 */ private String payKey; /** * 微信支付回调地址 */ private String notifyUrl; } springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/config/WxMaConfiguration.java
New file @@ -0,0 +1,34 @@ package com.panzhihua.shop_backstage.config; import javax.annotation.Resource; import org.springframework.stereotype.Component; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; import lombok.extern.slf4j.Slf4j; /** * @program: springcloud_k8s_panzhihuazhihuishequ * @description: wexin * @author: huang.hongfa weixin hhf9596 qq 959656820 * @create: 2020-11-23 15:07 **/ @Slf4j @Component public class WxMaConfiguration { @Resource private WxH5Properties wxH5Properties; public WxMaService getMaH5Service() { WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); config.setAppid(wxH5Properties.getAppid()); config.setSecret(wxH5Properties.getSecret()); config.setMsgDataFormat(wxH5Properties.getMsgDataFormat()); WxMaService wxMaService = new WxMaServiceImpl(); wxMaService.setWxMaConfig(config); return wxMaService; } } springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/model/request/LoginRequest.java
New file @@ -0,0 +1,36 @@ package com.panzhihua.shop_backstage.model.request; import cn.binarywang.wx.miniapp.bean.WxMaUserInfo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @program: springcloud_k8s_panzhihuazhihuishequ * @description: 微信登录 * @author: huang.hongfa weixin hhf9596 qq 959656820 * @create: 2020-11-23 14:12 **/ @Data @ApiModel(value = "小程序登录") public class LoginRequest { @ApiModelProperty(name = "code", value = "登录时获取的 code") String code; @ApiModelProperty(name = "signature", value = "使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息") String signature; @ApiModelProperty(name = "rawData", value = "不包括敏感信息的原始数据字符串,用于计算签名") String rawData; @ApiModelProperty(name = "encryptedData", value = "包括敏感数据在内的完整用户信息的加密数据") String encryptedData; @ApiModelProperty(name = "iv", value = "加密算法的初始向量") String iv; @ApiModelProperty(name = "userInfo", value = "用户基本信息") WxMaUserInfo userInfo; }