QQ实现第三方登陆

第三方-QQ登录流程 阅读详情
一、准备工作

接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权。

申请appid和appkey的用途

 appid :应用的唯一标识。在OAuth2.0认证过程中,appid的值即为oauth_consumer_key的值。

appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中,appkey的值即为oauth_consumer_secret的值。

申请地址: http://connect.qq.com/intro/login/

二、放置“QQ登录按钮”

此步骤自己看文档就OK了。我这里是通过在按钮添加a链接实现跳转登录

V层:index.tpl
<a href="{$openLoginUrl.connectQQ}" class="icon connect-qq"><span icon-bg2="icon_qq_n"></span>  QQ登录</a>
三、使用Authorization_Code获取Access_Token

需要进行两步:

1. 获取Authorization Code;

2. 通过Authorization Code获取Access Token

Step1:获取Authorization Code

请求地址:

PC网站:https://graph.qq.com/oauth2.0/authorize

WAP网站:https://graph.z.qq.com/moc2/authorize

请求方法:

GET

请求参数:

请求参数请包含如下内容:

参数是否必须含义
response_type必须授权类型,此值固定为“code”。
client_id必须申请QQ登录成功后,分配给应用的appid。
redirect_uri必须成功授权后的回调地址,必须是注册appid时填写的主域名下的地址,建议设置为网站首页或网站的用户中心。注意需要将url进行URLEncode。
state必须client端的状态值。用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。请务必严格按照流程检查用户与state参数状态的绑定。
scope可选

请求用户授权时向用户显示的可进行授权的列表。

可填写的值是API文档中列出的接口,以及一些动作型的授权(目前仅有:do_like),如果要填写多个接口名称,请用逗号隔开。

例如:scope=get_user_info,list_album,upload_pic,do_like

不传则默认请求对接口get_user_info进行授权。

建议控制授权项的数量,只传入必要的接口名称,因为授权项越多,用户越可能拒绝进行任何授权。

display可选

仅 PC网站 接入时使用。

用于展示的样式。不传则默认展示为PC下的样式。

如果传入“mobile”,则展示为mobile端下的样式。

g_ut可选

仅 WAP网站 接入时使用。

QQ登录页面版本(1:wml版本; 2:xhtml版本),默认值为1。

返回说明:

1. 如果用户成功登录并授权,则会跳转到指定的回调地址,并在redirect_uri地址后带上Authorization Code和原始的state值。如:

PC网站:http://graph.qq.com/demo/index.jsp?code=9A5F************************06AF&state=test

WAP网站:http://open.z.qq.com/demo/index.jsp?code=9A5F************************06AF&state=test

注意:此code会在10分钟内过期。

2. 如果用户在登录授权过程中取消登录流程,对于PC网站,登录页面直接关闭;对于WAP网站,同样跳转回指定的回调地址,并在redirect_uri地址后带上usercancel参数和原始的state值,其中usercancel值为非零,如:

http://open.z.qq.com/demo/index.jsp?usercancel=1&state=test

下面我们来构造请求地址:
C层:login.php
public function index() {
        $redirect = "/user_center/index";

        $this->smartyData['connectQQ'] = $this->model->connectQQ->getLoginUrl($this->getOpenLoginRedirectUrl(AccountType::ConnectQQ, $redirect));

        $this->renderTemplateView('login/index.tpl');
    }

接下来我对这段代码进行分析

1、 $redirect = "/user_center/index";

这是到最后登录成功后进行跳转的url,一般登录成功可以跳转的首页或者个人中心

2、 $this->getOpenLoginRedirectUrl(AccountType::ConnectQQ, $redirect);

这里我说明下 AccountType::ConnectQQ  , 这是个常量而已,我的项目中有微博登录,所以是用一个常量来判断是QQ登录还是微博登录,它们的实现过程基本一致。

我先附上这个方法的代码:

private function getOpenLoginRedirectUrl($accountType, $redirect) {
        $url = "/login/openCallback/?type=$accountType";
        if(!empty($redirect)) $url = "$url&redirect=" . rawurlencode($redirect);
        return base_url($url);
    }

此方法构造的链接是赋给请求参数 redirect_uri 的

3、 $this->model->connectQQ->getLoginUrl();

此代码的意思是调用connectQQMolde.php 里的getLoginUrl()方法,其实它返回的就是请求的url地址

M层 connectQQMolde.php:
public function getLoginUrl($redirectUrl) {
        return "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id={$this->appId}&redirect_uri=" . urlencode($redirectUrl);
    }

