QQ空间扫码登录协议 Java

运行环境:

服务器:

  • Centos7.6
  • Docker + Mysql

后端:

  • IDEA2019.3.3
  • JDK1.8
  • Maven
  • lombok
  • okhttp
  • SpringBoot
  • fastjson
  • log4j

前端:

  • D2Admin
  • Axios
  • Element

只提供实现思路及部分代码,具体操作看个人发挥,g_tk算法有变化,单靠skey计算无法使用全部接口,部分接口是ok的

运行截图:

 

 

 

 

 

 

// QzoneInterface
package com.hg.QzoneInterafce;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hg.DataBean.QQCookieBean;
import com.hg.DataBean.QQProfileBean;
import com.hg.DataBean.QQRequestBean;
import com.hg.Lang.QzoneResult;
import com.hg.QzoneUtilBean.QzoneCookieKeyWord;
import com.hg.util.QzoneHelpUtil;

import java.util.List;

/**
 * @ClassName: QzoneInterface
 * @Description: 空间操作接口
 * @Author: CHK141
 * @Date: 2021/2/4/0004 1:48
 * @Mail: [email protected]
 * @Version: 1.0
 */
public interface QzoneInterface {


    // 获取个人信息
    public QQProfileBean GetProfile(QQCookieBean qqCookieBean);

    // 二维码获取账号Cookies/返回JSONObject格式的Cookies数据
    public QzoneResult GetCookies();

    // 获取新的好友请求列表
    public List<QQRequestBean> GetNewFriendsRequestList(QQCookieBean qqCookieBean);

    // 好友请求操作

    /***
     * 好友请求操作
     * @param FriendQQAccount 好友账号
     * @param OperaType 操作类型 Agree=同意,Refuse=拒绝
     * @param RefuseMsg 拒绝附加消息
     * @return 返回JSONObject对象
     */
    public JSONObject FriendsRequestOperat(String FriendQQAccount,String OperaType, String RefuseMsg);


    // 获取好友列表
    public JSONObject GetQQAccountFriendsList();

    // 获取好友总数量
    public JSONObject GetQQAccountFriendsCount();

    // 获取好友分组
    public JSONObject GetQQFriendsGroupingList();

    // 获取群聊列表
    public JSONObject GetQQGroupsList();

    //....


}
// QzoneLoginParameterBean

package com.hg.QzoneUtilBean;

import com.hg.Appliction;
import lombok.Data;
import org.apache.log4j.Logger;

import java.io.InputStream;

/**
 * @ClassName: QzoneLoginBena
 * @Description: TODO
 * @Author: CHK141
 * @Date: 2021/2/4/0004 2:25
 * @Mail: [email protected]
 * @Version: 1.0
 */
@Data
public class QzoneLoginParameterBean {
    private String ptqrtokenen;
    private String qrSign;
    private InputStream QrImageData;
    private Logger log = Logger.getLogger(Appliction.class);
}
// QQLoginBean
package com.hg.DataBean;


import lombok.Data;
import org.apache.ibatis.annotations.Mapper;

/**
 * @ClassName: LoginBean
 * @Description: TODO
 * @Author: CHK141
 * @Date: 2021/2/5/0005 19:26
 * @Mail: [email protected]
 * @Version: 1.0
 */

@Data
@Mapper
public class QQLoginBean {
    // id
    private String id;
    // qq账号
    private String uin;
    // qrSign
    private String qrSign;
    // 二维码地址
    private String qrImageUrl;
    // 状态()
    private String status;
}

 

//QzoneInterfaceImpl


