diff --git a/user-client/src/main/java/com/hp/user/client/entity/AccountVO.java b/user-client/src/main/java/com/hp/user/client/entity/AccountVO.java index a4cdc09..ff4c2c1 100644 --- a/user-client/src/main/java/com/hp/user/client/entity/AccountVO.java +++ b/user-client/src/main/java/com/hp/user/client/entity/AccountVO.java @@ -53,6 +53,10 @@ public class AccountVO{ * 对应角色Id */ private String roleId; + /** + * 微信opeanid + */ + private String wxOpeanId; public AccountVO(){} @@ -149,4 +153,14 @@ public class AccountVO{ public void setRoleId(String roleId) { this.roleId = roleId; } + + public String getWxOpeanId() { + return wxOpeanId; + } + + public void setWxOpeanId(String wxOpeanId) { + this.wxOpeanId = wxOpeanId; + } + + } diff --git a/user-client/src/main/java/com/hp/user/client/entity/DataResult.java b/user-client/src/main/java/com/hp/user/client/entity/DataResult.java new file mode 100644 index 0000000..e0db28a --- /dev/null +++ b/user-client/src/main/java/com/hp/user/client/entity/DataResult.java @@ -0,0 +1,21 @@ +package com.hp.user.client.entity; + +public class DataResult extends Result{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + private T data; + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + +} diff --git a/user-client/src/main/java/com/hp/user/client/entity/ListResult.java b/user-client/src/main/java/com/hp/user/client/entity/ListResult.java new file mode 100644 index 0000000..e3294d5 --- /dev/null +++ b/user-client/src/main/java/com/hp/user/client/entity/ListResult.java @@ -0,0 +1,21 @@ +package com.hp.user.client.entity; + +import java.util.List; + +public class ListResult extends Result{ + + /** + * + */ + private static final long serialVersionUID = 1L; + private List dataList; + + public List getDataList() { + return dataList; + } + + public void setDataList(List dataList) { + this.dataList = dataList; + } + +} diff --git a/user-client/src/main/java/com/hp/user/client/entity/PageResult.java b/user-client/src/main/java/com/hp/user/client/entity/PageResult.java new file mode 100644 index 0000000..637bceb --- /dev/null +++ b/user-client/src/main/java/com/hp/user/client/entity/PageResult.java @@ -0,0 +1,9 @@ +package com.hp.user.client.entity; + +import java.util.List; + +public class PageResult extends Result{ + + private List dataList; + +} diff --git a/user-client/src/main/java/com/hp/user/client/entity/Result.java b/user-client/src/main/java/com/hp/user/client/entity/Result.java new file mode 100644 index 0000000..a826b47 --- /dev/null +++ b/user-client/src/main/java/com/hp/user/client/entity/Result.java @@ -0,0 +1,36 @@ +package com.hp.user.client.entity; + +import java.io.Serializable; + +public class Result implements Serializable{ + /** + * + */ + private static final long serialVersionUID = 1L; + /** + * 错误码,如果没有错误为null + */ + private String code; + /** + * 错误信息,如果没有错误为null + * + */ + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + +} diff --git a/user-client/src/main/java/com/hp/user/client/service/AccountService.java b/user-client/src/main/java/com/hp/user/client/service/AccountService.java index 0e27b87..6ac6db9 100644 --- a/user-client/src/main/java/com/hp/user/client/service/AccountService.java +++ b/user-client/src/main/java/com/hp/user/client/service/AccountService.java @@ -1,6 +1,7 @@ package com.hp.user.client.service; import com.hp.user.client.entity.AccountVO; +import com.hp.user.client.entity.DataResult; /** *

@@ -43,6 +44,14 @@ public interface AccountService { /** * 微信授权登陆 */ - public void wxAuthorization(); + public DataResult wxAuthorization(AccountVO account,String wxCode); + + /** + * 通过微信注册 + * @param account + * @param verificationCode 验证码 + * @return + */ + public DataResult wxRegister(AccountVO account,String verificationCode); } diff --git a/user-service/src/main/java/com/hp/user/service/constants/UserConstants.java b/user-service/src/main/java/com/hp/user/service/constants/UserConstants.java index 1105367..05a6c1e 100644 --- a/user-service/src/main/java/com/hp/user/service/constants/UserConstants.java +++ b/user-service/src/main/java/com/hp/user/service/constants/UserConstants.java @@ -10,5 +10,27 @@ public class UserConstants { * rediskey失效时间 */ public static int EXPIRE_SECONDS = 900; + + /** + * 微信开放平台二维码连接 + */ + public final static String OPEN_QRCODE_URL= "https://open.weixin.qq.com/connect/qrconnect?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_login&state=%s#wechat_redirect"; + + + /** + * 开放平台获取access_token地址 + */ + public final static String OPEN_ACCESS_TOKEN_URL="https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code"; + + + /** + * 获取用户信息 + */ + public final static String OPEN_USER_INFO_URL ="https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s"; + + public final static String WX_APPID = "wx405cd1f8a4a7c949"; + public final static String WX_SECRET = "1b5807ce618a43d2e0a02a4dc14dd952"; + + public final static String WX_GRANT_TYPE = "authorization_code"; } diff --git a/user-service/src/main/java/com/hp/user/service/controller/AuthenticationController.java b/user-service/src/main/java/com/hp/user/service/controller/AuthenticationController.java index 1c3a92f..86daeeb 100644 --- a/user-service/src/main/java/com/hp/user/service/controller/AuthenticationController.java +++ b/user-service/src/main/java/com/hp/user/service/controller/AuthenticationController.java @@ -6,14 +6,16 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.hp.user.client.entity.AccountVO; +import com.hp.user.client.entity.DataResult; import com.hp.user.client.service.AccountService; -import com.hp.user.service.entity.Account; +import com.hp.user.service.utils.HttpResult; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; @RestController @RequestMapping("/authentication") -@Api(value="身份认证") +@Api(tags="身份认证") public class AuthenticationController { @Autowired @@ -26,6 +28,7 @@ public class AuthenticationController { * @param verificationCode 验证码 */ @RequestMapping("/login") + @ApiOperation(value = "验证码登录", notes = "验证码登录", httpMethod = "POST") public void login(String phone,String verificationCode) { accountService.login(phone, verificationCode); } @@ -43,32 +46,39 @@ public class AuthenticationController { * 需要用户信息 */ @RequestMapping("/register") + @ApiOperation(value = "注册", notes = "注册", httpMethod = "POST") public void register(AccountVO account) { accountService.register(account); } - /** - * 微信注册 - * 需要用户信息 - */ - @RequestMapping("/wxRegister") - public void wxRegister() { - - } - /** * 绑定微信号 * @param userId * @param wxNumber */ @RequestMapping("/bingWx") + @ApiOperation(value = "绑定微信号", notes = "绑定微信号", httpMethod = "POST") public void bindWx(String userId,String wxNumber) { accountService.bindWx(userId, wxNumber); } @RequestMapping("/wxAuthorization") - public void wxAuthorization() { - + @ApiOperation(value = "微信认证登陆", notes = "微信认证登陆", httpMethod = "POST") + public DataResult wxAuthorization(AccountVO account,String code) { + DataResult result = accountService.wxAuthorization(account,code); + return result; + } + + /** + * 通过微信注册 + * @param account + * @param verificationCode + */ + @RequestMapping("/wxRegister") + @ApiOperation(value = "通过微信注册", notes = "通过微信注册", httpMethod = "POST") + public DataResult wxRegister(AccountVO account,String verificationCode) { + DataResult result = accountService.wxRegister(account, verificationCode); + return result; } diff --git a/user-service/src/main/java/com/hp/user/service/impl/AccountServiceImpl.java b/user-service/src/main/java/com/hp/user/service/impl/AccountServiceImpl.java index b27d596..ee5294d 100644 --- a/user-service/src/main/java/com/hp/user/service/impl/AccountServiceImpl.java +++ b/user-service/src/main/java/com/hp/user/service/impl/AccountServiceImpl.java @@ -4,17 +4,18 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.hp.user.client.entity.AccountVO; +import com.hp.user.client.entity.DataResult; import com.hp.user.client.service.AccountService; import com.hp.user.client.service.MessageService; +import com.hp.user.service.constants.UserConstants; import com.hp.user.service.dao.AccountMapper; import com.hp.user.service.entity.Account; +import com.hp.user.service.utils.WeixinSignUtil; import java.util.HashMap; import java.util.Map; -import javax.servlet.http.HttpUtils; - -import org.apache.commons.codec.binary.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -82,7 +83,8 @@ public class AccountServiceImpl implements AccountService { if(checkPhone(accountVo.getPhone())) { Account account = new Account(); BeanUtils.copyProperties(accountVo, account); - account.setUserId(IdWorker.getId()); + Long id = IdWorker.getId(); + account.setUserId(id.toString()); accountMapper.insert(account); } }catch(Exception e) { @@ -94,9 +96,9 @@ public class AccountServiceImpl implements AccountService { @Override public void bindWx(String userIdStr, String wxNumber) { try { - Long userId = Long.parseLong(userIdStr); +// Long userId = Long.parseLong(userIdStr); Account account = new Account(); - account.setUserId(userId); + account.setUserId(userIdStr); account.setWxNumber(wxNumber); account.setWxNumber(wxNumber); accountMapper.updateById(account); @@ -107,28 +109,69 @@ public class AccountServiceImpl implements AccountService { } @Override - public void wxAuthorization() { + public DataResult wxAuthorization(AccountVO account,String wxCode) { + DataResult result = new DataResult(); + JSONObject data = null; try { - String wxLoginAppid = ""; - String wxLoginSecret = ""; - String jsCode = ""; - String wxLoginGrantType = ""; - String wxLoginUrl = ""; -// userVO.getCode() - Map param = new HashMap<>(); - param.put("appid", wxLoginAppid); - param.put("secret", wxLoginSecret); - param.put("js_code", jsCode); - param.put("grant_type", wxLoginGrantType); - // 发送请求 -// String wxResult = HttpUtils.doGet(wxLoginUrl, param); - String wxResult = ""; - JSONObject jsonObject = JSONObject.parseObject(wxResult); + data = WeixinSignUtil.getCode2Session(wxCode); + String errmsg = data.getString("errmsg"); + if(null != errmsg) { + result.setCode("-1"); + result.setCode(errmsg); + return result; + } + String openid = data.getString("openid"); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("wx_opean_id", openid); + Account findAccount = accountMapper.selectOne(queryWrapper); + BeanUtils.copyProperties(findAccount, account); + if(null != findAccount) { + result.setCode("-1"); + result.setCode("微信需要绑定"); + }else { + result.setData(account); + } + }catch(Exception e) { - + result.setCode("-1"); + result.setCode("系统出现问题"); } + return result; - + } + + @Override + public DataResult wxRegister(AccountVO accountVO, String verificationCode) { + DataResult result = new DataResult(); + try { + if(StringUtils.isBlank(accountVO.getPhone())) { + if(checkPhone(accountVO.getPhone())) { + + String code = messageService.getVerificationCode(accountVO.getPhone()); + if(StringUtils.equals(verificationCode, code)) { + } + Account account = new Account(); + BeanUtils.copyProperties(accountVO, account); + Long id = IdWorker.getId(); + account.setUserId(id.toString()); + accountMapper.insert(account); + BeanUtils.copyProperties(account, accountVO); + result.setData(accountVO); + }else { + result.setCode("-1"); + result.setCode("手机号码已经存在"); + return result; + } + }else { + result.setCode("-1"); + result.setCode("手机号不能为空"); + return result; + } + + }catch(Exception e) { + + } + return result; } } diff --git a/user-service/src/main/java/com/hp/user/service/utils/HttpRequestUtil.java b/user-service/src/main/java/com/hp/user/service/utils/HttpRequestUtil.java new file mode 100644 index 0000000..b24ea38 --- /dev/null +++ b/user-service/src/main/java/com/hp/user/service/utils/HttpRequestUtil.java @@ -0,0 +1,74 @@ +package com.hp.user.service.utils; + +import java.net.URLDecoder; + +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; + +/** + * http请求工具类 + * @author yeqid + * @since 2020/12/01 + * + */ +public class HttpRequestUtil { + + /** + * post请求 + * @param url url地址 + * @return + */ + public static String httpPost(String url){ + //post请求返回结果 + DefaultHttpClient httpClient = new DefaultHttpClient(); + HttpPost method = new HttpPost(url); + String str = ""; + try { + HttpResponse result = httpClient.execute(method); + url = URLDecoder.decode(url, "UTF-8"); + /**请求发送成功,并得到响应**/ + if (result.getStatusLine().getStatusCode() == 200) { + try { + /**读取服务器返回过来的json字符串数据**/ + str = EntityUtils.toString(result.getEntity(),"UTF-8"); + } catch (Exception e) { +// logger.error("post请求提交失败:" + url, e); + } + } + } catch (Exception e) { +// logger.error("post请求提交失败:" + url, e); + } + return str; + } + + + /** + * 发送get请求 + * @param url 路径 + * @return + */ + public static String httpGet(String url){ + //get请求返回结果 + String strResult = null; + try { + DefaultHttpClient client = new DefaultHttpClient(); + //发送get请求 + HttpGet request = new HttpGet(url); + HttpResponse response = client.execute(request); + + /**请求发送成功,并得到响应**/ + if (response.getStatusLine().getStatusCode() == org.apache.http.HttpStatus.SC_OK) { + /**读取服务器返回过来的json字符串数据**/ + strResult = EntityUtils.toString(response.getEntity(),"UTF-8"); + } else { +// logger.error("get请求提交失败:" + url); + } + } catch (Exception e) { +// logger.error("get请求提交失败:" + url, e); + } + return strResult; + } +} diff --git a/user-service/src/main/java/com/hp/user/service/utils/WeixinSignUtil.java b/user-service/src/main/java/com/hp/user/service/utils/WeixinSignUtil.java new file mode 100644 index 0000000..56ac399 --- /dev/null +++ b/user-service/src/main/java/com/hp/user/service/utils/WeixinSignUtil.java @@ -0,0 +1,62 @@ +package com.hp.user.service.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.hp.user.service.constants.UserConstants; + +/** + * 微信工具类 + * @author yeqid + *@sincs 2020/12/01 + */ +public class WeixinSignUtil { + /** + * 网页 + */ + + + public static JSONObject getAccessToken(String code){ +// String url = "https://api.weixin.qq.com/sns/oauth2/access_token?"; +// GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET + String url = "https://api.weixin.qq.com/cgi-bin/token?"; + String params = "grant_type=client_credential&&appid="+UserConstants.WX_APPID+"&secret="+UserConstants.WX_SECRET; +// String params = "appid="+UserConstants.WX_APPID+"&secret="+UserConstants.WX_SECRET+"&code="+code+"&grant_type=authorization_code"; + String result = HttpRequestUtil.httpGet(url + params); + JSONObject data = JSON.parseObject(result); + + return data; + } + + public static JSONObject getValidateData(String access_token,String openid){ + String url = "https://api.weixin.qq.com/sns/auth?access_token=" + access_token + "&openid=" + openid; + String result = HttpRequestUtil.httpGet(url); + JSONObject data = JSON.parseObject(result); + + return data; + } + + public static JSONObject getRefreshToken(String refresh_token){ + String url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" + UserConstants.WX_APPID + "&grant_type=refresh_token&refresh_token=" + refresh_token; + String result = HttpRequestUtil.httpGet(url); + JSONObject data = JSON.parseObject(result); + + return data; + } + + public static JSONObject getUserInfo(String access_token,String openid){ + String url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid + "&lang=zh_CN"; + String result = HttpRequestUtil.httpGet(url); + JSONObject data = JSON.parseObject(result); + + return data; + } + + public static JSONObject getCode2Session(String code) { + String url = "https://api.weixin.qq.com/sns/jscode2session?"; + String params = "appid="+UserConstants.WX_APPID+"&secret="+UserConstants.WX_SECRET+"&js_code="+code+"&grant_type=authorization_code"; + String result = HttpRequestUtil.httpGet(url + params); + JSONObject data = JSON.parseObject(result); + + return data; + } +}