网站接入 QQ 登录整合社交账号登录

发布于 2019-05-07 19:59:00 字数 4114 浏览 2569 评论 0

QQ互联是腾讯旗下的开放平台,通过QQ互联网站主或开发者可以申请接入QQ登录,获取登录用户基本资料,用户使用QQ账号登录接入的站点或应用APP,通过分享功能,将站点内容分享到QQ、手机QQ、QQ空间、微博等平台,也可获取QQ会员信息、相册、日志、财付通等API授权。

官方网址:http://connect.qq.com/

注意:这个有别于腾讯的开放平台,虽然有些API是一样的,获取的数据也是一样的。

创建应用

我们可以使用 QQ 号码登陆 QQ 互联,然后进入管理中心,点击创建应用,在弹出的窗口中选择网站应用

填写网站接入的相关信息,你可以按照你的需求,填写这些信息,而这些信息在后面都是可以修改的,可以放心大胆的填写,其中需要注意的是平台需要验证网站,也就是在网站的首页头部 <head> 部分添加他提供的 meta

点击创建应用以后,将自动跳转到该应用,从上面可以看到该应用的 APP ID 和 APP KEY,将这两个保存下来,下面会用到,完善应用的其它信息,点击应用的基本信息,可以编辑我们刚才创建应用时填写的内容,有备案号的网站最好把备案也填上,点击图标素材,上传平台指定尺寸的图片,仅支持PNG的图片格式,这样我们就算把应用创建完成了,接下来我们使用官方的SDK,让网站接入QQ互联开放平台。

下载SDK部署代码

本教程以 QQ 官方的SDK为例,介绍如何让网站接入 QQ 互联,为什么使用SDK我想大家都明白,自己去写这些方法和函数太费时费力了,利用 SDK 可以很好的帮助我们接入和避免一些安全问题。 我使用的 PHP SDK 2.1 的版本,下载地址:http://wiki.connect.qq.com/sdk下载,里面包含了基本的Demo,我们很方便的修改代码实现网站接入。

你可以将整个 SDK 上传到你网站的服务器上,然后访问 install 目录安装 SDK,他会在 /API/comm 目录生成一个 inc.php 的配置文件,里面以 JSON 的格式保存配置信息。

注意:使用本 SDK 时,请保证您的服务器的 short_open_tag  配置为 on。

SDK目录结构

我们将 SDK 解压以后,我们会得到以下的目录结构:

Connect2.1
├─API
├─doc
├─example
├─index.php
├─install
└─Readme php 2.1.txt

我们只需要 API 文件夹下面的文件,其它文件对我们而言只需要使用的时候在看。

在服务器部署文件

我的建议是在网站的根目录创建一个 oauth 文件夹,然后在这个文件里面创建 qq 文件夹,将 SDK 中 API 里面的文件复制到 qq 目录中,部署后的目录结构如下:

/oauth/qq
    ├─class
    │    ├─ErrorCase.class.php
    │    ├─Oauth.class.php
    │    ├─QC.class.php
    │    ├─Recorder.class.php
    │    └─URL.class.php
    ├─comm
    │    ├─config.php
    │    ├─inc.php
    │    └─utils.php
    ├─storage
    └─qqConnectAPI.php

我们将 SDK 中 example/oauth 文件夹里面 callback.php 和 index.php 文件复制到 oauth/qq/ 文件夹,修改这两个文件里面引入的 qqConnectAPI.php 地址为 require_once("qqConnectAPI.php");。

注意:如果你的 comm 目录没有 inc.php 文件,你需要先安装 SDK,获取配置 SDK 的文件。

此时你可以访问 oauth/qq/ 目录,他会自动跳转到 QQ 的授权页面,当用户确认授权登陆以后,会跳转回我们设置的回调地址。

部署代码,没什么技术含量,但是如果部署的不合理,会走很多弯路,我就是在文件结构上面转了很多圈,才发觉这样的目录结构最能解决问题。

按照上面的方法,此时服务器部署的代码应该能够完成用户授权,接下我们来讲解如何获取用户的基本信息和应该保存那些重要的信息。 当用户点击QQ授权页的登陆以后,会跳转到我们设置的回调地址上面,而且会带有 2 个参数,分别是 code 和 state 代码,code 用于 SDK 从服务器获取用户的授权,state 据说是为了防止攻击,反正我不知道有什么用。

跳转到登陆授权页面

前面介绍的是直接复制 /example/oauth/ 里面的 index.php 文件,里面应该有以下的代码

require_once("qqConnectAPI.php");
$qc = new QC();
$qc->qq_login();

他会自动跳转到登陆授权页面,这其中如何实现跳转的,这里不在阐述,你可以打开 class/Oauth.class.php 文件查看其中的代码。

获取用户信息

在服务器的 callback.php 文件中,此时应该有如下的代码:

require_once("qqConnectAPI.php");
$qc = new QC();
echo $qc->qq_callback();
echo $qc->get_openid();

qq_callback() 方法返回 Access_Token,Access_Token 是我们回去用户信息的令牌,每次获取信息的时候都需要用到 access_token,也需要我们存储,不过 Access_Token 是有有效期的,Access_Token 的有效期默认是 3 个月,过期后需要用户重新授权才能获得新的Access_Token。

get_openid() 方法返回一个字符串 openid,openid 是网站上唯一对应用户身份的标识,网站需要将此 ID 进行存储便于用户下次登录时辨识其身份,或将其与用户在网站上的原有账号进行绑定。 在这个文件中,我们新加入下面的代码来获取用户详细信息:

$userinfo = $qc->get_info();
print_r($userinfo);

注意:此方法只能获取用户公开的信息,对于用户设置只能自己才能查看的信息不能获取到。 如果需要获取用户微博的资料,可以使用下面的代码

$arr = $qc->get_user_info();
print_r($arr);

你可以针对你的网站,保存用户的详细信息,然后自动为用户登陆,即可完成网站接入。

如何保存用户信息

openid 是确定用户的唯一标识符,所以我们必须存储。 对于 Access_Token 的储存,光是储存 Access_Token 是不够,还要储存 Access_Token 的有效期还有 refresh_token 信息,refresh_token 用于验证 Access_Token 的有效性。

  • access_token=FE04************************CCE2
  • expires_in=7776000
  • refresh_token=88E4************************BE14。

get_info() 方法可以获取用户的公开信息,比如昵称、地理位置、头像等,但是不能获取到用户的 QQ 号码和邮箱地址,你需要再次询问用户才能获取到完整的信息。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

qq_Yqvrrd

文章 0 评论 0

2503248646

文章 0 评论 0

浮生未歇

文章 0 评论 0

养猫人

文章 0 评论 0

第七度阳光i

文章 0 评论 0

新雨望断虹

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文