فهرست منبع

获取手机号

夏文涛 2 سال پیش
والد
کامیت
b6a92e9829

+ 5 - 1
src/main/java/com/template/api/WechatScanLoginControllerAPI.java

@@ -104,5 +104,9 @@ public interface WechatScanLoginControllerAPI {
     @RequestMapping(value = "/queryPhoneBook")
     @ResponseBody
     public CommonResult queryPhoneBook(@RequestParam Integer id);
-    
+
+    @RequestMapping(value = "/getWechatPhone")
+    @ResponseBody
+    CommonResult getWechatPhone(String code);
+
 }

+ 7 - 19
src/main/java/com/template/common/utils/TimeExchange.java

@@ -1,6 +1,7 @@
 package com.template.common.utils;
 
 import com.alibaba.druid.sql.visitor.functions.Char;
+import com.alibaba.fastjson.JSONObject;
 import com.template.controller.SmartClassController;
 import com.template.model.enumModel.eWeekStatu;
 import com.template.model.pojo.SmartUser;
@@ -788,25 +789,12 @@ public class TimeExchange {
     }
 
     public static void main(String[] args) {
-        // 创建list
-
-        List<Integer> list = new ArrayList<Integer>();
-
-        // 插入元素
-
-        list.add(2);
-
-        list.add(0);
-
-        list.add(3);
-
-        list.add(4);
-
-        list.add(1);
-
-
-
-        System.out.println(list.get(0));
+        String result = "{\"errcode\":0,\"errmsg\":\"ok\",\"phone_info\":{\"phoneNumber\":\"18320846714\",\"purePhoneNumber\":\"18320846714\",\"countryCode\":\"86\",\"watermark\":{\"timestamp\":1716975315,\"appid\":\"wx2fc3f45732fae5d3\"}}}";
+        JSONObject jsonObject = JSONObject.parseObject(result);
+        String errcode = String.valueOf(jsonObject.get("phone_info"));
+        JSONObject jsonErroObject = JSONObject.parseObject(errcode);
+        String purePhoneNumber = String.valueOf(jsonErroObject.get("purePhoneNumber"));
+        System.out.println(purePhoneNumber);
     }
 
 

+ 64 - 32
src/main/java/com/template/controller/WechatScanLoginController.java

@@ -1,5 +1,6 @@
 package com.template.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.pagehelper.PageHelper;
@@ -26,10 +27,8 @@ import com.template.model.tongji.*;
 import com.template.model.vo.AffiliateParentVo;
 import com.template.model.vo.LoginVO;
 import com.template.model.vo.WechatUserVo;
+import com.template.model.weixin.*;
 import com.template.model.weixin.AccessToken;
-import com.template.model.weixin.AuthorAndGroup;
-import com.template.model.weixin.HttpParame;
-import com.template.model.weixin.WechatUserUnionID;
 import com.template.services.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -136,7 +135,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
                     queryWrapper1.eq("user_id", user.getId());
                     List<SmartAuthority> query = smartAuthorityService.getAuthorByKey(queryWrapper1);
                     if (query.size() > 0) {
-                        return "redirect:" + HttpParame.FRONT_URI + "/#/wanzai/home?token=" + token+"&userhead="+userhead;
+                        return "redirect:" + HttpParame.FRONT_URI + "/#/wanzai/home?token=" + token + "&userhead=" + userhead;
                     } else {
                         return "redirect:" + HttpParame.FRONT_URI + "/#/login?message=" + URLEncoder.encode("无登录权限", "UTF-8");
                     }
@@ -204,7 +203,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
                     List<SmartAuthority> query = smartAuthorityService.getAuthorByKey(queryWrapper3);
                     if (query.size() > 0) {
                         String userhead = AesUtils.encrypt(String.valueOf(userc.get(0).getId()));
-                        return "redirect:" + HttpParame.FRONT_URI + "/#/wanzai/home?token=" + token+"&userhead="+userhead;
+                        return "redirect:" + HttpParame.FRONT_URI + "/#/wanzai/home?token=" + token + "&userhead=" + userhead;
                     } else {
                         return "redirect:" + HttpParame.FRONT_URI + "/#/login?message=" + URLEncoder.encode("无登录权限", "UTF-8");
                     }
