diff --git a/model/数据模型.png b/model/数据模型.png new file mode 100644 index 0000000..3bf6e03 Binary files /dev/null and b/model/数据模型.png differ diff --git a/src/demo/src/main/java/com/example/demo/common/HttpGetUtil.java b/src/demo/src/main/java/com/example/demo/common/HttpGetUtil.java new file mode 100644 index 0000000..420d91f --- /dev/null +++ b/src/demo/src/main/java/com/example/demo/common/HttpGetUtil.java @@ -0,0 +1,73 @@ +package com.example.demo.common; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLEncoder; +import java.util.Map; + +public class HttpGetUtil { + + public static String httpRequestToString(String url, + Map params) { + String result = null; + try { + InputStream is = httpRequestToStream(url, params); + BufferedReader in = new BufferedReader(new InputStreamReader(is, + "UTF-8")); + StringBuffer buffer = new StringBuffer(); + String line = ""; + while ((line = in.readLine()) != null) { + buffer.append(line); + } + result = buffer.toString(); + } catch (Exception e) { + return null; + } + System.out.println(result); + return result; + + } + + private static InputStream httpRequestToStream(String url, + Map params) { + InputStream is = null; + try { + String parameters = ""; + boolean hasParams = false; + for(Object key : params.keySet()){ + String value = URLEncoder.encode((String) params.get(key), "UTF-8"); + parameters += key +"="+ value +"&"; + hasParams = true; + } + if(hasParams){ + parameters = parameters.substring(0, parameters.length()-1); + } + + url += "?"+ parameters; + System.out.println(url); + + URL u = new URL(url); + HttpURLConnection conn = (HttpURLConnection) u.openConnection(); + conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + conn.setRequestProperty("Accept-Charset", "UTF-8"); + conn.setRequestProperty("contentType", "utf-8"); + conn.setConnectTimeout(50000); + conn.setReadTimeout(50000); + conn.setDoInput(true); + //设置请求方式,默认为GET + conn.setRequestMethod("GET"); + + is = conn.getInputStream(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return is; + } + +} diff --git a/src/demo/src/main/java/com/example/demo/common/WechatUtil.java b/src/demo/src/main/java/com/example/demo/common/WechatUtil.java index 79d8345..65e19b8 100644 --- a/src/demo/src/main/java/com/example/demo/common/WechatUtil.java +++ b/src/demo/src/main/java/com/example/demo/common/WechatUtil.java @@ -30,9 +30,9 @@ public class WechatUtil { Map requestUrlParam = new HashMap<>(); // https://mp.weixin.qq.com/wxopen/devprofile?action=get_profile&token=164113089&lang=zh_CN //小程序appId - requestUrlParam.put("wx08c675f6ba5b2cdc", "小程序appId"); + requestUrlParam.put("wx08c675f6ba5b2cdc", "wx08c675f6ba5b2cdc"); //小程序secret - requestUrlParam.put("0c28388c09ff373d391fe66d085dd39d", "小程序secret"); + requestUrlParam.put("0c28388c09ff373d391fe66d085dd39d", "0c28388c09ff373d391fe66d085dd39d"); //小程序端返回的code requestUrlParam.put("js_code", code); //默认参数 diff --git a/src/demo/src/main/java/com/example/demo/controller/Demmo.java b/src/demo/src/main/java/com/example/demo/controller/Demmo.java index 1107105..f39e237 100644 --- a/src/demo/src/main/java/com/example/demo/controller/Demmo.java +++ b/src/demo/src/main/java/com/example/demo/controller/Demmo.java @@ -1,12 +1,107 @@ package com.example.demo.controller; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.example.demo.common.HttpGetUtil; +import com.example.demo.domain.User; +import com.example.demo.mapper.UserMapper; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.*; -@Controller +import javax.management.Query; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.UnsupportedEncodingException; +import java.util.*; + +@Tag(name = "真·用户接口",description = "用户登录,") +@RestController public class Demmo { @RequestMapping("/index") public String first(){ return "index"; } + @Autowired + private UserMapper userMapper; + @GetMapping("atlogin") + @Operation(summary = "真·微信登录接口") + + public Map getOpenId( HttpServletRequest request, + HttpServletResponse response, + @RequestParam(value = "code", required = false) String code) throws UnsupportedEncodingException { + response.setContentType("text/html"); + request.setCharacterEncoding("UTF-8"); + response.setCharacterEncoding("UTF-8"); + Map params = new HashMap(); + params.put("appid", "wx08c675f6ba5b2cdc"); + params.put("secret", "0c28388c09ff373d391fe66d085dd39d"); + params.put("js_code", code); + params.put("grant_type", "authorization_code"); + + System.out.println(params); + String result = HttpGetUtil.httpRequestToString( + "https://api.weixin.qq.com/sns/jscode2session", params); + JSONObject jsonObject = JSONObject.parseObject(result); + + String openid = jsonObject.get("openid").toString(); + System.out.println("得到的openid为:"+openid); + String sessionKey=jsonObject.get("session_key").toString(); + User user = this.userMapper.selectById(openid); + // uuid生成唯一key,用于维护微信小程序用户与服务端的会话 + String skey = UUID.randomUUID().toString(); + if (user == null) { + // 用户信息入库 +// String nickName = rawDataJson.getString("nickName"); +// String avatarUrl = rawDataJson.getString("avatarUrl"); +// String gender = rawDataJson.getString("gender"); +// String city = rawDataJson.getString("city"); +// String country = rawDataJson.getString("country"); +// String province = rawDataJson.getString("province"); + + user = new User(); + user.setOpenId(openid); + user.setSkey(skey); + user.setCreateTime(new Date()); + user.setLastVisitTime(new Date()); + user.setSessionKey(sessionKey); +// user.setCity(city); +// user.setProvince(province); +// user.setCountry(country); +// user.setAvatarUrl(avatarUrl); +// user.setGender(Integer.parseInt(gender)); +// user.setNickName(nickName); + + this.userMapper.insert(user); + } else { + // 已存在,更新用户登录时间 + user.setLastVisitTime(new Date()); + // 重新设置会话skey + user.setSkey(skey); + this.userMapper.updateById(user); + } + Map skeymap = new HashMap(); + skeymap.put("skey",skey); + + return skeymap; + } + @RequestMapping("/atbind") + @Operation(summary = "用户绑定接口") + public void atbind(@RequestParam(value = "studentnumber",required = true) String studentnumber, + @RequestParam(value = "name",required = true) String name, + @RequestParam(value = "skey",required = true) String skey) + { + QueryWrapper queryWrapper=new QueryWrapper<>(); + queryWrapper.like("skey",skey); + User user = this.userMapper.selectOne(queryWrapper); + user.setStudent_Number(studentnumber); + user.setName(name); + this.userMapper.updateById(user); + System.out.println(user); + + } + } diff --git a/src/demo/src/main/java/com/example/demo/controller/UserController.java b/src/demo/src/main/java/com/example/demo/controller/UserController.java index 78949da..9e9d427 100644 --- a/src/demo/src/main/java/com/example/demo/controller/UserController.java +++ b/src/demo/src/main/java/com/example/demo/controller/UserController.java @@ -53,21 +53,21 @@ public class UserController { // 4.校验签名 小程序发送的签名signature与服务器端生成的签名signature2 = sha1(rawData + sessionKey) String signature2 = DigestUtils.sha1Hex(rawData + sessionKey); - if (!signature.equals(signature2)) { - return GlobalResult.build(500, "签名校验失败", null); - } +// if (!signature.equals(signature2)) { +// return GlobalResult.build(500, "签名校验失败", null); +// } // 5.根据返回的User实体类,判断用户是否是新用户,是的话,将用户信息存到数据库;不是的话,更新最新登录时间 User user = this.userMapper.selectById(openid); // uuid生成唯一key,用于维护微信小程序用户与服务端的会话 String skey = UUID.randomUUID().toString(); if (user == null) { // 用户信息入库 - String nickName = rawDataJson.getString("nickName"); - String avatarUrl = rawDataJson.getString("avatarUrl"); - String gender = rawDataJson.getString("gender"); - String city = rawDataJson.getString("city"); - String country = rawDataJson.getString("country"); - String province = rawDataJson.getString("province"); +// String nickName = rawDataJson.getString("nickName"); +// String avatarUrl = rawDataJson.getString("avatarUrl"); +// String gender = rawDataJson.getString("gender"); +// String city = rawDataJson.getString("city"); +// String country = rawDataJson.getString("country"); +// String province = rawDataJson.getString("province"); user = new User(); user.setOpenId(openid); @@ -75,12 +75,12 @@ public class UserController { user.setCreateTime(new Date()); user.setLastVisitTime(new Date()); user.setSessionKey(sessionKey); - user.setCity(city); - user.setProvince(province); - user.setCountry(country); - user.setAvatarUrl(avatarUrl); - user.setGender(Integer.parseInt(gender)); - user.setNickName(nickName); +// user.setCity(city); +// user.setProvince(province); +// user.setCountry(country); +// user.setAvatarUrl(avatarUrl); +// user.setGender(Integer.parseInt(gender)); +// user.setNickName(nickName); this.userMapper.insert(user); } else { diff --git a/src/demo/src/main/java/com/example/demo/domain/User.java b/src/demo/src/main/java/com/example/demo/domain/User.java index c291a0e..6a65ea3 100644 --- a/src/demo/src/main/java/com/example/demo/domain/User.java +++ b/src/demo/src/main/java/com/example/demo/domain/User.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; @@ -16,11 +18,12 @@ import java.util.Date; */ @Data @TableName("user") -public class User { +public class User extends Wrapper { private static final long serialVersionUID = 1L; /** * open_id */ + @TableId(value = "open_id",type = IdType.INPUT) private String openId; /** @@ -90,4 +93,23 @@ public class User { @TableField("power") private int power; + @Override + public User getEntity() { + return null; + } + + @Override + public MergeSegments getExpression() { + return null; + } + + @Override + public String getCustomSqlSegment() { + return null; + } + + @Override + public String getSqlSegment() { + return null; + } }