1.所需要的maven依赖
<!-- 第三方绑定增加架包如下:
Maven本地仓库安装自定义JAR包ipicloud-interface-api.jar(在干将技术qq群)
在cmd 输入以下命令, 回车
mvn install:install-file -Dfile=F:/Sdk4J.jar -DgroupId=com.sdk4j -DartifactId=sdk4j -Dversion=1.0 -Dpackaging=jar -->
<dependency>
<groupId>net.gplatform</groupId>
<artifactId>Sdk4J</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.2.0</version>
</dependency>
2.需要配置文件,配置文件的数据必须和
一致
配置文件如下qqconnectconfig.properties
#app_ID = 101346414
#app_KEY = 821bd7cca2b8c68cec8ad3b9b25d7314
#redirect_URI = http://219.133.11.177:8887/ptpjx/qq/loginCallBack.action
app_ID = 101504837
app_KEY = 4985bde88e991785a86158861342cbfc
redirect_URI = http://www.wangdaibus.com/qq/loginCallBack 回调地址
#app_ID = 101385467
#app_KEY = SzuIHlufmXyOMsjR
#redirect_URI = http://116.30.194.139:8831/ptpjx/qq/loginCallBack.action
scope = get_user_info,add_topic,add_one_blog,add_album,upload_pic,list_album,add_share,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idollist,add_idol,del_ido,get_tenpay_addr
baseURL = https://graph.qq.com/
getUserInfoURL = https://graph.qq.com/user/get_user_info
accessTokenURL = https://graph.qq.com/oauth2.0/token
authorizeURL = https://graph.qq.com/oauth2.0/authorize
getOpenIDURL = https://graph.qq.com/oauth2.0/me
addTopicURL = https://graph.qq.com/shuoshuo/add_topic
addBlogURL = https://graph.qq.com/blog/add_one_blog
addAlbumURL = https://graph.qq.com/photo/add_album
uploadPicURL = https://graph.qq.com/photo/upload_pic
listAlbumURL = https://graph.qq.com/photo/list_album
addShareURL = https://graph.qq.com/share/add_share
checkPageFansURL = https://graph.qq.com/user/check_page_fans
addTURL = https://graph.qq.com/t/add_t
addPicTURL = https://graph.qq.com/t/add_pic_t
delTURL = https://graph.qq.com/t/del_t
getWeiboUserInfoURL = https://graph.qq.com/user/get_info
getWeiboOtherUserInfoURL = https://graph.qq.com/user/get_other_info
getFansListURL = https://graph.qq.com/relation/get_fanslist
getIdolsListURL = https://graph.qq.com/relation/get_idollist
addIdolURL = https://graph.qq.com/relation/add_idol
delIdolURL = https://graph.qq.com/relation/del_idol
getTenpayAddrURL = https://graph.qq.com/cft_info/get_tenpay_addr
getRepostListURL = https://graph.qq.com/t/get_repost_list
version = 2.0.0.0
3.准备java回调函数
package com.ganjiangps.wangdaibus.controller.third;
import java.io.IOException;
import java.io.IOException;
import javax.annotation.Resource;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.ganjiangps.wangdaibus.common.constant.Session_Constant;
import com.ganjiangps.wangdaibus.common.controller.BaseController;
import com.ganjiangps.wangdaibus.common.response.ProcessBack;
import com.ganjiangps.wangdaibus.common.util.StringUtil;
import com.ganjiangps.wangdaibus.config.geetest.sdk.java.config.GeetVerifyUtil;
import com.ganjiangps.wangdaibus.model.PreCommonMember;
import com.ganjiangps.wangdaibus.model.PreUcenterMembers;
import com.ganjiangps.wangdaibus.model.third.PreConnectMemberBindLog;
import com.ganjiangps.wangdaibus.service.PreCommonMemberService;
import com.ganjiangps.wangdaibus.service.PreConnectMemberBindLogDetilService;
import com.ganjiangps.wangdaibus.service.PreConnectMemberBindLogService;
import com.ganjiangps.wangdaibus.service.PreUcenterMembersService;
import com.qq.connect.QQConnectException;
import com.qq.connect.api.OpenID;
import com.qq.connect.javabeans.AccessToken;
import com.qq.connect.oauth.Oauth;
@Controller
@RequestMapping("/qq")
public class UserQQLoginController extends BaseController{
@Resource
PreConnectMemberBindLogDetilService preConnectMemberBindLogDetilService; //绑定记录
@Resource
PreConnectMemberBindLogService preConnectMemberBindLogService;
@Resource
PreUcenterMembersService preUcenterMembersService;
@Resource
PreCommonMemberService preCommonMemberService;
/**
* QQ登录跳转到第三方网站
* @param @param request
* @param @param response
* @param @throws IOException
* @return void
* @author jiangxueyou
*/
@RequestMapping("/login")
public void tologin(HttpServletRequest request,HttpServletResponse response) throws IOException{
/*String url = "https://graph.qq.com/oauth2.0/authorize?client_id=101508368&redirect_uri=http://test.wangdaibus.com/qq/loginCallBack&response_type=code&state=aa954a3a30dd18785477ec3125d44059&scope=get_user_info";
response.sendRedirect(url);*/
response.setContentType("text/html;charset=utf-8");
try {
System.out.println(new Oauth().getAuthorizeURL(request));
response.sendRedirect(new Oauth().getAuthorizeURL(request));
} catch (QQConnectException e) {
e.printStackTrace();
}
}
/**
* 第三方返回进入的回调函数
* @param @param request
* @param @param response
* @param @return
* @return String
* @author jiangxueyou
*/
@RequestMapping("/loginCallBack")
public String loginCallBack(HttpServletRequest request,HttpServletResponse response){
try {
AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);
System.out.println(accessTokenObj.getAccessToken());
if(StringUtil.isNotEmpty(accessTokenObj.getAccessToken())){
String accessToken = accessTokenObj.getAccessToken();
OpenID openIDObj = new OpenID(accessToken);
String openId = openIDObj.getUserOpenID();
System.out.println(openId+"========openId======");
String biaozhi = "0"; //为1表示 已经有用户绑定过了 2表示绑定成功
/**如果这个有值, 表明是进行的是第三方绑定QQ的操作,如果没有值,说明是进行的是QQ登录操作*/
String uid = (String) session.getAttribute("qqBindUid");
if(!StringUtil.isEmpty(uid)){
//查询当前用户信息
PreCommonMember preCommonMember = preCommonMemberService.selectById(Long.valueOf(uid));
//查询当前QQ是不是有人绑定过了!如果有就提示不能绑定
PreConnectMemberBindLog pcm = preConnectMemberBindLogService.selectOne(new EntityWrapper<PreConnectMemberBindLog>()
.eq(true, "type", 1).eq(true, "uin", openId).eq(true, "isbind", 1));
if(pcm != null && pcm.getUid() != null){
biaozhi = "1";
}else{
PreConnectMemberBindLog pcm2 = preConnectMemberBindLogService.selectOne(new EntityWrapper<PreConnectMemberBindLog>()
.eq(true, "type", 1).eq(true, "uin", openId).eq(true, "isbind", 2).eq(true, "uid", preCommonMember.getUid()));
if(!StringUtil.isEmpty(pcm2)){ //就是以前绑定过但又解绑的
pcm2.setIsbind(1);
preConnectMemberBindLogService.updateById(pcm2);
preConnectMemberBindLogDetilService.insertDetil(pcm2);
biaozhi = "2";
}else{
PreConnectMemberBindLog p = new PreConnectMemberBindLog();
p.setUid(Long.valueOf(uid));
p.setUin(openId);
p.setType(1); //QQ
p.setDateline(System.currentTimeMillis());
p.setIsolduse(preCommonMember.getIsold());//0 新用户 1老用户
p.setIsbind(1);//1表示绑定 0表示没有绑定
preConnectMemberBindLogService.insert(p);
preConnectMemberBindLogDetilService.insertDetil(p);
biaozhi = "2";
}
}
request.getSession().setAttribute("QQBIND", "YES"); //表示是登录用户 跳转绑定业务
request.getSession().setAttribute("binding", biaozhi);
PreCommonMember pre = getDecryptionPreCommonMember(preCommonMember);
String avatarpathstr = preCommonMemberService.getUserAvatarpath(pre,null);
pre.setAvatarpathstr(avatarpathstr);//拼接的用户头像
request.getSession().setAttribute(Session_Constant.USER, pre); //把用户信息存进session中 并且跳转到首页
PreUcenterMembers members = preUcenterMembersService.selectOne(new EntityWrapper<PreUcenterMembers>().eq(true, "uid", preCommonMember.getUid()));
request.getSession().setAttribute(Session_Constant.USERSECURITYINFO, members);// 用户安全信息
return "redirect:/user/personalCenter/personIndex.action"; //直接跳转到个人中心首页
}
/******************************************************************以下代码说明是QQ登录*******************************************************************************************/
PreConnectMemberBindLog pcm = preConnectMemberBindLogService.selectOne(new EntityWrapper<PreConnectMemberBindLog>()
.eq(true, "type", 1).eq(true, "uin", openId).eq(true, "isbind", 1));
if(pcm != null && pcm.getUid() != null){//用户已经绑定过了,直接跳转登录页面
System.out.println("我进登录了");
//根据uid 查询用户信息,并存进session
PreCommonMember preCommonMember = preCommonMemberService.selectById(pcm.getUid());
PreCommonMember pre = getDecryptionPreCommonMember(preCommonMember);
String avatarpathstr = preCommonMemberService.getUserAvatarpath(pre,null);
pre.setAvatarpathstr(avatarpathstr);//拼接的用户头像
request.getSession().setAttribute(Session_Constant.USER, pre); //把用户信息存进session中 并且跳转到首页
//查询用户安全信息表
PreUcenterMembers members = preUcenterMembersService.selectOne(new EntityWrapper<PreUcenterMembers>().eq(true, "uid", pcm.getUid()));
request.getSession().setAttribute(Session_Constant.USERSECURITYINFO, members);// 用户安全信息
return "redirect:/";
}
else{
session.setAttribute(Session_Constant.USER_QQ_USER_CODE, openId);//存放 QQID到session
//跳转绑定用户页面
return "redirect:/qq/bindUser";
}
}else{
return "redirect:/?loginName=logout";
}
} catch (QQConnectException e) {
e.printStackTrace();
}
return "redirect:/?loginName=logout";
}
/**
* 注册并且绑定
* @param @param request
* @param @return
* @return String
* @author jiangxueyou
*/
@ResponseBody
@RequestMapping("/bindAndRegister")
public ProcessBack bindAndRegister(HttpServletRequest request){
System.out.println("我进注册并且绑定了.................");
ProcessBack processBack = new ProcessBack();
String key = request.getParameter("openId");
if(StringUtil.isEmpty(key)){
processBack.setCode(ProcessBack.FAIL_CODE);
processBack.setMessage("授权失败");
return processBack;
}
processBack=preCommonMemberService.pCUserRegisterAndBind(request,key);
return processBack;
}
@ResponseBody
@RequestMapping("/sendSms")
public ProcessBack sendSms() {
String mobile = request.getParameter("mobile");
ProcessBack processBack = GeetVerifyUtil.GeetVerify(request);
if(processBack.getCode().equals(ProcessBack.FAIL_CODE)){//滑块验证不通过
return processBack;
}
ProcessBack back = preConnectMemberBindLogService.sendSSMByRegPC(request, mobile);
return back;
}
@RequestMapping("/bindUser")
public String bindUser(HttpServletRequest request){
String openId =(String) request.getSession().getAttribute(Session_Constant.USER_QQ_USER_CODE);
session.setAttribute(Session_Constant.USER_QQ_USER_CODE, openId);
if(openId != null && StringUtil.isNotEmpty(openId)){ //说明没有去进行QQ 授权认证
session.setAttribute("whetherBindQQ", "yes");
return "redirect:/";
}else{
//跳转首页 去绑定 或者注册
return "redirect:/?loginName=logout";
}
}
}