此时,就已经构造完了请求的url了,将此url赋给V层的index.tpl的qq图标的a链接那就OK了

Step2:通过Authorization Code获取Access Token

请求地址:

PC网站:https://graph.qq.com/oauth2.0/token

WAP网站:https://graph.z.qq.com/moc2/token

请求方法:

GET

请求参数:

请求参数请包含如下内容:

参数是否必须含义
grant_type必须授权类型,在本步骤中,此值为“authorization_code”。
client_id必须申请QQ登录成功后,分配给网站的appid。
client_secret必须申请QQ登录成功后,分配给网站的appkey。
code必须

上一步返回的authorization code。

如果用户成功登录并授权,则会跳转到指定的回调地址,并在URL中带上Authorization Code。

例如,回调地址为www.qq.com/my.php,则跳转到:

http://www.qq.com/my.php?code=520DD95263C1CFEA087******

注意此code会在10分钟内过期。

redirect_uri必须与上面一步中传入的redirect_uri保持一致。

返回说明:

如果成功返回,即可在返回包中获取到Access Token。 如:

access_token=FE04************************CCE2&expires_in=7776000&refresh_token=88E4************************BE14

参数说明 描述
access_token授权令牌,Access_Token。
expires_in该access token的有效期,单位为秒。
refresh_token在授权自动续期步骤中,获取新的Access_Token时需要提供的参数。

然后点击此链接,跳转到QQ登录界面,然后如果登录成功,就跳到 redirect_uri 的参数里 ,我这的参数的

  /login/openCallback/?type=11&redirect=/user_center/index

 此时是跳转到/login.php控制器的openCallback方法。

 我们来看一下openCallback()方法
  
public function openCallback() {
  $redirect = urldecode($this->requestParam('redirect');
    $authCode = $this->requestParam('code');
    $result = $this->model->connectQQ->getAccessToken($authCode, $this->getOpenLoginRedirectUrl($accountType, $redirect));
    $accessToken = $result['access_token'];
    $result = array_merge($result, $this->model->connectQQ->getOpenId($accessToken));
    $openId = $result['openid'];
    $loginResult = $this->model->login->openAccountLogin($accountType, $openId, $accessToken);
  if($loginResult->isOK()) {
    redirect(empty($redirect) ? '/' : $redirect);
  }
}

继续对代码进行分析:

1、 $redirect = urldecode($this->requestParam('redirect');

这个是获取参数redirect的值 这里的值为 /user_center/index

2、 $authCode = $this->requestParam('code');

这个是获取参数code的值  这里是  authorization code

3、 $result = $this->model->connectQQ->getAccessToken($authCode, $this->getOpenLoginRedirectUrl($accountType, $redirect));

$this->getOpenLoginRedirectUrl($accountType, $redirect);

这个和上面介绍的一样,这里取得结果是  /login/openCallback/?type=$accountType&/user_center/index

$this->model->connectQQ->getAccessToken();

这个方法就是调用M层的connectQQModel.php里的getAccessToke()方法,

M层:connectQQModel.php
public function getAccessToken($authCode, $redirectUrl) {
    $result = $this->callApi("https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id={$this->appId}&client_secret={$this->appKey}&code={$authCode}&redirect_uri={$redirectUrl}");
    if(isset($result['error'])) {
      throw new ConnectQQException($result['error_description'], intval($result['error']));
    }
    return $result;
  }

1、 $result = $this->callApi("https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id={$this->appId}&client_secret={$this->appKey}&code={$authCode}&redirect_uri={$redirectUrl}");

先看$this->callApi()里面的参数,此参数就是通 过Authorization Code获取Access Token的请求URL地址

接下来我们看看$this->callApi()方法,此方法是发起一个Api请求,参数$params是参数数组,$method是请求类型;

private function callApi($apiUrl, $params = array(), $method = 'GET') {
  $resultText = curl_request_text($error, $apiUrl, $params, $method);
  if(0 === strncmp('{', ltrim(substr($resultText, 0, 10)), 1)) {
    $result = json_decode($resultText, true);
  }
  else if(strpos($resultText, "callback") !== false) {
    $lpos = strpos($resultText, "(");
    $rpos = strrpos($resultText, ")");
    $errorText = substr($resultText, $lpos + 1, $rpos - $lpos -1);
    $result = json_decode($errorText, true);
  }
  else {
    parse_str($resultText, $result);
  }
  return $result;
}

$resultText = curl_request_text($error, $apiUrl, $params, $method);

先看一下这个自定义函数curl_requesr_text(),作用是 发起一个 HTTP(S) 请求, 并返回响应文本,至于有关CURL的知识可以点击链接参考我的另一篇博文去了解

http://www.cnblogs.com/it-cen/p/4240663.html ,当然也可以百度搜一下,这里我就不过多讲述了;

/**
* 发起一个 HTTP(S) 请求, 并返回响应文本
*
* @param array 错误信息: array($errorCode, $errorMessage)
* @param string url
* @param array 参数数组
* @param string 请求类型	GET|POST
* @param int 超时时间
* @param array 扩展的包头信息
* @param array $extOptions
*
* @return string
 */
function curl_request_text(&$error, $url, $params = array(), $method = 'GET', $timeout = 15, $extheaders = null, $extOptions = null)
{
  if(!function_exists('curl_init')) exit('Need to open the curl extension.');
  $method = strtoupper($method);
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
  curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
  curl_setopt($curl, CURLOPT_HEADER, false);
  switch($method)
  {
    case 'POST':
      curl_setopt($curl, CURLOPT_POST, TRUE);
      if(!empty($params))
      {
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));
      }
      break;
    case 'DELETE':
    case 'GET':
      if($method == 'DELETE')
      {
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
      }
      if(!empty($params))
      {
        $url = $url . (strpos($url, '?') ? '&' : '?') . (is_array($params) ? http_build_query($params) : $params);
      }
      break;
  }
  curl_setopt($curl, CURLINFO_HEADER_OUT, TRUE);
  curl_setopt($curl, CURLOPT_URL, $url);
  if(!empty($extheaders))
  {
    curl_setopt($curl, CURLOPT_HTTPHEADER, (array)$extheaders);
  }
  if(!empty($extOptions)) {
    foreach($extOptions as $key => $value) curl_setopt($curl, $key, $value);
  }
  $response = curl_exec($curl);

  curl_close($curl);
  return $response;
}

