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 图片上传类代码
Jul 17 PHP
Discuz Uchome ajaxpost小技巧
Jan 04 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
PHP容易忘记的知识点分享
Apr 30 PHP
php修改NetBeans默认字体的大小
Jul 02 PHP
PHP定时更新程序设计思路分享
Jun 10 PHP
PHP 读取和编写 XML
Nov 19 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
Jan 26 PHP
laravel中命名路由的使用方法
Feb 24 PHP
php 静态属性和静态方法区别详解
Apr 09 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 PHP
PHP的重载使用魔术方法代码实例详解
Feb 26 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+mysql写的留言本
2006/10/09 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
PHP中的self关键字详解
2019/06/23 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
javascript中的float运算精度实例分析
2010/08/21 Javascript
js模拟点击事件实现代码
2012/11/06 Javascript
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
2014/09/26 NodeJs
JS实现判断碰撞的方法
2015/02/11 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
centos系统升级python 2.7.3
2014/07/03 Python
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
在Python中使用HTML模版的教程
2015/04/29 Python
Windows下使Python2.x版本的解释器与3.x共存的方法
2015/10/25 Python
Python实现对百度云的文件上传(实例讲解)
2017/10/21 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
Python的UTC时间转换讲解
2019/02/26 Python
人工神经网络算法知识点总结
2019/06/11 Python
python检查目录文件权限并修改目录文件权限的操作
2020/03/11 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
企划主管岗位职责
2013/12/12 职场文书
化学教学随笔感言
2014/02/19 职场文书
青春演讲稿范文
2014/05/08 职场文书
2014年应急工作总结
2014/12/11 职场文书
Python中with上下文管理协议的作用及用法
2022/03/18 Python