From d9de7f85f504eae805cfc9be1573bd5c24cbc62f Mon Sep 17 00:00:00 2001 From: clunt Date: Mon, 23 May 2022 18:02:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=8B=E6=9C=BA=E5=8F=B7=E6=8E=88=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ghy/web/controller/tool/WxController.java | 47 +++++++++++++++++++ .../com/ghy/common/enums/UserPhoneEnum.java | 33 +++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 ghy-common/src/main/java/com/ghy/common/enums/UserPhoneEnum.java diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/tool/WxController.java b/ghy-admin/src/main/java/com/ghy/web/controller/tool/WxController.java index c657505d..41bf872f 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/tool/WxController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/tool/WxController.java @@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSONObject; import com.ghy.common.config.WxConfig; import com.ghy.common.core.controller.BaseController; import com.ghy.common.core.domain.AjaxResult; +import com.ghy.common.enums.UserPhoneEnum; +import com.ghy.common.exception.ServiceException; import com.ghy.common.utils.ExceptionUtil; import com.ghy.common.utils.StringUtils; import com.ghy.common.utils.WxUtils; @@ -109,6 +111,27 @@ public class WxController extends BaseController { } } + @GetMapping("/auth/phone") + @ResponseBody + public AjaxResult authPhone(HttpServletRequest request){ + try { + String code = request.getHeader("code"); + String from = request.getHeader("from"); + String deptId = request.getHeader("deptId"); + SysDeptConfig sysDeptConfig = sysDeptConfigService.selectByDeptId(Long.parseLong(deptId)); + String accessToken; + if("customer".equals(from)){ + accessToken = getAccessToken(sysDeptConfig.getWxAppId(), sysDeptConfig.getWxSecret()); + }else { + accessToken = getAccessToken(sysDeptConfig.getServWxAppId(), sysDeptConfig.getServWxSecret()); + } + return AjaxResult.success(getPhoneNumber(code, accessToken)); + }catch (Exception e){ + logger.error(ExceptionUtil.getExceptionMessage(e)); + return AjaxResult.error(e.getMessage()); + } + } + @GetMapping("/auth") @ResponseBody public AjaxResult auth(HttpServletRequest request) { @@ -136,6 +159,30 @@ public class WxController extends BaseController { return wxUser.getString("openid"); } + private static String getAccessToken(String appId, String appSecret){ + String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+ appId +"&secret=" + appSecret; + String result = HttpUtils.sendGet(url); + String code = JSONObject.parseObject(result).getString("errcode"); + if("0".equals(code)){ + return JSONObject.parseObject(result).getString("access_token"); + }else { + throw new ServiceException("获取授权码异常"); + } + } + + private static String getPhoneNumber(String code, String accessToken){ + JSONObject params = new JSONObject(); + params.put("code", code); + String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + accessToken; + String result = HttpUtils.sendSSLPost(url, params.toString()); + String errCode = JSONObject.parseObject(result).getString("errCode"); + if("0".equals(errCode)){ + return JSONObject.parseObject(result).getJSONObject("phoneInfo").getString("purePhoneNumber"); + }else { + throw new ServiceException("获取手机号码异常"); + } + } + /** * 验证微信签名 */ diff --git a/ghy-common/src/main/java/com/ghy/common/enums/UserPhoneEnum.java b/ghy-common/src/main/java/com/ghy/common/enums/UserPhoneEnum.java new file mode 100644 index 00000000..2cce0c3f --- /dev/null +++ b/ghy-common/src/main/java/com/ghy/common/enums/UserPhoneEnum.java @@ -0,0 +1,33 @@ +package com.ghy.common.enums; + +import org.springframework.beans.factory.annotation.Autowired; + +public enum UserPhoneEnum { + + + CUSTOMER_PHONE("customer"){ + @Override + public Object getPhone(Long customerId) { + return null; + } + }, + WORKER_PHONE("worker"){ + @Override + public Object getPhone(Long workerId) { + return null; + } + }; + + private String code; + + UserPhoneEnum(String code){ + this.code = code; + } + + public String getCode() { + return code; + } + + public abstract Object getPhone(Long userId); + +}