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 mysql索引问题
Jun 07 PHP
php cookies中删除的一般赋值方法
May 07 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
php不使用copy()函数复制文件的方法
Mar 13 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
Apr 15 PHP
PHP防盗链的基本思想 防盗链的设置方法
Sep 25 PHP
基于PHP实现商品成交时发送短信功能
May 11 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
Sep 22 PHP
php生成无限栏目树
Mar 16 PHP
PHP+jQuery实现即点即改功能示例
Feb 21 PHP
Laravel + Elasticsearch 实现中文搜索的方法
Feb 02 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跳转页面的几种实现方法详解
2013/06/08 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
提取字符串中年月日的函数代码
2013/11/05 Javascript
2014年50个程序员最适用的免费JQuery插件
2014/12/15 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
Python requests模块实例用法
2019/02/11 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
python实现人机五子棋
2020/03/25 Python
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
管理人员岗位职责
2015/02/14 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书
详解Python描述符的工作原理
2021/06/11 Python
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android
「Manga Time Kirara MAX」2022年5月号封面公开
2022/03/21 日漫