diff --git a/src/main/java/com/sqx/modules/app/controller/app/AppLoginController.java b/src/main/java/com/sqx/modules/app/controller/app/AppLoginController.java index a581bf0c..4e3ed94a 100644 --- a/src/main/java/com/sqx/modules/app/controller/app/AppLoginController.java +++ b/src/main/java/com/sqx/modules/app/controller/app/AppLoginController.java @@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.sqx.common.annotation.Debounce; import com.sqx.common.utils.Result; +import com.sqx.modules.app.annotation.Login; +import com.sqx.modules.app.dto.BindWxDTO; import com.sqx.modules.app.dto.LoginDTO; import com.sqx.modules.app.dto.RegisterDTO; import com.sqx.modules.app.dto.UserInviteDTO; @@ -168,6 +170,14 @@ public class AppLoginController { return userService.register(registerDTO); } + @Login + @PostMapping("/bindWx") + @ResponseBody + @Debounce(interval = 2500, value = "#code") + public Result bindWx(@RequestBody BindWxDTO bindWxDTO, @RequestHeader Long userId) { + return userService.bindWx(bindWxDTO, userId); + } + @PostMapping("/bindWxOpenPhone") @ApiOperation("微信公众号绑定手机号") public Result bindWxOpenPhone(Long userId,String phone,String msg){ diff --git a/src/main/java/com/sqx/modules/app/dto/BindWxDTO.java b/src/main/java/com/sqx/modules/app/dto/BindWxDTO.java new file mode 100644 index 00000000..af0a5eb9 --- /dev/null +++ b/src/main/java/com/sqx/modules/app/dto/BindWxDTO.java @@ -0,0 +1,14 @@ +package com.sqx.modules.app.dto; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +/** + * @author Administrator + */ +@Data +public class BindWxDTO { + @NotEmpty(message = "code不能为空") + private String code; +} diff --git a/src/main/java/com/sqx/modules/app/service/UserService.java b/src/main/java/com/sqx/modules/app/service/UserService.java index 4fedeb33..e4d25b01 100644 --- a/src/main/java/com/sqx/modules/app/service/UserService.java +++ b/src/main/java/com/sqx/modules/app/service/UserService.java @@ -238,4 +238,6 @@ public interface UserService extends IService { Result removeUserBlack(Long userId, Integer status); Map queryPayAndExtractInfo(); + + Result bindWx(BindWxDTO bindWxDTO, Long userId); } diff --git a/src/main/java/com/sqx/modules/app/service/impl/UserServiceImpl.java b/src/main/java/com/sqx/modules/app/service/impl/UserServiceImpl.java index 5260427b..dd1b5191 100644 --- a/src/main/java/com/sqx/modules/app/service/impl/UserServiceImpl.java +++ b/src/main/java/com/sqx/modules/app/service/impl/UserServiceImpl.java @@ -80,6 +80,7 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import weixin.popular.api.SnsAPI; +import weixin.popular.bean.sns.SnsToken; import weixin.popular.util.JsonUtil; import javax.servlet.http.HttpServletRequest; @@ -1824,4 +1825,28 @@ public class UserServiceImpl extends ServiceImpl implements return result; } + + @Override + public Result bindWx(BindWxDTO bindWxDTO, Long userId) { + //微信appid + CommonInfo one = commonInfoService.findOne(5); + //微信秘钥 + CommonInfo two = commonInfoService.findOne(21); + SnsToken snsToken = SnsAPI.oauth2AccessToken(one.getValue(), two.getValue(), bindWxDTO.getCode()); + String openid = snsToken.getOpenid(); + int count = count(new LambdaQueryWrapper().eq(UserEntity::getWxOpenId, openid)); + if (count > 0) { + return Result.error("该微信已被其他用户绑定"); + } + + UserEntity userEntity = getOne(new LambdaQueryWrapper().eq(UserEntity::getUserId, userId)); + if (StringUtils.isNotBlank(userEntity.getWxOpenId())) { + return Result.error("当前用户已绑定微信"); + } + + userEntity.setWxOpenId(openid); + userEntity.setUpdateTime(DateUtil.now()); + update(userEntity, new LambdaQueryWrapper().eq(UserEntity::getUserId, userId)); + return Result.success(); + } }