添加了小程序查询网站用户信息和微信用户信息的接口
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.tool.TokenUtil;
|
||||
import com.xkrs.dao.AppletsUserDao;
|
||||
import com.xkrs.dao.SysUserDao;
|
||||
import com.xkrs.model.entity.AppletsUser;
|
||||
import com.xkrs.model.entity.SysUserEntity;
|
||||
import com.xkrs.model.qo.SysUserQo;
|
||||
import com.xkrs.model.validation.SysUserQoInsert;
|
||||
@ -40,6 +42,9 @@ public class SysUserController {
|
||||
@Resource
|
||||
private SysUserDao sysUserDao;
|
||||
|
||||
@Resource
|
||||
private AppletsUserDao appletsUserDao;
|
||||
|
||||
/**
|
||||
* 登录用户Token验证
|
||||
* @return
|
||||
@ -276,4 +281,28 @@ public class SysUserController {
|
||||
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")
|
||||
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
|
||||
|
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