@@ -214,7 +213,9 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
         return "redirect:" + HttpParame.FRONT_URI + "/#/login?message=" + URLEncoder.encode("系统异常", "UTF-8");
     }
 
-    /**===============================水电管理=================================**/
+    /**
+     * ===============================水电管理=================================
+     **/
     @Override
     @PassToken
     public String insertElecMeterDetail() throws Exception {
@@ -222,12 +223,12 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
         queryWrapper1.eq("deleted", 0);
         queryWrapper1.eq("meter_type", 1);
         List<SmartMeter> list = smartMeterService.list(queryWrapper1);
-        if (!list.isEmpty()){
+        if (!list.isEmpty()) {
             for (int i = 0; i < list.size(); i++) {
-                String msg = HttpsClient.get("http://iot.czrxdzonline.cn/api/dtu/find?deviceNum="+list.get(i).getMeterNo());
+                String msg = HttpsClient.get("http://iot.czrxdzonline.cn/api/dtu/find?deviceNum=" + list.get(i).getMeterNo());
                 JSONObject result = JSONObject.parseObject(msg);
                 Integer state = result.getInteger("Status");
-                if (state==1){
+                if (state == 1) {
                     Double lastRecord = 0.00;
                     QueryWrapper<SmartMeterDetail> queryWrapper2 = new QueryWrapper<>();
                     queryWrapper2.eq("deleted", 0);
@@ -235,7 +236,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
                     queryWrapper2.eq("meter_id", list.get(i).getId());
                     queryWrapper2.orderByDesc("id");
                     List<SmartMeterDetail> detailList = smartMeterDetailService.list(queryWrapper2);
-                    if (!detailList.isEmpty()){
+                    if (!detailList.isEmpty()) {
                         lastRecord = detailList.get(0).getMeterPowerRecord();
                     }
                     JSONObject data = result.getJSONObject("Data");
@@ -244,10 +245,10 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
                     smartMeterDetail.setMeterId(list.get(i).getId());
                     smartMeterDetail.setMeterType(1);
                     String display = elecData.getDisplay();
-                    smartMeterDetail.setMeterPowerRecord(Double.parseDouble(display)/Double.parseDouble("100"));
-                    smartMeterDetail.setMeterPower(Double.parseDouble(display)/Double.parseDouble("100")-lastRecord);
+                    smartMeterDetail.setMeterPowerRecord(Double.parseDouble(display) / Double.parseDouble("100"));
+                    smartMeterDetail.setMeterPower(Double.parseDouble(display) / Double.parseDouble("100") - lastRecord);
                     smartMeterDetail.setCreateTime(TimeExchange.StringToDate(elecData.getCommunication(), "yyyy-MM-dd HH:mm:ss"));
-                    logger.info("====="+smartMeterDetail.getMeterPowerRecord());
+                    logger.info("=====" + smartMeterDetail.getMeterPowerRecord());
                     smartMeterDetailService.insertSmartMeterDetail(smartMeterDetail);
                 }
             }
@@ -262,7 +263,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
         queryWrapper1.eq("deleted", 0);
         queryWrapper1.eq("meter_type", 0);
         List<SmartMeter> list = smartMeterService.list(queryWrapper1);
-        if (!list.isEmpty()){
+        if (!list.isEmpty()) {
             for (int i = 0; i < list.size(); i++) {
                 JSONObject jsonObject = new JSONObject();
                 jsonObject.put("type", "5");
@@ -270,7 +271,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
                 String msg = HttpsClient.sendJson("http://iot.czrxdzonline.cn/api/wat/find", jsonObject);
                 JSONObject result = JSONObject.parseObject(msg);
                 Integer state = result.getInteger("Status");
-                if (state==1){
+                if (state == 1) {
                     Double lastRecord = 0.00;
                     QueryWrapper<SmartMeterDetail> queryWrapper2 = new QueryWrapper<>();
                     queryWrapper2.eq("deleted", 0);
@@ -278,7 +279,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
                     queryWrapper2.eq("meter_id", list.get(i).getId());
                     queryWrapper2.orderByDesc("id");
                     List<SmartMeterDetail> detailList = smartMeterDetailService.list(queryWrapper2);
-                    if (!detailList.isEmpty()){
+                    if (!detailList.isEmpty()) {
                         lastRecord = detailList.get(0).getMeterPowerRecord();
                     }
                     JSONObject data = result.getJSONObject("Data");
@@ -287,10 +288,10 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
                     smartMeterDetail.setMeterId(list.get(i).getId());
                     smartMeterDetail.setMeterType(0);
                     String display = watData.getQuantity();
-                    smartMeterDetail.setMeterPowerRecord(Double.parseDouble(display)/Double.parseDouble("100"));
-                    smartMeterDetail.setMeterPower(Double.parseDouble(display)/Double.parseDouble("100")-lastRecord);
+                    smartMeterDetail.setMeterPowerRecord(Double.parseDouble(display) / Double.parseDouble("100"));
+                    smartMeterDetail.setMeterPower(Double.parseDouble(display) / Double.parseDouble("100") - lastRecord);
                     smartMeterDetail.setCreateTime(TimeExchange.StringToDate(watData.getLastUpdate(), "yyyy-MM-dd HH:mm:ss"));
-                    logger.info("====="+smartMeterDetail.getMeterPowerRecord());
+                    logger.info("=====" + smartMeterDetail.getMeterPowerRecord());
                     smartMeterDetailService.insertSmartMeterDetail(smartMeterDetail);
                 }
             }
@@ -324,7 +325,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
     @Override
     @PassToken
     @DESRespondSecret(validated = true)
-    public CommonResult  getUserIdTj() {
+    public CommonResult getUserIdTj() {
         List<Tj> list = wechatScanLoginService.getUserIdTj();
         return CommonResult.ok(list);
     }
@@ -335,7 +336,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
     @Override
     @PassToken
     @DESRespondSecret(validated = true)
-    public CommonResult  getUserIdTjt() {
+    public CommonResult getUserIdTjt() {
         All list = wechatScanLoginService.getUserIdTjt();
         return CommonResult.ok(list);
     }
@@ -346,7 +347,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
     @Override
     @PassToken
     @DESRespondSecret(validated = true)
-    public CommonResult  getWaterTj() {
+    public CommonResult getWaterTj() {
         DAll list = wechatScanLoginService.getWaterTj();
         return CommonResult.ok(list);
     }
@@ -357,7 +358,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
     @Override
     @PassToken
     @DESRespondSecret(validated = true)
-    public CommonResult  getElcTj() {
+    public CommonResult getElcTj() {
         DAll list = wechatScanLoginService.getElcTj();
         return CommonResult.ok(list);
     }
@@ -368,7 +369,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
     @Override
     @PassToken
     @DESRespondSecret(validated = true)
-    public CommonResult  getMonWater() throws ParseException {
+    public CommonResult getMonWater() throws ParseException {
         List<MonthMeterDetail> list = wechatScanLoginService.getMonWater();
         return CommonResult.ok(list);
     }
@@ -379,7 +380,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
     @Override
     @PassToken
     @DESRespondSecret(validated = true)
-    public CommonResult  getMonElc() throws ParseException {
+    public CommonResult getMonElc() throws ParseException {
         List<MonthMeterDetail> list = wechatScanLoginService.getMonElc();
         return CommonResult.ok(list);
     }
@@ -402,7 +403,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
     @Override
     @PassToken
     @DESRespondSecret(validated = true)
-    public CommonResult  getMeterDayPage(@RequestBody MeterMonthData meterMonthData, int currentPage, int pageCount) {
+    public CommonResult getMeterDayPage(@RequestBody MeterMonthData meterMonthData, int currentPage, int pageCount) {
         PageHelper.startPage(currentPage, pageCount);
         PageInfo<MeterMonthData> list = wechatScanLoginService.getMeterDayPage(meterMonthData);
         return CommonResult.ok(list);
@@ -414,7 +415,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
     @Override
     @PassToken
     @DESRespondSecret(validated = true)
-    public CommonResult  getPosition() {
+    public CommonResult getPosition() {
         List<List<BigDecimal>> ld = RandomTrackAlgorithm.getPosition();
         return CommonResult.ok(ld);
     }
@@ -477,10 +478,10 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
 
             userData.setHeadImage(su.getHeadImage());
 
-            if(org.springframework.util.StringUtils.hasText(su.getGrade())){
+            if (org.springframework.util.StringUtils.hasText(su.getGrade())) {
                 List<SmartGrade> grades = smartGradeService.list(null);
                 Optional<SmartGrade> oGrade = grades.stream().filter(e -> String.valueOf(e.getId()).equals(su.getGrade())).findFirst();
-                if(oGrade != null && oGrade.isPresent()){
+                if (oGrade != null && oGrade.isPresent()) {
                     userData.setGrade(su.getGrade());
                 }
             }
@@ -605,7 +606,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
         if (listc.isEmpty()) {
             return CommonResult.ok("验证码已失效");
         }
-//        核销验证码
+        //核销验证码
         for (SmsCode smsCode : listc) {
             smsCode.setIsVerify("1");
             smsCodeService.updateSmsCode(smsCode);
@@ -644,7 +645,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
         String token = JWTUtil.getToken(user.get(0), expired);
         JSONObject jsonObject = new JSONObject();
         jsonObject.put("token", token);
-        jsonObject.put("user", user.get(0));
+        jsonObject.put("user", user);
         jsonObject.put("userhead", AesUtils.encrypt(String.valueOf(user.get(0).getId())));
         return CommonResult.ok(jsonObject);
     }
@@ -724,7 +725,7 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
             return CommonResult.fail("无权限查询");
         }
         List<GradeBook> gradeBookList = null;
-        if (GlobalData.getAddressBook()==null){
+        if (GlobalData.getAddressBook() == null) {
             QueryWrapper<SmartGrade> queryWrapper1 = new QueryWrapper<>();
             queryWrapper1.eq("deleted", 0);
             List<SmartGrade> grades = smartGradeService.list(queryWrapper1);
@@ -775,4 +776,35 @@ public class WechatScanLoginController implements WechatScanLoginControllerAPI {
         return CommonResult.ok(gradeBookList);
     }
 
+
+    @Override
+    @PassToken
+    @DESRespondSecret(validated = true)
+    public CommonResult getWechatPhone(String code) {
+        if (StringUtils.isBlank(code)) {
+            return CommonResult.fail("请传入code");
+        }
+        PhoneAccessToken access = wechatScanLoginService.getPhoneAccessToken();
+        logger.info("access:" + access);
+        String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + access.getAccess_token();
+        Map<String, String> params = new HashMap<>();
+        params.put("code",code);
+
+        String paramsJson = JSON.toJSONString(params);
+        String json = HttpClientUtils.getInstance().sendHttpPost(url,paramsJson);
+        logger.info("获取微信手机号:" + json);
+        JSONObject jsonObject = JSONObject.parseObject(json);
+        String errcode = String.valueOf(jsonObject.get("phone_info"));
+        JSONObject jsonErroObject = JSONObject.parseObject(errcode);
+        String purePhoneNumber = "";
+        try {
+            purePhoneNumber = String.valueOf(jsonErroObject.get("purePhoneNumber"));
+        } catch (Exception e) {
+            return CommonResult.fail("code异常");
+        }
+        JSONObject result = new JSONObject();
+        jsonObject.put("phone", purePhoneNumber);
+
+        return CommonResult.ok(jsonObject.toString());
+    }
 }

+ 3 - 0
src/main/java/com/template/model/weixin/HttpParame.java

@@ -43,6 +43,9 @@ public class HttpParame {
 	// 通过code获取access_token
 	public static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
 
+	// 获取手机号的access_tokn
+	public static final String PHONE_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=XAPPID&secret=XSECRET";
+
 	// 此接口用于获取用户个人信息 UnionID机制
 	public static final String GET_UNIONID_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";
 

+ 37 - 0
src/main/java/com/template/model/weixin/PhoneAccessToken.java

@@ -0,0 +1,37 @@
+package com.template.model.weixin;
+
+/**
+ * <p>Title: AccessToken</p>
+ * <p>Description: 通过code获取access_token</p>
+ *
+ * @author fengyong
+ * @date 2018年9月4日
+ */
+public class PhoneAccessToken {
+
+    /**
+     * 接口调用凭证
+     */
+    private String access_token;
+
+    /**
+     * access_token接口调用凭证超时时间,单位(秒)
+     */
+    private Integer expires_in;
+
+    public Integer getExpires_in() {
+        return expires_in;
+    }
+
+    public void setExpires_in(Integer expires_in) {
+        this.expires_in = expires_in;
+    }
+
+    public String getAccess_token() {
+        return access_token;
+    }
+
+    public void setAccess_token(String access_token) {
+        this.access_token = access_token;
+    }
+}

+ 6 - 3
src/main/java/com/template/services/WechatScanLoginService.java

@@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo;
 import com.template.model.pojo.SmartUser;
 import com.template.model.tongji.*;
 import com.template.model.weixin.AccessToken;
+import com.template.model.weixin.PhoneAccessToken;
 import com.template.model.weixin.WechatUserUnionID;
 import org.apache.ibatis.annotations.Param;
 
@@ -18,13 +19,15 @@ import java.util.Map;
  * @date 2018年9月7日
  */
 public interface WechatScanLoginService {
-	
+
 	Map<String,String> wechatLoginUrl();
 
 	Map<String,String> wechatBindUrl(String phone,String messageCode);
-	
+
 	AccessToken getAccessToken(String code);
-	
+
+	PhoneAccessToken getPhoneAccessToken();
+
 	WechatUserUnionID getUserUnionID();
 
 	SmartUser selectByOpenid(String openid);

+ 22 - 2
src/main/java/com/template/services/impl/WechatScanLoginServiceImpl.java

@@ -11,6 +11,7 @@ import com.template.model.pojo.SmartUser;
 import com.template.model.tongji.*;
 import com.template.model.weixin.AccessToken;
 import com.template.model.weixin.HttpParame;
+import com.template.model.weixin.PhoneAccessToken;
 import com.template.model.weixin.WechatUserUnionID;
 import com.template.services.WechatScanLoginService;
 import org.apache.ibatis.annotations.Param;
@@ -86,7 +87,7 @@ public class WechatScanLoginServiceImpl implements WechatScanLoginService {
 		map.put("url", url);
 		return map;
 	}
-	
+
 	/**
 	 * <p>Title: getAccessToken</p>
 	 * <p>Description: 用户授权后获取用户唯一标识 </p>
@@ -109,11 +110,30 @@ public class WechatScanLoginServiceImpl implements WechatScanLoginService {
 	}
 
 	/**
+	 * <p>Title: getAccessToken</p>
+	 * <p>Description: 用户授权后获取用户唯一标识 </p>
+	 * @return
+	 */
+	@Override
+	public PhoneAccessToken getPhoneAccessToken() {
+		String accessTokenUrl = HttpParame.PHONE_TOKEN_URL;
+		accessTokenUrl = accessTokenUrl.replaceAll("XAPPID", PropertiesUtil.getValue(HttpParame.APPIDX));
+		accessTokenUrl = accessTokenUrl.replaceAll("XSECRET", PropertiesUtil.getValue(HttpParame.SECRETX));
+		String responseContent = HttpClientUtils.getInstance().sendHttpGet(accessTokenUrl);
+		if (responseContent == null || responseContent == "") {
+			return null;
+		}
+		JSONObject parseObject = JSONObject.parseObject(responseContent);
+		PhoneAccessToken accessToken = JSONObject.toJavaObject(parseObject, PhoneAccessToken.class);
+		return accessToken;
+	}
+
+	/**
 	 * <p>Title: getUserUnionID</p>
 	 * <p>Description: 获取用户统一标识。针对一个微信开放平台帐号下的应用,
 	 * 同一用户的unionid在多个应用中是唯一的。
 	 * 此方法不牵扯到多个应用时候可以不用。
-	 * 
+	 *
 	 * 此处用到只是为了获取微信扫码用户的省份城市(此信息获取的只是微信用户所填的城市省份,
 	 * 并不是用户的实时位置信息,如果用户未填写是获取不到的。)
 	 * </p>