From 5196a1d1e00ced009a2d4e8ea0aa5f3bb7cefe33 Mon Sep 17 00:00:00 2001 From: EricsHu <hrr145632> Date: 星期一, 10 四月 2023 15:56:37 +0800 Subject: [PATCH] 小程序登陆绑定 --- src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java | 2 src/main/java/com/qxueyou/scc/sys/action/LoginController.java | 49 +++++++++--- src/main/java/com/qxueyou/scc/wx/utils/Code2Session.java | 32 ++++++++ src/main/java/com/qxueyou/scc/user/model/User.java | 14 +++ src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java | 3 src/main/java/com/qxueyou/scc/base/model/Result.java | 4 + src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java | 2 src/main/java/com/qxueyou/scc/wx/service/IWechatService.java | 5 + src/main/java/com/qxueyou/scc/wx/utils/HttpClientUtil.java | 34 ++++++++ src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java | 2 src/main/java/com/qxueyou/scc/wx/service/impl/WechatService.java | 47 ++++++++++- src/main/java/com/qxueyou/scc/controller/VideoLiveController.java | 4 src/main/java/com/qxueyou/scc/controller/ResController.java | 1 13 files changed, 177 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java b/src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java index 5dec6f7..13f67a8 100644 --- a/src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java +++ b/src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java @@ -7,6 +7,7 @@ package com.qxueyou.scc.base.dao; +import java.beans.Transient; import java.io.Serializable; import java.math.BigInteger; import java.util.ArrayList; @@ -29,6 +30,7 @@ import com.qxueyou.scc.base.model.Pager; import com.qxueyou.scc.base.model.Result; +import org.springframework.transaction.annotation.Transactional; /** * 鍩虹DAO绫�,鑷姩娉ㄥ叆sessionFactory @@ -84,6 +86,7 @@ /** * 淇濆瓨鎴栨洿鏂板璞� */ + @Transactional(readOnly = false) public void saveOrUpdate(Object obj) { this.getHibernateTemplate().saveOrUpdate(obj); } diff --git a/src/main/java/com/qxueyou/scc/base/model/Result.java b/src/main/java/com/qxueyou/scc/base/model/Result.java index cbb9343..d29db52 100644 --- a/src/main/java/com/qxueyou/scc/base/model/Result.java +++ b/src/main/java/com/qxueyou/scc/base/model/Result.java @@ -83,6 +83,10 @@ this.success = success; } + public Boolean getSuccess() { + return success; + } + public String getMsg() { return msg; } diff --git a/src/main/java/com/qxueyou/scc/controller/ResController.java b/src/main/java/com/qxueyou/scc/controller/ResController.java index 2fc0d31..4f3d8b6 100644 --- a/src/main/java/com/qxueyou/scc/controller/ResController.java +++ b/src/main/java/com/qxueyou/scc/controller/ResController.java @@ -25,6 +25,7 @@ * @author chenjunliang */ @Api(tags = "璧勬簮绠$悊鎺ュ彛") +@CrossOrigin @RestController @RequestMapping(value = "/teach/res") public class ResController { diff --git a/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java b/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java index 7388141..33e20fe 100644 --- a/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java +++ b/src/main/java/com/qxueyou/scc/controller/VideoLiveController.java @@ -128,7 +128,7 @@ String startTime1 = simpleDateFormat.format(new Date(startTime)); String endTime1 = simpleDateFormat.format(new Date(endTime)); //璋冪敤绗笁鏂圭洿鎾帴鍙� - String s = client.courseAdd(name, "16624662432", startTime1, endTime1, ClientUtils.getUserName(), "222", options); + String s = client.courseAdd(name, ClientUtils.getUserId(), startTime1, endTime1, ClientUtils.getUserName(), "222", options); //json杞崲鎷垮埌courseId JSONObject jsonObject = JSON.parseObject(s); JSONObject data = jsonObject.getJSONObject("data"); @@ -149,7 +149,7 @@ HashMap<Object,Object> options = new HashMap<Object, Object>(); options.put("ssl", false); - String res = client.courseLogin("16624662432", MTCloud.ACCOUNT_TYPE_THIRD, options); + String res = client.courseLogin(ClientUtils.getUserId(),MTCloud.ACCOUNT_TYPE_THIRD, options); System.out.println(res); JSONObject jsonObject = JSON.parseObject(res); JSONObject data = jsonObject.getJSONObject("data"); diff --git a/src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java b/src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java index 1c90167..40dae86 100644 --- a/src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java +++ b/src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java @@ -5,6 +5,7 @@ import com.qxueyou.scc.base.util.ClientUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -31,6 +32,7 @@ * */ @RestController +@CrossOrigin @RequestMapping(value = "/stu/homepage") public class HomePageController { diff --git a/src/main/java/com/qxueyou/scc/sys/action/LoginController.java b/src/main/java/com/qxueyou/scc/sys/action/LoginController.java index 555edcc..81ed905 100644 --- a/src/main/java/com/qxueyou/scc/sys/action/LoginController.java +++ b/src/main/java/com/qxueyou/scc/sys/action/LoginController.java @@ -13,6 +13,7 @@ import com.alibaba.fastjson.JSONObject; import com.qxueyou.scc.base.util.*; import com.qxueyou.scc.wx.service.IWechatService; +import freemarker.template.utility.StringUtil; import org.apache.commons.lang3.StringUtils; import org.apache.kafka.common.network.LoginType; import org.apache.tomcat.util.net.openssl.ciphers.Authentication; @@ -126,22 +127,46 @@ * @param uid * @throws IOException */ - @PostMapping("/auth/wechat/login") + + @PostMapping("/wxlogin") @ApiOperation("寰俊鐧诲綍") + @ResponseBody public Result wechatLogin(String code,String number) { JSONObject sessionKeyOrOpenId = wechatService.getSessionKeyOrOpenId(code); - String phone = wechatService.getNumber(number); - String hql = "from User where deleteFlag is false and mobilePhone = ? "; - List<Object> params = CollectionUtils.newList(phone); - User user = commonDAO.findUnique(hql,params, User.class); - if(user==null){ - User user1=new User(); - user1.setMobilePhone(phone); - commonDAO.save(user1); + JSONObject gettoken = wechatService.gettoken(appId, secret); + Result phone = wechatService.getNumber(gettoken.get("access_token").toString(), number); + if(phone.getSuccess()){ + String hql = "from User where deleteFlag is false and mobilePhone = ? "; + System.out.println(phone.getData()); + List<Object> params = CollectionUtils.newList(phone.getData()); + User user = commonDAO.findUnique(hql,params, User.class); + if(user==null){ + //鏂板鐢ㄦ埛 + User user1=new User(); + user1.setMobilePhone(phone.getData().toString()); + user1.setOpenId(sessionKeyOrOpenId.get("openid").toString()); + commonDAO.save(user1); + //鏂板鍏宠仈瀛﹀憳 + String addUserSql = "from User where deleteFlag is false and mobilePhone = ? "; + List<Object> newParams = CollectionUtils.newList(phone.getData()); + User newUser = commonDAO.findUnique(addUserSql,newParams, User.class); + StuStudent stuStudent=new StuStudent(); + stuStudent.setStatus(StuStudent.STATUS_REGISTER); + stuStudent.setUserId(newUser.getUserId()); + stuStudent.setMobilePhone(newUser.getMobilePhone()); + commonDAO.save(stuStudent); + } + if(StringUtils.isEmpty(user.getOpenId())){ + user.setOpenId(sessionKeyOrOpenId.get("openid").toString()); + commonDAO.saveOrUpdate(user); + } + String studentSql = "from StuStudent where deleteFlag is false and userId = ? "; + List<Object> stuParams = CollectionUtils.newList(user.getUserId()); + StuStudent stuStudent = commonDAO.findUnique(studentSql, stuParams, StuStudent.class); + return new Result(true,"鎺堟潈鎴愬姛",CollectionUtils.newObjectMap("user",user,"ClassId",stuStudent.getClassId())); } - return new Result(true,"cg",user); -// return new Result(true,"token",securityProperties.getTokenStartWith() + token,"user",user); - } + return phone; +} @ApiOperation(value = "鐧诲叆鎺ュ彛", notes = "") @ApiImplicitParams({ diff --git a/src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java b/src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java index 962e0ec..1a235c0 100644 --- a/src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java +++ b/src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java @@ -28,7 +28,7 @@ private static final long serialVersionUID = 7504161189427721559L; /* - * 鐘舵��: 宸叉姤鍚� + * 鐘舵��: 宸叉姤鍚�,鏈縺娲伙紝宸叉瘯涓� */ public static final String STATUS_REGISTER = "register"; public static final String STATUS_ACTIVE = "active"; diff --git a/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java b/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java index 4627751..aa9121f 100644 --- a/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java +++ b/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java @@ -644,7 +644,7 @@ String className = "鍏紑璇�"; subjectMap.put("subjectName",subject.getSubjectName()); subjectMap.put("subjectId",subject.getSubjectId()); - + subjectMap.put("coverPageUrl",subject.getCoverPageUrl()); subjectMap.put("percent", new BigDecimal(percentAvg)); subjectMap.put("progressValue", new BigDecimal(progressValue)); subjectMap.put("className",className); diff --git a/src/main/java/com/qxueyou/scc/user/model/User.java b/src/main/java/com/qxueyou/scc/user/model/User.java index 8e7b836..7975abc 100644 --- a/src/main/java/com/qxueyou/scc/user/model/User.java +++ b/src/main/java/com/qxueyou/scc/user/model/User.java @@ -144,6 +144,20 @@ @Column(name = "IMEI", length = 255) private String imei; + /** + * 缁戝畾璐﹀彿ID + */ + @Column(name = "OPENID", length = 255) + private String openId; + + public String getOpenId() { + return openId; + } + + public void setOpenId(String openId) { + this.openId = openId; + } + @ManyToMany(fetch = FetchType.LAZY, mappedBy = "users") @JsonIgnore private List<UserRole> roles; diff --git a/src/main/java/com/qxueyou/scc/wx/service/IWechatService.java b/src/main/java/com/qxueyou/scc/wx/service/IWechatService.java index ee291ee..b6c3f04 100644 --- a/src/main/java/com/qxueyou/scc/wx/service/IWechatService.java +++ b/src/main/java/com/qxueyou/scc/wx/service/IWechatService.java @@ -1,6 +1,7 @@ package com.qxueyou.scc.wx.service; import com.alibaba.fastjson.JSONObject; +import com.qxueyou.scc.base.model.Result; import com.qxueyou.scc.teach.student.model.StuStudent; import java.util.Map; @@ -19,7 +20,9 @@ JSONObject getSessionKeyOrOpenId(String code); - String getNumber(String number); + Result getNumber(String tonken, String number); + + JSONObject gettoken(String appid,String secret); // Result isBindWx(String userId); // Result getSignature(String url); diff --git a/src/main/java/com/qxueyou/scc/wx/service/impl/WechatService.java b/src/main/java/com/qxueyou/scc/wx/service/impl/WechatService.java index 5f98963..3400b95 100644 --- a/src/main/java/com/qxueyou/scc/wx/service/impl/WechatService.java +++ b/src/main/java/com/qxueyou/scc/wx/service/impl/WechatService.java @@ -1,8 +1,11 @@ package com.qxueyou.scc.wx.service.impl; +import cn.hutool.http.HttpUtil; import com.alibaba.druid.util.HttpClientUtils; +import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.qxueyou.scc.base.model.Result; import com.qxueyou.scc.base.service.ICacheService; import com.qxueyou.scc.teach.student.model.StuStudent; import com.qxueyou.scc.wx.service.IWechatService; @@ -67,16 +70,50 @@ } @Override - public String getNumber(String number) { - String requestUrl = "https://api.weixin.qq.com/wxa/business/getuserphonenumber"; + public Result getNumber(String tonken, String number) { + JSONObject jsonCode = new JSONObject(); + + jsonCode.put("code",number); + + + String resPhone = HttpClientUtil.doPostUrl("https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + tonken, jsonCode); + + if(StringUtils.isEmpty(resPhone) || !resPhone.contains("phone_info") || !resPhone.contains("phoneNumber")){ + return new Result(false,"寰俊瀹樻柟淇敼浜嗗皬绋嬪簭鑾峰彇鐢ㄦ埛鎵嬫満鍙风爜鐩稿叧鎺ュ彛锛�"); + } + JSONObject resPhoneInfo = JSON.parseObject(resPhone); + JSONObject phoneInfo=resPhoneInfo.getJSONObject("phone_info"); + System.out.println(resPhoneInfo); + System.out.println(phoneInfo); + String phoneNumber = phoneInfo.get("phoneNumber").toString(); + + return new Result(true,"鑾峰彇鎵嬫満鍙锋垚鍔�",phoneNumber); +// String requestUrl = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token="+tonken+jsonObject.toJSONString(); + +// Map<String, String> requestUrlParam = new HashMap<>(); + + + +// requestUrlParam.put("code", number); + +// JSONObject s =JSON.parseObject(HttpClientUtil.doPost(requestUrl)); + +// return s; + } + + @Override + public JSONObject gettoken(String appid, String secret) { + String requestUrl = "https://api.weixin.qq.com/cgi-bin/token"; Map<String, String> requestUrlParam = new HashMap<>(); - requestUrlParam.put("access_token", "access_token"); + requestUrlParam.put("grant_type", "client_credential"); - requestUrlParam.put("code", number); + requestUrlParam.put("appid", appid); - String s = HttpClientUtil.doPost(requestUrl, requestUrlParam); + requestUrlParam.put("secret", secret); + + JSONObject s = JSON.parseObject(HttpClientUtil.doGet(requestUrl, requestUrlParam)); return s; } diff --git a/src/main/java/com/qxueyou/scc/wx/utils/Code2Session.java b/src/main/java/com/qxueyou/scc/wx/utils/Code2Session.java new file mode 100644 index 0000000..f1ed42a --- /dev/null +++ b/src/main/java/com/qxueyou/scc/wx/utils/Code2Session.java @@ -0,0 +1,32 @@ +package com.qxueyou.scc.wx.utils; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * <p> + * 璋冪敤寰俊鎺ュ彛 杩斿洖鎺堟潈淇℃伅~ + * </p> + * @author echo lovely + * @date 2020/12/4 21:56 + */ + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Code2Session { + + //鐢ㄦ埛鍞竴鏍囪瘑 + private String openid; + // 浼氳瘽瀵嗛挜 + private String session_key; + // 鐢ㄦ埛鍦ㄥ紑鏀惧钩鍙扮殑鍞竴鏍囪瘑绗� + private String unionid; + // 閿欒鐮� + private Integer errcode; + // 閿欒淇℃伅 + private String errmsg; + +} + diff --git a/src/main/java/com/qxueyou/scc/wx/utils/HttpClientUtil.java b/src/main/java/com/qxueyou/scc/wx/utils/HttpClientUtil.java index faab644..dafe729 100644 --- a/src/main/java/com/qxueyou/scc/wx/utils/HttpClientUtil.java +++ b/src/main/java/com/qxueyou/scc/wx/utils/HttpClientUtil.java @@ -1,5 +1,7 @@ package com.qxueyou.scc.wx.utils; +import com.alibaba.fastjson.JSONObject; +import net.sf.json.JSONString; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; @@ -78,6 +80,8 @@ if (param != null) { List<NameValuePair> paramList = new ArrayList<>(); for (String key : param.keySet()) { + System.out.println(key); + System.out.println(param.get(key)); paramList.add(new BasicNameValuePair(key, param.get(key))); } // 妯℃嫙琛ㄥ崟 @@ -100,6 +104,36 @@ return resultString; } + public static String doPostUrl(String url, JSONObject jsonCode) { + // 鍒涘缓Httpclient瀵硅薄 + CloseableHttpClient httpClient = HttpClients.createDefault(); + CloseableHttpResponse response = null; + String resultString = ""; + try { + // 鍒涘缓Http Post璇锋眰 + HttpPost httpPost = new HttpPost(url); + + String s = jsonCode.toJSONString(jsonCode); + + StringEntity entity=new StringEntity(s); + + httpPost.setEntity(entity); + // 鎵цhttp璇锋眰 + response = httpClient.execute(httpPost); + resultString = EntityUtils.toString(response.getEntity(), "utf-8"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + return resultString; + } + public static String doPost(String url) { return doPost(url, null); } -- Gitblit v1.8.0