QQ第三方登录

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";
  		}
  	}

	

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值