PHP调用微博接口实现微博登录的方法示例


Posted in PHP onSeptember 22, 2018

在平时项目开发过程中,除了注册本网站账号进行登录之外,还可以调用第三方接口进行登录网站。这里以微博登录为例。微博登录包括身份认证、用户关系以及内容传播。允许用户使用微博帐号登录访问第三方网站,分享内容,同步信息。

1、首先需要引导需要授权的用户到如下地址:

https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

如果用户同意授权,页面跳转至 YOUR_REGISTERED_REDIRECT_URI/?code=CODE:

2、接下来要根据上面得到的code来换取Access Token:

https://api.weibo.com/oauth2/access_token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=authorization_code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&code=CODE

返回值:

JSON

{
 "access_token": "SlAV32hkKG",
 "remind_in": 3600,
 "expires_in": 3600 
}

3、最后,使用获得的OAuth2.0 Access Token调用API,获取用户身份,完成用户的登录。

话不多说,直接上代码:

为了方便,我们先将get和post封装到application下的common.php中:
应用公共文件common.php:

function get( $url, $_header = NULL )
{
  $curl = curl_init();
  //curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, false); 
  if( stripos($url, 'https://') !==FALSE )
  {
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
  }

  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_HEADER, 0);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  if ( $_header != NULL )
  {
    curl_setopt($curl, CURLOPT_HTTPHEADER, $_header);
  }
  $ret  = curl_exec($curl);
  $info  = curl_getinfo($curl);
  curl_close($curl);

  if( intval( $info["http_code"] ) == 200 )
  {
    return $ret;
  }

  return false;
}
/*
 * post method
 */
function post( $url, $param )
{
   $oCurl = curl_init ();
  curl_setopt ( $oCurl, CURLOPT_SAFE_UPLOAD, false);
  if (stripos ( $url, "https://" ) !== FALSE) {
    curl_setopt ( $oCurl, CURLOPT_SSL_VERIFYPEER, FALSE );
    curl_setopt ( $oCurl, CURLOPT_SSL_VERIFYHOST, false );
  }
  
  curl_setopt ( $oCurl, CURLOPT_URL, $url );
  curl_setopt ( $oCurl, CURLOPT_RETURNTRANSFER, 1 );
  curl_setopt ( $oCurl, CURLOPT_POST, true );
  curl_setopt ( $oCurl, CURLOPT_POSTFIELDS, $param );
  $sContent = curl_exec ( $oCurl );
  $aStatus = curl_getinfo ( $oCurl );
  curl_close ( $oCurl );
  if (intval ( $aStatus ["http_code"] ) == 200) {
    return $sContent;
  } else {
    return false;
  }
}

控制器处理代码Login.php:

class Login extends \think\Controller 
{
  public function index()
  {
    $key = "****";
    $redirect_uri = "***微博应用安全域名***/?backurl=***项目本地域名***/home/login/webLogin?";
    //授权后将页面重定向到本地项目
    $redirect_uri = urlencode($redirect_uri);
    $wb_url = "https://api.weibo.com/oauth2/authorize?client_id={$key}&response_type=code&redirect_uri={$redirect_uri}";
    $this -> assign('wb_url',$wb_url);
    return view('login');
  }


  public function webLogin(){
    $key = "*****";
    //接收code值
    $code = input('get.code');
    //换取Access Token: post方式请求  替换参数: client_id, client_secret,redirect_uri, code
    $secret = "********";
    $redirect_uri = "********";
    $url = "https://api.weibo.com/oauth2/access_token?client_id={$key}&client_secret={$secret}&grant_type=authorization_code&redirect_uri={$redirect_uri}&code={$code}";
    $token = post($url, array());
    $token = json_decode($token, true);
    //获取用户信息 : get方法,替换参数: access_token, uid
    $url = "https://api.weibo.com/2/users/show.json?access_token={$token['access_token']}&uid={$token['uid']}";
    $info = get($url);
    if($info){
      echo "<p>登录成功</p>";
    }
  }
}

模板代码login.html:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>微博登录</title>
</head>
<body>
<a href="{$wb_url}" rel="external nofollow" >点击这里进行微博登录</a>
</body>
</html>

效果图:

PHP调用微博接口实现微博登录的方法示例

PHP调用微博接口实现微博登录的方法示例

PHP调用微博接口实现微博登录的方法示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
黑夜路人出的几道php笔试题
Aug 04 PHP
PHP CKEditor 上传图片实现代码
Nov 06 PHP
php中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
php中jQuery插件autocomplate的简单使用笔记
Jun 14 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
Mar 07 PHP
php中通过DirectoryIterator删除整个目录的方法
Mar 13 PHP
php简单实现查询数据库返回json数据
Apr 16 PHP
PHP中的静态变量及static静态变量使用详解
Nov 05 PHP
支付宝服务窗API接口开发php版本
Jul 20 PHP
yii使用bootstrap分页样式的实例
Jan 17 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
Oct 30 PHP
PHP如何搭建百度Ueditor富文本编辑器
Sep 21 #PHP
详解php协程知识点
Sep 21 #PHP
在php的yii2框架中整合hbase库的方法
Sep 20 #PHP
php实现在线考试系统【附源码】
Sep 18 #PHP
PHP htmlspecialchars() 函数实例代码及用法大全
Sep 18 #PHP
Laravel用户授权系统的使用方法示例
Sep 16 #PHP
Laravel中错误与异常处理的用法示例
Sep 16 #PHP
You might like
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
2020/04/14 PHP
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
jquery.cookie() 方法的使用(读取、写入、删除)
2013/12/05 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
微信小程序 Tab页切换更新数据
2017/01/05 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
2019/03/30 Javascript
详解如何使用nvm管理Node.js多版本
2019/05/06 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
2021/02/10 Javascript
python复制文件代码实现
2013/12/23 Python
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
Kears+Opencv实现简单人脸识别
2019/08/28 Python
python 字符串常用方法汇总详解
2019/09/16 Python
python环境下安装opencv库的方法
2020/03/05 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
eBay美国官网:eBay.com
2020/10/24 全球购物
求高于平均分的学生学号及成绩
2016/09/01 面试题
十八届三中全会个人学习材料
2014/02/13 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
2014年维稳工作总结
2014/11/18 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang
mysql 带多个条件的查询方式
2021/06/05 MySQL
mysql 获取时间方式
2022/03/20 MySQL