再回到$this->getAccessToken()方法,经过判断是否有$result['error'],如果有就代表api返回有错误,则抛出一个异常

if(isset($result['error'])) {

throw new ConnectQQException($result['error_description'], intval($result['error']));

}

return $result;

最终返回的是一个数组给C层 login.php 里openCallback()里所调用的$this->model->connectQQ->getAccessToken();

现在我们回到C层 login.php 里openCallback();

public function openCallback() {
  $redirect = urldecode($this->requestParam('redirect');
    $authCode = $this->requestParam('code');
    $result = $this->model->connectQQ->getAccessToken($authCode, $this->getOpenLoginRedirectUrl($accountType, $redirect));
    $accessToken = $result['access_token'];
    $result = array_merge($result, $this->model->connectQQ->getOpenId($accessToken));
    $openId = $result['openid'];
    $loginResult = $this->model->login->openAccountLogin($accountType, $openId, $accessToken);
  if($loginResult->isOK()) {
    redirect(empty($redirect) ? '/' : $redirect);
  }
}

4、此时到了  $accessToken = $result['access_token'];

将获得的Access Token赋给$accessToken

5、 $result = array_merge($result, $this->model->connectQQ->getOpenId($accessToken));

先看 $this->model->connectQQ->getOpenId($accessToken);这个就是用来获取openId,

先来补充些获取openId的资料:

1 请求地址

PC网站:https://graph.qq.com/oauth2.0/me

WAP网站:https://graph.z.qq.com/moc2/me

2 请求方法

GET

3 请求参数

请求参数请包含如下内容:

参数是否必须含义
access_token必须在Step1中获取到的access token。

4 返回说明

PC网站接入时,获取到用户OpenID,返回包如下:

WAP网站接入时,返回如下字符串:

client_id=100222222&openid=1704************************878C

openid是此网站上唯一对应用户身份的标识,网站可将此ID进行存储便于用户下次登录时辨识其身份,或将其与用户在网站上的原有账号进行绑定。

接下来我们看M层connectQQModel.php的getOpenId()方法:

M层 connectQQModel.php:
public function getOpenId($accessToken) {
    $result = $this->callApi("https://graph.qq.com/oauth2.0/me?access_token={$accessToken}");
    if(isset($result['error'])) {
      throw new ConnectQQException($result['error_description'], intval($result['error']));
    }
    return $result;
  }

此方法还是调用了callApi()方法 发起Api请求,返回的是一个数组,具体的和上面所有的获取Access Token的流程一样;

继续返回 C层 login.php 里openCallback();

public function openCallback() {
  $redirect = urldecode($this->requestParam('redirect');
    $authCode = $this->requestParam('code');
    $result = $this->model->connectQQ->getAccessToken($authCode, $this->getOpenLoginRedirectUrl($accountType, $redirect));
    $accessToken = $result['access_token'];
    $result = array_merge($result, $this->model->connectQQ->getOpenId($accessToken));
    $openId = $result['openid'];
    $loginResult = $this->model->login->openAccountLogin($accountType, $openId, $accessToken);
  if($loginResult->isOK()) {
    redirect(empty($redirect) ? '/' : $redirect);
  }
}

然后就是获取到了$openId;

openID的作用:openid是此网站上唯一对应用户身份的标识,网站可将此ID进行存储便于用户下次登录时辨识其身份,或将其与用户在网站上的原有账号进行绑定。

接下来就是 $loginResult = $this->model->login->openAccountLogin($accountType, $openId, $accessToken);  也就是通过$openId和$accessToken查询下用户表是否有对应的用户,如果没有就进行绑定啊或者直接存储啊,也就是一系列登录绑定的逻辑了,这里我就不多说了,大家都应该会。


Java 第三方登录(微信 & QQ) 官方文档: 微信(appid和secret)微信网页开发 /网页授权 QQ(appid和appkey)QQ互联 | 网站开发流程 一、填写审核信息 1. 申请开发者身份,以企业名义申请。申请地址: 微信开放平台(微信开放平台) QQ互联(QQ互联官网首页) 2. 填写网站审核资料 备案号查询网站(https://beian.miit.gov.cn/#/Integrated/recordQuery) 网站名称、网站地址、主办单位名称、网站地址备案号需要和备案号网站查询结果一致。 阅读详情

相关推荐

记录--你的网站如何接入QQ,微信登录

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 主要实现步骤 对接第三方平台,获取第三方平台的用户信息。 利用该用户信息,完成本应用的注册。 qq登录接入 接入前的配置 qq互联 登录后,点击头像,进行开发者信息填写,等待审核。 邮箱验证后,等待审核。 审核通过后,然后就可以创建应用了。 然后填写一些网站信息,等待审核。审核通过后,即可使用。 开始接入 导入qq登录的...

林恒的博客 2304

第三方的登录----微信登录实现流程

一、微信登录 1、客户端授权 - 授权码模式 客户端必须得到用户的授权,才能获得令牌,OAuth2.0定义了四种授权方式: 1、授权码模式(authorization code) 2、简化模式(implicit) 3、密码模式(resource owner password credentials) 4、客户端模式(client credentials) 这里,我们主要介绍一下授权码模式: 授权码模式是功能最完整,流程最严密...

Rk的博客 2万+

网站前后端分离情况下如何实现QQ微信等第三方登陆

本文转自Fun言网:https://funyan.cn/p/1705.html 前言 最近在弄第三方登录,实现起来很简单,就是调几个接口获取个人信息即可,详细了解:maven项目整合QQauth2.0第三方登录详细说明,然后因为本网站是前后端分离的,所以不能再回调接口那里直接跳转到我想要的页面,因为我的接口都是通过Ajax进行前后端通信的,查阅了很多资料,有说用websocket的,有用前后端验证的,众说纷纭等等,然后我就想,可不可以让第三方应用的回调地址是一个html,然后我在html再调接口呢,这样

renhandong321的博客 2315

第三方登录(QQ登录)开发流程详解

对于整个流程的详细文档可以到QQ互联官网( http://wiki.connect.qq.com )查看,我这里就简单地进行描述,主要是分析代码的实现过程。 我用的是CI框架(MVC模式),模板引擎用的是smarty。 下图为整个接入流程(很像微信): 一、准备工作 接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授...

henrylinzhenni的博客 557

易灵思Ti60F100 FPGA的HyperRAM实战:从硬件连接到Native接口时序调试

本文详细介绍了易灵思Ti60F100 FPGA内置HyperRAM控制器的实战应用。文章从硬件设计要点(如400MHz+信号完整性、等长匹配)切入,重点解析了如何通过Interface Designer配置高效的Native接口,并分享了其时序详解与调试技巧,为开发者提供了一份从硬件连接到软件调试的深度指南。

weixin_29168153的博客 454

OSMDroid 切换地图不更新的问题

用OSMDroid加载Google地图的时候 需要有按钮切换不同图层的地图,如果发现调用了mMapView.setTileSource(ITileSource aTileSource)方法的时候发现地图View没有更新的话,可能是因为两个实例化TileSource对象其子类BitmapTileSourceBase这个类的aName成员变量值一样导致的地图在setTileSource出现不更新问题,...

godoge的博客 1039

QQ第三方登陆实现

最近由于项目需要,我用到了QQ的网站和移动端的第三方登陆,这里我只着重介绍网站的。 一、QQ第三方登陆申请历程 如果你和我的需求相同,同时需要移动端和网站的应用,请一定要按照以下方式申请,可以保证你网站和移动端的appId相同,此处我多次咨询客服,不得不吐槽下qq互联网站的垃圾,登陆反映慢而且几乎没有任何内容提示,出错也不好改,导致我多次申请,且审核很慢,以下是客服回复的关键内容: ...

小张的老头儿的博客 4840

Nordic开发者必备:SEGGER Embedded Studio免费许可证申请与配置全攻略

本文为Nordic芯片开发者提供了SEGGER Embedded Studio(SES)集成开发环境的详细配置指南。内容涵盖免费许可证的合规申请流程、项目创建、Nordic SDK集成,以及编辑器优化、构建调试配置、RTT日志输出等核心功能的高效设置,旨在帮助开发者构建深度优化的专业开发环境,显著提升嵌入式开发效率。

cheese的博客 353

QQ和新浪微博登陆第三方的简单实现

一、微博登陆第三方 0、去开发平台完成开发者认证:http://open.weibo.com/developers/basicinfo 创建一个示例应用,获取APPKey 1、登陆有两种方式:js+html和WBML部署。以js+html为例,申请到APPKey之后,引入js,要替换掉appkey参数 <script src...

weixin_34179762的博客 207

TLSR8258蓝牙Mesh实战:从SDK下载到自定义通信指令全流程(附避坑指南)

本文详细介绍了TLSR8258蓝牙Mesh开发的完整流程,从SDK下载、环境搭建到自定义通信指令的实现。通过实战案例和避坑指南,帮助开发者快速掌握低功耗蓝牙Mesh网络构建技巧,适用于智能家居、工业监控等物联网场景。

weixin_29176179的博客 199

恶意代码分析实战——使用Apatedns和Inetsim模拟网络环境

恶意代码分析实战——使用Apatedns和Inetsim模拟网络环境 注:本次实验主要是《恶意代码分析实战》一书中进入动态恶意代码分析篇章的开始,主要通过Apatedns以及Inetsim来模拟为恶意代码提供其需要的网络环境,本次实验以Lab01-03.exe为例。 一、实验环境及工具。 Vmware虚拟机:win10(win7)、kali 主要工具:Apatedns、Inetsim 二、工具的安装下载 1、Apatedns:需安装至windows虚拟机客户端(win10,win7均可) 下载地址:http

妙蛙种子吃了都会妙妙秒的妙脆角的博客 7934

j2ee中实现QQ第三方登陆

最近接触了一些第三方登陆的东西,弄的真是一个头,两个大>. 今天,终于把腾讯第三方登陆调试通了,做一个记录,顺便发发牢骚。 QQ互联官网:http://connect.qq.com/ 申请之类的就不多说了,没什么难点,主要记录一下代码方面的东西。 看官方文档的时候写的太详细,太复杂了。看了一堆没用的,和误导的。 由于项目中用的是自定义的图标,所以没有用Js SDK(后来才知道好像官方的j

Zemo 学习笔记 3902

Windows11 - Ubuntu 双系统及 ROS、ROS2 安装

在本教程中,我们将使用 Ubuntu 20.04 版本,该版本使用了新的 Ubuntu 桌面安装程序,该程序将包含在今后发布的所有 Ubuntu 版本中。如果你选择了这个选项,你会看到一个简单的界面,允许你选择要安装Ubuntu的硬盘,并通过滑块来决定你希望Ubuntu使用的磁盘空间大小。如果你的电脑有多个硬盘驱动器,那么只要它们各自有自己的驱动器,这个选项就能让你在安装 Ubuntu 的同时安装现有的操作系统。在此屏幕上,系统会提示您输入您的姓名和您的计算机名称,以显示在网络上。

机器人控制与仿真应用 4507

第三方APP实现QQ登陆

现在很多App都会实现第三方登陆,大部分是QQ和微信 这里先扯一下QQ(微信还在审核,蛋疼),看了一下网上的都是把企鹅的开发文档那里给粘贴复制了一下 说实话,看着文档满满的吐槽public void getUserInfo() { mTencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO, null, Constants.HTTP_GET, n

Krisez的博客 6859

YOLOv8+BiFPN双向特征金字塔:多尺度目标检测精度提升28%的实战教程

双向特征金字塔网络(BiFPN)是一种强化多尺度特征融合支持“自顶向下+自底向上”的双向特征流动,同时保留不同尺度的细节信息;引入加权融合机制,自动学习不同特征的重要性权重;裁剪冗余节点,在轻量化的同时提升融合效率。

m0_64661770的博客 492

OceanBase容量统计:租户、数据库、表大小

🍎 数据库版本:OceanBase V4。

Sebastien23的博客 1397

实现第三方QQ的登陆

public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private static final String APP_ID = "1106162590";//官方获取的APPID private Tencent mTen

LeeDaDaDa的博客 521

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

laravel实现第三方登陆(qq登陆)

首先composer安装依赖: composer require socialiteproviders/qq 注册服务提供者(同时注释掉原有的Socialite提供者): 'providers' =&gt; [ // 移除 'Laravel\Socialite\SocialiteServiceProvider', SocialiteProviders\Manager\Servi...

weixin_43981105的博客 364

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java实现QQ、微信等第三方账号登陆

多账户的统一登录 名称解释 这里的多账户区别于系统级别的,我们讲的多账户系统是指,在我们互联网应用当中,我们的应用会使用多个第三方账号进行登录,比如现在常用的APP:网易、微信、QQ等等。 内容 通过这一篇文章: 可以学到:多用户下面的技术方案细节,以及相应的表设计,流程设计。 不可以学到:与其他文章一样,我这里不会有具体代码实现细节,方案做的对,代码咋写都不会太烂。 架构演进 创业初期 归结为创业初期是因为这个时候用户量比较少,甚至还没有接入上面所说的其他第三方的账户系

风水道人 1435

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

PHP通过第三方聚合实现QQ登陆教程

一个简单的QQ登陆案例,你只需要更改目录下的“Oauth.config.php”部分配置信息即可快速实现登陆,此外接口无需通过官方审核,除QQ登陆外还支持Microsoft,Sina,Baidu,Alipay,Weixin登陆资源下载:PHP通过第三方聚合实现QQ登陆-PHP文档类资源-优快云文库在线体验:QQ通过聚合登陆案例 (smyzj.cn)...

DCTsmcloud的博客 362

JavaWeb实现QQ第三方登陆

JavaWeb实现QQ第三方登陆

会飞的鱼 2467

第三方登录(QQ登陆)实现

废话少说,咱们直奔主题! 对于整个流程的详细文档可以到QQ互联官网([http://wiki.connect.qq.com])查看,我这里就简单地进行描述,主要是分析代码的实现过程。 本次流程是基于CI框架下实现的。 下图为整个接入流程: 一、准备工作接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权。

丿靈魂灬燈芐舞的博客 5902

基于python的QQ第三方登陆实现工具类

基于python的QQ第三方登陆 在做第三方登陆时,一共有如下的步骤 首先我们要获取QQ服务器的登陆地址 用户进行登陆 QQ服务器返回用户的对应code给前端 前端将用户code传输到后端 服务器获取到code,然后拼接url地址,请求到QQ服务器 QQ服务器返回用户对应的openid 后台根据openid进行数据库查询,查看是否为第一次使用QQ登陆 第一次使用QQ登陆,绑定用户或者...

刘小义的博客 1841

php 实现QQ第三方授权登陆

步骤: 1.申请接口:到https://connect.qq.com/ 申请接口,填写资质。 2.下载对应的sdk,放到vender下面 3.创建应用,记录appid,appkey,回调地址等 实现代码: class SnsLogin{ private $config=[ 'app_key'=&gt;'', 'app_secret'=&gt;'', 's...

taotaobaobei的博客 1090

实现 QQ JS SDK 第三方登陆

原文链接:https://www.langhuaquan.com/blog/18.html //HTML <ul class="clearfix"> <li> <a href='https://graph.qq.com/oauth2.0/authorize?clien...

justinytsoft的博客 1953

【QQ和新浪微博登陆第三方的简单实现】

一、微博登陆第三方 0、去开发平台完成开发者认证:链接地址 创建一个示例应用,获取APPKey type="text/javascript" charset="utf-8"> 复制代码 2、部署html和js WB2.anyWhere(function(W){     W.widget.connec

u014714340的专栏 735
上一篇: Linux常用20个命令
admin_long
博客等级 码龄10年 4粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值