From 7e9478979386a627bd079411ace960e5cee3f1b6 Mon Sep 17 00:00:00 2001 From: hupeng Date: Fri, 7 Feb 2020 19:27:28 +0800 Subject: [PATCH] =?UTF-8?q?yshop1.9.5,H5=E6=96=B0=E5=A2=9E=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E5=8F=B7=E7=BB=91=E5=AE=9A,=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E7=AE=A1=E7=90=86=E7=AD=89=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=85=B6=E4=BB=96bug,=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E8=AF=B7=E7=99=BB=E9=99=86=E6=BC=94=E7=A4=BA=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E6=9F=A5=E7=9C=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/security/rest/AuthController.java | 7 +- .../security/rest/param/LoginParam.java | 2 +- .../security/rest/param/VerityParam.java | 1 - .../user/web/controller/UserController.java | 19 +++ .../modules/user/web/param/UserEditParam.java | 21 +++ .../web/controller/WxMaUserController.java | 128 ++++++++++++++---- .../wechat/web/param/BindPhoneParam.java | 21 +++ .../wechat/web/param/WxPhoneParam.java | 23 ++++ 8 files changed, 195 insertions(+), 27 deletions(-) create mode 100644 yshop-api/src/main/java/co/yixiang/modules/user/web/param/UserEditParam.java create mode 100644 yshop-api/src/main/java/co/yixiang/modules/wechat/web/param/BindPhoneParam.java create mode 100644 yshop-api/src/main/java/co/yixiang/modules/wechat/web/param/WxPhoneParam.java diff --git a/yshop-api/src/main/java/co/yixiang/modules/security/rest/AuthController.java b/yshop-api/src/main/java/co/yixiang/modules/security/rest/AuthController.java index 09e45e69..f72b71ca 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/security/rest/AuthController.java +++ b/yshop-api/src/main/java/co/yixiang/modules/security/rest/AuthController.java @@ -410,6 +410,7 @@ public class AuthController { public ApiResult verify(@Validated @RequestBody VerityParam param) { Boolean isTest = true; YxUser yxUser = userService.findByName(param.getPhone()); + if(param.getType() == null) param.setType("bind"); if (param.getType().equals("register") && ObjectUtil.isNotNull(yxUser)) { return ApiResult.fail("手机号已注册"); } @@ -452,10 +453,12 @@ public class AuthController { @PostMapping("/register") @ApiOperation(value = "H5注册新用户", notes = "H5注册新用户") public ApiResult register(@Validated @RequestBody RegParam param) { - String code = redisUtils.get("code_" + param.getAccount()).toString(); - if (StrUtil.isEmpty(code)) { + + Object codeObj = redisUtils.get("code_" + param.getAccount()); + if(codeObj == null){ return ApiResult.fail("请先获取验证码"); } + String code = codeObj.toString(); if (!StrUtil.equals(code, param.getCaptcha())) { return ApiResult.fail("验证码错误"); diff --git a/yshop-api/src/main/java/co/yixiang/modules/security/rest/param/LoginParam.java b/yshop-api/src/main/java/co/yixiang/modules/security/rest/param/LoginParam.java index cda7632f..9a83a563 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/security/rest/param/LoginParam.java +++ b/yshop-api/src/main/java/co/yixiang/modules/security/rest/param/LoginParam.java @@ -7,7 +7,7 @@ import javax.validation.constraints.NotBlank; /** * @ClassName LoginParam * @Author hupeng <610796224@qq.com> - * @Date 2020/02/15 + * @Date 2020/01/15 **/ @Data public class LoginParam { diff --git a/yshop-api/src/main/java/co/yixiang/modules/security/rest/param/VerityParam.java b/yshop-api/src/main/java/co/yixiang/modules/security/rest/param/VerityParam.java index 25db7548..2b362d27 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/security/rest/param/VerityParam.java +++ b/yshop-api/src/main/java/co/yixiang/modules/security/rest/param/VerityParam.java @@ -14,6 +14,5 @@ public class VerityParam { @NotBlank(message = "手机号必填") private String phone; - @NotBlank private String type; } diff --git a/yshop-api/src/main/java/co/yixiang/modules/user/web/controller/UserController.java b/yshop-api/src/main/java/co/yixiang/modules/user/web/controller/UserController.java index d1ad7521..c71c0023 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/user/web/controller/UserController.java +++ b/yshop-api/src/main/java/co/yixiang/modules/user/web/controller/UserController.java @@ -7,10 +7,12 @@ import co.yixiang.common.web.controller.BaseController; import co.yixiang.modules.order.service.YxStoreOrderService; import co.yixiang.modules.shop.service.YxStoreProductRelationService; import co.yixiang.modules.shop.service.YxSystemGroupDataService; +import co.yixiang.modules.user.entity.YxUser; import co.yixiang.modules.user.service.YxSystemUserLevelService; import co.yixiang.modules.user.service.YxUserBillService; import co.yixiang.modules.user.service.YxUserService; import co.yixiang.modules.user.service.YxUserSignService; +import co.yixiang.modules.user.web.param.UserEditParam; import co.yixiang.modules.user.web.vo.YxSystemUserLevelQueryVo; import co.yixiang.modules.user.web.vo.YxUserQueryVo; import co.yixiang.utils.SecurityUtils; @@ -21,6 +23,7 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.LinkedHashMap; @@ -219,6 +222,22 @@ public class UserController extends BaseController { } + @PostMapping("/user/edit") + @ApiOperation(value = "用户修改信息",notes = "用修改信息") + public ApiResult edit(@Validated @RequestBody UserEditParam param){ + int uid = SecurityUtils.getUserId().intValue(); + + YxUser yxUser = new YxUser(); + yxUser.setAvatar(param.getAvatar()); + yxUser.setNickname(param.getNickname()); + yxUser.setUid(uid); + + yxUserService.updateById(yxUser); + + return ApiResult.ok("修改成功"); + } + + } diff --git a/yshop-api/src/main/java/co/yixiang/modules/user/web/param/UserEditParam.java b/yshop-api/src/main/java/co/yixiang/modules/user/web/param/UserEditParam.java new file mode 100644 index 00000000..a39835d5 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/user/web/param/UserEditParam.java @@ -0,0 +1,21 @@ +package co.yixiang.modules.user.web.param; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * @ClassName UserEditParam + * @Author hupeng <610796224@qq.com> + * @Date 2020/02/07 + **/ +@Data +public class UserEditParam implements Serializable { + @NotBlank(message = "请上传头像") + private String avatar; + @NotBlank(message = "请填写昵称") + private String nickname; + + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/wechat/web/controller/WxMaUserController.java b/yshop-api/src/main/java/co/yixiang/modules/wechat/web/controller/WxMaUserController.java index feef2c25..d78c58ba 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/wechat/web/controller/WxMaUserController.java +++ b/yshop-api/src/main/java/co/yixiang/modules/wechat/web/controller/WxMaUserController.java @@ -1,47 +1,129 @@ package co.yixiang.modules.wechat.web.controller; import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; +import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; +import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; +import co.yixiang.annotation.AnonymousAccess; +import co.yixiang.common.api.ApiResult; +import co.yixiang.exception.ErrorRequestException; +import co.yixiang.modules.notify.NotifyType; +import co.yixiang.modules.notify.SmsResult; +import co.yixiang.modules.security.rest.param.VerityParam; +import co.yixiang.modules.user.entity.YxUser; import co.yixiang.modules.user.service.YxUserService; import co.yixiang.modules.user.service.YxWechatUserService; +import co.yixiang.modules.user.web.vo.YxUserQueryVo; +import co.yixiang.modules.wechat.web.param.BindPhoneParam; +import co.yixiang.modules.wechat.web.param.WxPhoneParam; +import co.yixiang.mp.utils.JsonUtils; +import co.yixiang.utils.RedisUtil; +import co.yixiang.utils.RedisUtils; +import co.yixiang.utils.SecurityUtils; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.aliyuncs.CommonResponse; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import me.chanjar.weixin.common.error.WxErrorException; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; /** - * 微信小程序用户接口 - * - * @author xuwenbo + * @author hupeng + * @date 2020/02/07 */ @RestController @RequiredArgsConstructor(onConstructor = @__(@Autowired)) -@Api(value = "微信小程序", tags = "微信小程序", description = "微信小程序") +@Api(value = "微信其他", tags = "微信其他", description = "微信其他") public class WxMaUserController { + private final WxMaService wxMaService; private final YxWechatUserService wechatUserService; private final YxUserService userService; + private final RedisUtils redisUtils; -// /** -// *
-//     * 获取用户绑定手机号信息
-//     * 
-// */ -// @GetMapping("/phone") -// public String phone(String sessionKey, String signature, -// String rawData, String encryptedData, String iv) { -// -// // 用户信息校验 -// if (!wxMaService.getUserService().checkUserInfo(sessionKey, rawData, signature)) { -// return "user check failed"; -// } -// -// // 解密 -// WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService().getPhoneNoInfo(sessionKey, encryptedData, iv); -// -// return JsonUtils.toJson(phoneNoInfo); -// } + @PostMapping("/binding") + @ApiOperation(value = "公众号绑定手机号", notes = "公众号绑定手机号") + public ApiResult verify(@Validated @RequestBody BindPhoneParam param) { + + Object codeObj = redisUtils.get("code_" + param.getPhone()); + if(codeObj == null){ + return ApiResult.fail("请先获取验证码"); + } + String code = codeObj.toString(); + + + if (!StrUtil.equals(code, param.getCaptcha())) { + return ApiResult.fail("验证码错误"); + } + + int uid = SecurityUtils.getUserId().intValue(); + YxUserQueryVo userQueryVo = userService.getYxUserById(uid); + if(StrUtil.isNotBlank(userQueryVo.getPhone())){ + return ApiResult.fail("您的账号已经绑定过手机号码"); + } + + YxUser yxUser = new YxUser(); + yxUser.setPhone(param.getPhone()); + yxUser.setUid(uid); + userService.updateById(yxUser); + + return ApiResult.ok("绑定成功"); + + } + + + + @PostMapping("/wxapp/binding") + @ApiOperation(value = "小程序绑定手机号", notes = "小程序绑定手机号") + public ApiResult phone(@Validated @RequestBody WxPhoneParam param) { + + int uid = SecurityUtils.getUserId().intValue(); + YxUserQueryVo userQueryVo = userService.getYxUserById(uid); + if(StrUtil.isNotBlank(userQueryVo.getPhone())){ + return ApiResult.fail("您的账号已经绑定过手机号码"); + } + + //读取redis配置 + String appId = RedisUtil.get("wxapp_appId"); + String secret = RedisUtil.get("wxapp_secret"); + if (StrUtil.isBlank(appId) || StrUtil.isBlank(secret)) { + throw new ErrorRequestException("请先配置小程序"); + } + WxMaDefaultConfigImpl wxMaConfig = new WxMaDefaultConfigImpl(); + wxMaConfig.setAppid(appId); + wxMaConfig.setSecret(secret); + wxMaService.setWxMaConfig(wxMaConfig); + try { + WxMaJscode2SessionResult session = wxMaService.getUserService() + .getSessionInfo(param.getCode()); + + // 解密 + WxMaPhoneNumberInfo phoneNoInfo = wxMaService.getUserService() + .getPhoneNoInfo(session.getSessionKey(), param.getEncryptedData(), param.getIv()); + + YxUser yxUser = new YxUser(); + yxUser.setPhone(phoneNoInfo.getPhoneNumber()); + yxUser.setUid(uid); + userService.updateById(yxUser); + } catch (WxErrorException e) { + e.printStackTrace(); + } + + + return ApiResult.ok("绑定成功"); + } diff --git a/yshop-api/src/main/java/co/yixiang/modules/wechat/web/param/BindPhoneParam.java b/yshop-api/src/main/java/co/yixiang/modules/wechat/web/param/BindPhoneParam.java new file mode 100644 index 00000000..f799d1a9 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/wechat/web/param/BindPhoneParam.java @@ -0,0 +1,21 @@ +package co.yixiang.modules.wechat.web.param; + +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +/** + * @ClassName BindPhoneParam + * @Author hupeng <610796224@qq.com> + * @Date 2020/2/7 + **/ +@Getter +@Setter +public class BindPhoneParam { + @NotBlank(message = "验证码必填") + private String captcha; + + @NotBlank(message = "手机号必填") + private String phone; +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/wechat/web/param/WxPhoneParam.java b/yshop-api/src/main/java/co/yixiang/modules/wechat/web/param/WxPhoneParam.java new file mode 100644 index 00000000..33a5dd5b --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/wechat/web/param/WxPhoneParam.java @@ -0,0 +1,23 @@ +package co.yixiang.modules.wechat.web.param; + +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; + +/** + * @ClassName WxPhoneParam + * @Author hupeng <610796224@qq.com> + * @Date 2020/02/07 + **/ +@Getter +@Setter +public class WxPhoneParam { + @NotBlank(message = "code参数缺失") + private String code; + + private String encryptedData; + + private String iv; +}