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 相关文章推荐
基于qmail的完整WEBMAIL解决方案安装详解
Oct 09 PHP
建立动态的WML站点(二)
Oct 09 PHP
THINKPHP+JS实现缩放图片式截图的实现
Mar 07 PHP
php中3des加密代码(完全与.net中的兼容)
Aug 02 PHP
php学习笔记之面向对象编程
Dec 29 PHP
Memcached常用命令以及使用说明详解
Jun 27 PHP
php中如何防止表单的重复提交
Aug 02 PHP
PHP内置过滤器FILTER使用实例
Jun 25 PHP
php内嵌函数用法实例
Mar 20 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
使用php实现从身份证中提取生日
May 09 PHP
php之可变函数的实例详解
Sep 13 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代码
2008/09/10 PHP
兼容性比较好的PHP生成缩略图的代码
2011/01/12 PHP
PHP编程风格规范分享
2014/01/15 PHP
php实现水仙花数的4个示例分享
2014/04/08 PHP
PHP 导出Excel示例分享
2014/08/18 PHP
纯php生成随机密码
2015/10/30 PHP
php可变长参数处理函数详解
2017/02/22 PHP
[对联广告] JS脚本类
2006/08/27 Javascript
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
JS、CSS加载中的小问题探讨
2013/11/26 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
实用jquery操作表单元素的简单代码
2016/07/04 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
vue项目中使用fetch的实现方法
2019/04/25 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
python获取外网ip地址的方法总结
2015/07/02 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
2016/06/16 Python
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
Java并发编程必备之Future机制
2021/06/30 Java/Android
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记
浅析python中特殊文件和特殊函数
2022/02/24 Python