记一次QQ互联开发

本文介绍了一次QQ互联开发的经历,详细讲解了OAuth2.0的基本概念及其接入流程,并记录了在开发过程中遇到的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记一次QQ互联开发

基本知识

OAuth2.0

OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。
QQ登录OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。
QQ登录OAuth2.0采用OAuth2.0标准协议来进行用户身份验证和获取用户授权,相对于之前的OAuth1.0协议,其认证流程更简单和安全。
因此,请使用OAuth 1.0协议的网站升级为OAuth 2.0协议,升级方法详见OAuth1.0升级到OAuth2.0指引。
Tips:
如果您想对OAuth2.0开放标准进行扩展阅读,请参看:OAuth标准(英文) | OAuth维基百科(中文)

接入流程

QQ登录OAuth2.0总体处理流程如下:
Step1:申请接入,获取appid和apikey;
Step2:开发应用,并设置协作者帐号进行测试联调;
Step3:放置QQ登录按钮;
Step4:通过用户登录验证和授权,获取Access Token;
Step5:通过Access Token获取用户的OpenID;
Step6:调用OpenAPI,来请求访问或修改用户授权的资源。

文档资料

Step1:获取Authorization Code
Step2:通过Authorization Code获取Access Token
Step3:(可选)权限自动续期,获取Access Token

问题说明

在做这个接入的时候,我犯了一个错,那就是乱编填了我的回调地址。结果无法拿到必要的参数code。

使用的类和工具

HttpURLConnection

内网穿透工具

### 游戏集成QQ第三方授权登录教程 要实现QQ授权登录到游戏中,可以按照以下方法完成: #### 1. 注册并获取QQ开放平台的应用凭证 开发人员需要前往腾讯QQ互联开放平台注册账号,并创建一个新的应用。在创建过程中,需填写回调域名等相关信息。完成后,可以获得`App ID`和`App Key`作为后续接口调用的身份验证依据[^2]。 #### 2. 配置OAuth 2.0 授权流程 当用户点击“使用QQ登录”按钮时,客户端应重定向至QQ官方提供的授权URL。此URL通常形如如下结构: ```text https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id={您的App_ID}&redirect_uri={回调地址}&state={随机字符串} ``` 其中参数说明如下: - `response_type`: 值固定为`code`。 - `client_id`: 即上一步获得的`App ID`。 - `redirect_uri`: 用户授权后的跳转链接,必须与申请时一致。 - `state`: 可选字段用于防止CSRF攻击,建议设置唯一值以便校验请求合法性。 #### 3. 获取Authorization Code 并交换 Access Token 一旦用户确认授权操作后,浏览器会被重新导向回指定的`redirect_uri`,附带一个名为`code`的一次性令牌。服务器端捕获该`code`之后,向QQ发送POST请求来换取正式的访问权限(即Access Token)。示例代码片段展示如下: ```python import requests def get_access_token(code, app_id, app_key, redirect_uri): url = f"https://graph.qq.com/oauth2.0/token" params = { 'grant_type': 'authorization_code', 'client_id': app_id, 'client_secret': app_key, 'code': code, 'redirect_uri': redirect_uri } response = requests.get(url, params=params).json() return response['access_token'] ``` #### 4. 使用Access Token 查询用户OpenID 和其他资料 取得有效期内的Access Token 后,可以通过它进一步查询用户的唯一标识符——OpenID以及其他个人信息数据。具体法是先调用特定API得到加密形式下的OpenID,然后再解密还原成明文格式供内部存储或者显示用途。 ```python def fetch_openid(access_token): url = "https://graph.qq.com/oauth2.0/me" params = {'access_token': access_token} resp = requests.get(url,params=params) openid_info = eval(resp.text.replace('callback(','').replace(');','')) return openid_info["openid"] ``` #### 5. 将用户绑定至游戏账户体系内 最后,在成功提取出QQ OpenID的基础上,将其关联映射到自有数据库中的玩家录里去。如果发现新访客,则自动新建一条对应关系;如果是老顾客再次来访,则直接恢复其先前状态即可。 ```python from database import UserDB def bind_qq_user(openid): db_session = UserDB.connect() user_record = db_session.query(UserModel).filter_by(qq_openid=openid).first() if not user_record: new_user = UserModel( qq_openid=openid, created_at=datetime.now(), last_login=datetime.now()) db_session.add(new_user) db_session.commit() return {"status":True,"message":"New QQ account linked."} else: user_record.last_login = datetime.now() db_session.commit() return {"status":False,"message":"Existing QQ account reconnected."} ``` 以上就是整个基于QQ OAuth机制的游戏接入方案概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值