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 checkbox复选框值的获取与checkbox默认值输出方法
May 15 PHP
解析php下载远程图片函数 可伪造来路
Jun 25 PHP
php中的strpos使用示例
Feb 27 PHP
php将字符串转化成date存入数据库的两种方式
Apr 28 PHP
php计算两个日期时间差(返回年、月、日)
Jun 19 PHP
php实现的短网址算法分享
Jun 20 PHP
php可生成缩略图的文件上传类实例
Dec 17 PHP
详细解读PHP中接口的应用
Aug 12 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
Feb 03 PHP
CodeIgniter框架基本增删改查操作示例
Mar 23 PHP
实现php删除链表中重复的结点
Sep 27 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
Sep 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正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
PHP 文件上传限制问题
2019/09/01 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
HR vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
Javascript----文件操作
2007/01/18 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
js中获取jsp表单中radio类型的值简单实例
2016/08/15 Javascript
Nodejs中解决cluster模块的多进程如何共享数据问题
2016/11/10 NodeJs
react native与webview通信的示例代码
2017/09/25 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
使用python爬虫获取黄金价格的核心代码
2018/06/13 Python
值得收藏的10道python 面试题
2019/04/15 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
python之yield和Generator深入解析
2019/09/18 Python
python将print输出的信息保留到日志文件中
2019/09/27 Python
python global和nonlocal用法解析
2020/02/03 Python
Django中日期时间型字段进行年月日时分秒分组统计
2020/11/27 Python
什么是网络协议
2016/04/07 面试题
Java模拟试题
2014/11/10 面试题
后勤岗位职责
2013/11/26 职场文书
外企财务年会演讲稿
2014/01/03 职场文书
大队干部竞选演讲稿
2014/04/28 职场文书
2015年清明节活动总结
2015/02/09 职场文书
居安思危观后感
2015/06/11 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
实习报告怎么写
2019/06/20 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android