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 图片加水印与上传图片加水印php类
May 12 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
Oct 03 PHP
使用Discuz关键词服务器实现PHP中文分词
Mar 11 PHP
php实现设计模式中的单例模式详解
Oct 11 PHP
php页面函数设置超时限制的方法
Dec 01 PHP
PHP开发制作一个简单的活动日程表Calendar
Jun 20 PHP
Yii视图CGridView列表用法实例分析
Jul 12 PHP
thinkPHP中配置的读取与C方法详解
Dec 05 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
yii gridview实现时间段筛选功能
Aug 15 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 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数组合并与拆分实例分析
2015/06/12 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
php使用curl下载指定大小的文件实例代码
2017/09/30 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
innerText和innerHTML 一些问题分析
2009/05/18 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
js判断浏览器是否支持严格模式的方法
2016/10/04 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
2020/11/11 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
初学python数组的处理代码
2011/01/04 Python
python分割文件的常用方法
2014/11/01 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
Python实现简易Web爬虫详解
2018/01/03 Python
爬虫代理池Python3WebSpider源代码测试过程解析
2019/12/20 Python
Pytorch 实现权重初始化
2019/12/31 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
基于python检查矩阵计算结果
2020/05/21 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
采购经理岗位职责
2014/02/16 职场文书
保护地球的标语
2014/06/17 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
音乐教师个人总结
2015/02/06 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
javascript数组includes、reduce的基本使用
2021/07/02 Javascript
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA