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 Squid中可缓存的动态网页设计
Sep 17 PHP
用php实现的下载css文件中的图片的代码
Feb 08 PHP
了解Joomla 这款来自国外的php网站管理系统
Mar 11 PHP
PHP 安全检测代码片段(分享)
Jul 05 PHP
php页面函数设置超时限制的方法
Dec 01 PHP
php实现异步数据调用的方法
Dec 24 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
Nov 24 PHP
PHP+ajax实现获取新闻数据简单示例
May 08 PHP
可兼容php5与php7的cURL文件上传功能实例分析
May 11 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
Feb 12 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
Sep 29 PHP
如何在centos8自定义目录安装php7.3
Nov 28 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
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
php 使用file_get_contents读取大文件的方法
2014/11/13 PHP
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
Angular.js实现多个checkbox只能选择一个的方法示例
2017/02/24 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
2017/03/21 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
关于js中的鼠标事件总结
2017/07/11 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
vue router的基本使用和配置教程
2018/11/05 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
python自动点赞功能的实现思路
2020/02/26 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
如何基于python实现不邻接植花
2020/05/01 Python
Python实现上下文管理器的方法
2020/08/07 Python
python中time包实例详解
2021/02/02 Python
一套C#面试题
2013/10/09 面试题
家长对孩子的感言
2014/03/10 职场文书
关于安全演讲稿
2014/05/09 职场文书
2014年公务员工作总结
2014/11/18 职场文书
中标通知书范本
2015/04/17 职场文书
培训班开班主持词
2015/07/02 职场文书
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
Java中常用解析工具jackson及fastjson的使用
2021/06/28 Java/Android