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开发文件系统实例讲解
Oct 09 PHP
Get或Post提交值的非法数据处理
Oct 09 PHP
模仿OSO的论坛(二)
Oct 09 PHP
php中的一个中文字符串截取函数
Feb 14 PHP
php桌面中心(四) 数据显示
Mar 11 PHP
PHP字符串处理的10个简单方法
Jun 30 PHP
在smarty模板中使用PHP函数的方法
Apr 23 PHP
php中自定义函数dump查看数组信息类似var_dump
Jan 27 PHP
PHP也能干大事之PHP中的编码解码详解
Apr 20 PHP
关于php 高并发解决的一点思路
Apr 16 PHP
PHP利用Mysql锁解决高并发的方法
Sep 04 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
Sep 11 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的Yii框架中请求与响应的处理流程
2016/03/17 PHP
javascript function、指针及内置对象
2009/02/19 Javascript
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
JavaScript 全角转半角部分
2009/10/28 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
javascript正则匹配汉字、数字、字母、下划线
2014/04/10 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
2015/11/19 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
python错误处理详解
2014/09/28 Python
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
《Python学习手册》学习总结
2018/01/17 Python
python定时关机小脚本
2018/06/20 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
int在python中的含义以及用法
2019/06/27 Python
简单了解python变量的作用域
2019/07/30 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
2020/06/06 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
爱普生美国官网:Epson美国
2018/11/05 全球购物
关于母亲节的感言
2014/02/04 职场文书
创意婚礼策划方案
2014/05/18 职场文书
学校督导评估方案
2014/06/10 职场文书
运动会致辞稿
2015/07/29 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书