添加了小程序查询网站用户信息和微信用户信息的接口
This commit is contained in:
parent
29a8c526f8
commit
c5dee2529f
@ -2,7 +2,9 @@ package com.xkrs.controller;
|
|||||||
|
|
||||||
import com.xkrs.common.encapsulation.PromptMessageEnum;
|
import com.xkrs.common.encapsulation.PromptMessageEnum;
|
||||||
import com.xkrs.common.tool.TokenUtil;
|
import com.xkrs.common.tool.TokenUtil;
|
||||||
|
import com.xkrs.dao.AppletsUserDao;
|
||||||
import com.xkrs.dao.SysUserDao;
|
import com.xkrs.dao.SysUserDao;
|
||||||
|
import com.xkrs.model.entity.AppletsUser;
|
||||||
import com.xkrs.model.entity.SysUserEntity;
|
import com.xkrs.model.entity.SysUserEntity;
|
||||||
import com.xkrs.model.qo.SysUserQo;
|
import com.xkrs.model.qo.SysUserQo;
|
||||||
import com.xkrs.model.validation.SysUserQoInsert;
|
import com.xkrs.model.validation.SysUserQoInsert;
|
||||||
@ -40,6 +42,9 @@ public class SysUserController {
|
|||||||
@Resource
|
@Resource
|
||||||
private SysUserDao sysUserDao;
|
private SysUserDao sysUserDao;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AppletsUserDao appletsUserDao;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 登录用户Token验证
|
* 登录用户Token验证
|
||||||
* @return
|
* @return
|
||||||
@ -276,4 +281,28 @@ public class SysUserController {
|
|||||||
return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"绑定成功!",locale);
|
return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"绑定成功!",locale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询微信用户信息和网站用户的信息
|
||||||
|
* @param openId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/findUserAndWeChatUser")
|
||||||
|
public String findUserAndWeChatUser(@RequestParam("openId") String openId){
|
||||||
|
Locale locale = LocaleContextHolder.getLocale();
|
||||||
|
Map map = new HashMap(3);
|
||||||
|
AppletsUser appletsUser = appletsUserDao.findByOpenId(openId);
|
||||||
|
if(appletsUser == null){
|
||||||
|
map.put("weChat",null);
|
||||||
|
}else {
|
||||||
|
map.put("weChat",appletsUser);
|
||||||
|
}
|
||||||
|
SysUserVo sysUserVo = sysUserDao.selectUserByOpenId(openId);
|
||||||
|
if(sysUserVo == null){
|
||||||
|
map.put("user",null);
|
||||||
|
}else {
|
||||||
|
map.put("user",sysUserVo);
|
||||||
|
}
|
||||||
|
return outputEncapsulationObject(PromptMessageEnum.SUCCESS,map,locale);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
99
src/main/java/com/xkrs/controller/WeChatController.java
Normal file
99
src/main/java/com/xkrs/controller/WeChatController.java
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
package com.xkrs.controller;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.xkrs.common.config.ConstantConfig;
|
||||||
|
import com.xkrs.common.encapsulation.PromptMessageEnum;
|
||||||
|
import com.xkrs.dao.WeChatCodeDao;
|
||||||
|
import com.xkrs.model.entity.WeChatCode;
|
||||||
|
import com.xkrs.utils.HttpClientUtil;
|
||||||
|
import org.springframework.context.i18n.LocaleContextHolder;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author XinYi Song
|
||||||
|
* 微信扫码登录
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
public class WeChatController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private WeChatCodeDao weChatCodeDao;
|
||||||
|
|
||||||
|
@GetMapping("/callback")
|
||||||
|
public String callback(String code,String state) throws Exception {
|
||||||
|
Locale locale = LocaleContextHolder.getLocale();
|
||||||
|
try{
|
||||||
|
//1.获取code值,临时票据,类似于验证码
|
||||||
|
System.out.println(code);
|
||||||
|
|
||||||
|
//2.拿着code请求微信固定的地址,得到两个值access_token和openid
|
||||||
|
String baseAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token" +
|
||||||
|
"?appid=%s" +
|
||||||
|
"&secret=%s" +
|
||||||
|
"&code=%s" +
|
||||||
|
"&grant_type=authorization_code";
|
||||||
|
|
||||||
|
String accessTokenUrl = String.format(baseAccessTokenUrl,
|
||||||
|
ConstantConfig.WX_OPEN_APP_ID,
|
||||||
|
ConstantConfig.WX_OPEN_APP_SECRET,
|
||||||
|
code);
|
||||||
|
//请求这个拼接好的地址得到返回的值,现在请求地址,不用浏览器了,用httpclient发送一个请求得到一个返回的地址
|
||||||
|
String accessTokenInfo = HttpClientUtil.doGet(accessTokenUrl);
|
||||||
|
//所以我们需要对字符串进行分割,先将字符串转换成map集合,map是key-value结构,再根据map中的key得到结果,这里我们用gson
|
||||||
|
JSONObject jsonObject = JSON.parseObject(accessTokenInfo);
|
||||||
|
String access_token =(String) jsonObject.get("access_token");
|
||||||
|
String openid = (String)jsonObject.get("openid");
|
||||||
|
|
||||||
|
//扫码人信息加到数据库中去
|
||||||
|
//判断数据库中是否存在相同的数据库信息,我们可以根据openid来做判断
|
||||||
|
WeChatCode byOpenId = weChatCodeDao.findByOpenId(openid);
|
||||||
|
if (byOpenId ==null){
|
||||||
|
//member为空,表示数据库中没有相同的信息
|
||||||
|
//3.拿到access_token和openid,再去请求微信提供固定的地址,获取到扫码人的信息
|
||||||
|
String baseUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo" +
|
||||||
|
"?access_token=%s" +
|
||||||
|
"&openid=%s";
|
||||||
|
String userInfoUrl = String.format(
|
||||||
|
baseUserInfoUrl,
|
||||||
|
access_token,
|
||||||
|
openid
|
||||||
|
);
|
||||||
|
//发送请求
|
||||||
|
String userInfo = HttpClientUtil.doGet(userInfoUrl);
|
||||||
|
//获取返回的userInfo字符串的扫描人信息
|
||||||
|
JSONObject jsonObject1 = JSON.parseObject(userInfo);
|
||||||
|
//昵称
|
||||||
|
String nickname =(String) jsonObject1.get("nickname");
|
||||||
|
//头像
|
||||||
|
String headimgurl =(String) jsonObject1.get("headimgurl");
|
||||||
|
Integer sex = (Integer) jsonObject1.get("sex");
|
||||||
|
|
||||||
|
|
||||||
|
WeChatCode weChatCode = new WeChatCode();
|
||||||
|
weChatCode.setOpenId(openid);
|
||||||
|
weChatCode.setNickName(nickname);
|
||||||
|
weChatCode.setUserPhoto(headimgurl);
|
||||||
|
weChatCode.setUserSex(sex.toString());
|
||||||
|
|
||||||
|
weChatCodeDao.save(weChatCode);
|
||||||
|
}
|
||||||
|
//最后返回我们的首页面
|
||||||
|
//由于我们在前端中需要显示用户名和头像,所以我们需要使用jwt在地址中传递token
|
||||||
|
//不能使用cookie,是因为cookie不能跨域访问,会导致值传递失败
|
||||||
|
//使用jwt根据member对象生成token字符串
|
||||||
|
//String jwtToken = JwtUtils.getJwtToken(member.getId(), member.getNickname());
|
||||||
|
|
||||||
|
return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"操作成功!",locale);
|
||||||
|
}catch(Exception e){
|
||||||
|
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"操作失败!",locale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -96,6 +96,15 @@ public interface SysUserDao extends JpaRepository<SysUserEntity,Integer> {
|
|||||||
"from SysUserEntity where userName = :userName")
|
"from SysUserEntity where userName = :userName")
|
||||||
SysUserVo selectUserByUserName(String userName);
|
SysUserVo selectUserByUserName(String userName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据openid查询网站用户的信息
|
||||||
|
* @param openId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Query(value = "select new com.xkrs.model.vo.SysUserVo (id,reallyName,telephone,userDepartment,activeFlag,addTime) " +
|
||||||
|
"from SysUserEntity where openId = :openId")
|
||||||
|
SysUserVo selectUserByOpenId(String openId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 启用
|
* 启用
|
||||||
* @param userId
|
* @param userId
|
||||||
|
19
src/main/java/com/xkrs/dao/WeChatCodeDao.java
Normal file
19
src/main/java/com/xkrs/dao/WeChatCodeDao.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package com.xkrs.dao;
|
||||||
|
|
||||||
|
import com.xkrs.model.entity.WeChatCode;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author HP
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public interface WeChatCodeDao extends JpaRepository<WeChatCode,Long> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据openId查询信息
|
||||||
|
* @param openId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
WeChatCode findByOpenId(String openId);
|
||||||
|
}
|
122
src/main/java/com/xkrs/model/entity/WeChatCode.java
Normal file
122
src/main/java/com/xkrs/model/entity/WeChatCode.java
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
package com.xkrs.model.entity;
|
||||||
|
|
||||||
|
import javax.persistence.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author HP
|
||||||
|
* 微信扫码实体类
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name="wechat_code_user")
|
||||||
|
public class WeChatCode {
|
||||||
|
/**
|
||||||
|
* 指定主键,建立自增序列,主键值取自序列
|
||||||
|
*/
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "wechat_code_user_seq_gen")
|
||||||
|
@SequenceGenerator(name = "wechat_code_user_seq_gen", sequenceName = "wechat_code_user_id_seq",allocationSize = 1)
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
/** 昵称 */
|
||||||
|
@Column(length = 65,columnDefinition = "varchar(65)")
|
||||||
|
private String nickName;
|
||||||
|
|
||||||
|
/** 手机号 */
|
||||||
|
@Column(length = 65,columnDefinition = "varchar(65)")
|
||||||
|
private String userPhone;
|
||||||
|
|
||||||
|
/** 用户头像 */
|
||||||
|
private String userPhoto;
|
||||||
|
|
||||||
|
/** 性别 */
|
||||||
|
@Column(length = 55,columnDefinition = "varchar(55)")
|
||||||
|
private String userSex;
|
||||||
|
|
||||||
|
/** openid */
|
||||||
|
private String openId;
|
||||||
|
|
||||||
|
/** sessionKey */
|
||||||
|
private String sessionKey;
|
||||||
|
|
||||||
|
public WeChatCode() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public WeChatCode(Integer id, String nickName, String userPhone, String userPhoto, String userSex, String openId, String sessionKey) {
|
||||||
|
this.id = id;
|
||||||
|
this.nickName = nickName;
|
||||||
|
this.userPhone = userPhone;
|
||||||
|
this.userPhoto = userPhoto;
|
||||||
|
this.userSex = userSex;
|
||||||
|
this.openId = openId;
|
||||||
|
this.sessionKey = sessionKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNickName() {
|
||||||
|
return nickName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNickName(String nickName) {
|
||||||
|
this.nickName = nickName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserPhone() {
|
||||||
|
return userPhone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserPhone(String userPhone) {
|
||||||
|
this.userPhone = userPhone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserPhoto() {
|
||||||
|
return userPhoto;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserPhoto(String userPhoto) {
|
||||||
|
this.userPhoto = userPhoto;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserSex() {
|
||||||
|
return userSex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserSex(String userSex) {
|
||||||
|
this.userSex = userSex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOpenId() {
|
||||||
|
return openId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOpenId(String openId) {
|
||||||
|
this.openId = openId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSessionKey() {
|
||||||
|
return sessionKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSessionKey(String sessionKey) {
|
||||||
|
this.sessionKey = sessionKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "WeChatCode{" +
|
||||||
|
"id=" + id +
|
||||||
|
", nickName='" + nickName + '\'' +
|
||||||
|
", userPhone='" + userPhone + '\'' +
|
||||||
|
", userPhoto='" + userPhoto + '\'' +
|
||||||
|
", userSex='" + userSex + '\'' +
|
||||||
|
", openId='" + openId + '\'' +
|
||||||
|
", sessionKey='" + sessionKey + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user