package com.hg.QzoneInterafce;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hg.DataBean.*;
import com.hg.Lang.QzoneResult;
import com.hg.Mapper.*;
import com.hg.QzoneUtilBean.QzoneHTTPClientBean;
import com.hg.QzoneUtilBean.QzoneCookieKeyWord;
import com.hg.QzoneUtilBean.QzoneLoginParameterBean;
import com.hg.QzoneUtilBean.QzoneNewFriendsRequestBean;
import com.hg.Services.QQLoginService;
import com.hg.Services.QQRequestService;
import com.hg.util.QzoneEncryptUtil;
import com.hg.util.QzoneHelpUtil;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.io.*;
import java.util.ArrayList;
import java.util.List;

import static com.hg.util.QzoneEncryptUtil.Getptqrtoken;
import static com.hg.util.QzoneHelpUtil.*;

/**
 * @ClassName: QzoneInterfaceImpl
 * @Description: 空间接口实现
 * @Author: CHK141
 * @Date: 2021/2/4/0004 2:00
 * @Mail: [email protected]
 * @Version: 1.0
 */

@Component
public class QzoneInterfaceImpl implements QzoneInterface {
    // Log4j
    private static final Logger log = LoggerFactory.getLogger(QzoneInterfaceImpl.class);
    // 初始化帮助类
    QzoneHel
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是一个微信扫码登录Java代码示例: 1. 定义一个类WechatLogin,包含以下字段和方法: - appid: 微信开放平台申请的应用id - secret: 微信开放平台申请的应用密钥 - redirect_uri: 授权后重定向的回调链接地址 - scope: 应用授权作用域,snsapi_login表示只能获取用户基本信息,无需用户同意 - state: 用于防止CSRF攻击,生成随机数即可 - getQrCodeUrl(): 获取微信扫码登录的二维码链接地址 - getAccessToken(String code): 根据授权码code获取access_token ```java import java.net.URLEncoder; import java.util.UUID; public class WechatLogin { private static final String APPID = "your_appid"; private static final String SECRET = "your_secret"; private static final String REDIRECT_URI = "http://yourdomain.com/wechat_redirect"; private static final String SCOPE = "snsapi_login"; private static final String STATE = UUID.randomUUID().toString().replaceAll("-", ""); /** * 获取微信扫码登录的二维码链接地址 * @return */ public static String getQrCodeUrl() throws Exception { String url = "https://open.weixin.qq.com/connect/qrconnect?appid=" + APPID + "&redirect_uri=" + URLEncoder.encode(REDIRECT_URI, "UTF-8") + "&response_type=code&scope=" + SCOPE + "&state=" + STATE + "#wechat_redirect"; return url; } /** * 根据授权码获取access_token * @param code * @return */ public static String getAccessToken(String code) throws Exception { String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + APPID + "&secret=" + SECRET + "&code=" + code + "&grant_type=authorization_code"; String result = HttpUtils.doGet(url); JSONObject json = JSONObject.parseObject(result); String access_token = json.getString("access_token"); return access_token; } } ``` 2. 使用HttpClient发送HTTP请求,获取access_token。这里可以使用第三方库,如OkHttp或Apache HttpClient。 ```java import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class HttpUtils { public static String doGet(String url) throws Exception { HttpClient client = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(url); HttpResponse response = client.execute(httpGet); HttpEntity entity = response.getEntity(); String result = EntityUtils.toString(entity, "UTF-8"); return result; } } ``` 3. 在Controller中处理微信扫码登录的回调请求,获取授权码code,并根据code获取access_token和用户信息。 ```java import com.alibaba.fastjson.JSONObject; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; @Controller public class WechatLoginController { @RequestMapping("/wechat_redirect") public String wechatRedirect(HttpServletRequest request, Model model) throws Exception { String code = request.getParameter("code"); String access_token = WechatLogin.getAccessToken(code); String url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid + "&lang=zh_CN"; String result = HttpUtils.doGet(url); JSONObject json = JSONObject.parseObject(result); String nickname = json.getString("nickname"); String headimgurl = json.getString("headimgurl"); //TODO: 根据openid判断用户是否已经绑定,如果已经绑定则直接登录,否则跳转到绑定页面 return "bindPage"; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值