代码实现

我这里没有使用自带的微博 phpsdk

为了可扩展性接入其他支付,我公用了一个配置文件

return [

'log' => [

'file' =>storage_path('logs/login/'.date('Y-m-d') . '.php')

],

'weibo' => [

// 微博登录相关key

'w_key' => ENV('W_KEY',''),

'w_secret' => ENV('W_SECRET',''),

'w_get_code_url' => 'https://api.weibo.com/oauth2/authorize?client_id=%d&response_type=code&redirect_uri=%s',

'w_get_access_token_url' => 'https://api.weibo.com/oauth2/access_token?client_id=%d&client_secret=%s&grant_type=authorization_code&redirect_uri=%s&code=%s',

'w_user_url' => 'https://api.weibo.com/2/users/show.json'

]

];

相关配置url 采用sprintf的方式进行拼接

核心代码如下:

控制器代码 -

namespace App\Http\Controllers\Auth;

use App\Http\Traits\LoginWeiboHandler;

use Illuminate\Http\Request;

class LoginWeiboController extends BaseController

{

use LoginWeiboHandler;

/**

* 微博登录

* 调起微博登录 - 获取code - 携带code请求accessToken - 携带token获取用户信息

*/

public function login(Request $request)

{

$code = $request->code;

if (!$code) {

return $this->getCode();

}

$result = $this->setGetWbAccessToken($code);

$access_token = $result['access_token'];

$uid = $result['uid'];

return $this->user($access_token,$uid);

// 获取用户信息

}

public function user($access_token,$uid)

{

$userInfo = $this->getUserInfo($access_token,$uid);

// 执行登录操作

$this->store($uid,'weibo',$userInfo);

}

}

实现类代码 -

namespace App\Http\Traits;

use GuzzleHttp\Client;

use GuzzleHttp\Exception\ClientException;

use App\Exceptions\LoginException;

/**

* 处理微博登录逻辑

* Class LoginWeiboHandler

* @package App\Http\Traits

*/

trait LoginWeiboHandler

{

private $key;

private $secret;

private $getCodeUrl;

private $getAccessTokenUrl;

private $host;

private $client;

public function __construct()

{

$this->client = new Client();

$this->key = config('login.weibo.w_key');

$this->secret = config('login.weibo.w_secret');

$this->getCodeUrl = config('login.weibo.w_get_code_url');

$this->getAccessTokenUrl = config('login.weibo.w_get_access_token_url');

$this->host = route('login.weibo');

}

/**

* 设置 获取 code的url

* @return string

*/

public function setWbCodeUrl()

{

$url = sprintf($this->getCodeUrl,$this->key,$this->host);

return $url;

}

/**

* @param $code string 授权后取得的code值

*/

public function setGetWbAccessToken($code)

{

if( !$code ) {

throw new LoginException([

'message' => 'CODE不存在'

]);

}

$url = sprintf($this->getAccessTokenUrl,$this->key,$this->secret,$this->host,$code);

try{

$res = $this->client->request('POST',$url)->getBody();

}catch (ClientException $e){

// 处理错误

throw new LoginException([

'message' => 'CODE已经失效'

]);

}

return json_decode($res,true);

}

/**

* 获取code

* @return \Illuminate\Http\RedirectResponse

*/

public function getCode()

{

$getCodeUrl = $this->setWbCodeUrl();

return redirect()->away($getCodeUrl);

}

/**

* 获取用户信息接口

* @param $access_token

* @param $uid

* @return mixed

* @throws LoginException

* @throws \GuzzleHttp\Exception\GuzzleException

*/

public function getUserInfo($access_token,$uid)

{

$arr = [

'access_token' => $access_token,

'uid' => $uid

];

$url = config('login.weibo.w_user_url') . '?' .http_build_query($arr);

$res = $this->client->request('GET',$url);

try{

$res = $this->client->request('GET',$url)->getBody();

}catch (ClientException $e){

// 处理错误

throw new LoginException([

'message' => '请求微博客户端出现问题,请选择更换登录方式'

]);

}

return json_decode($res,true);

}

}

微博登录界面的PHP代码,关于接入微博登录的代码实现相关推荐

  1. win7如何隐藏所有微软服务器,如何隐藏Win7登录界面的administrator用户名

    Win7之家( www.win7china.com):如何隐藏Win7登录界面的administrator用户名 很多朋友一直在用着第三方的Windows7系统盘来装机,例如下载了Ghost格式的一些 ...

  2. 微博登录界面的PHP代码,redis+php实现微博(一)注册与登录功能详解

    本文实例讲述了redis+php实现微博注册与登录功能.分享给大家供大家参考,具体如下: (一).微博功能概况 微博用户账号注册 微博用户登录 微博发布 添加微博好友(粉丝) 微博推送 微博冷数据写入 ...

  3. html写登录框中的字,一个登录界面的PS设计和HTML/CSS实现

    这样的登录界面可用在网站.桌面软件.Web软件等上面,你可以根据自己的需求改变界面配色.好的,先看看界面最终设计的效果: 1.创建登录界面的背景 在Photoshop中,选择"圆角矩形工具& ...

  4. nc6的登录界面的logo怎么替换?NC6界面颜色如何修改?

    一: IE title 风车图标修改: webapps\nc_web\WEB-INF\jsp\ncapplet.jsp 中的: IE title Yonyou NC 修改 webapps\nc_web ...

  5. web接入微博第三方登录

    微博第三方登录 最近刚好在学习第三方登录,这里先做一下微博第三方登录的记录,因为qq第三方登录必须要完成网站备案后才能进行,后面再进行补充. 大致可以分成下面几个步骤 下面根据我自己的实现过程做一下总 ...

  6. native react 集成微信登录_React Native 接入微博、微信、QQ 登录功能

    在 App 开发中我们经常需要在用户登录模块接入 SNS 登录组件,这样会大大提高用户的注册体验.特别当一个不是刚性需求 App 推广的时候,这样会很大的降低用户体验的成本,没有人愿意忍受输入邮箱.手 ...

  7. 网站接入微博快捷登录-微博开放平台

    微博开放平台地址 因为我是接入web网站微博登录功能,所以,跳过移动应用部分,向下滑动 Web网站 OAuth2.0授权,与微博登录组件. 示例 使用接口深度开发,适合后端开发人员 使用微博的OAut ...

  8. SAP S4HANA BP事务代码初始界面的ROLE和Grouping配置

    SAP S4HANA BP事务代码初始界面的ROLE和Grouping配置 SAP S/4 HANA系统里,创建供应商不再使用MK01/FK01/XK01等事务代码,而是使用BP事务代码. BP事务代 ...

  9. uni-app - 最详细 H5 网页接入微信登录功能,提供公众号配置与详细注释示例代码(移动端网页实现点击登录按钮后 调用微信公众号授权登录功能 详细讲解接入流程与详细示例代码)官方最新超级详细教程

    前言 关于 uni-app 项目中接入微信授权登录的文章鱼龙混杂,各种乱代码.过时.没注释.不讲流程原理,非常难用. 本文实现了 uni-app H5 移动端网页项目,实现微信授权登录功能,详细讲解接 ...

最新文章

  1. JVM详解之:类的加载链接和初始化
  2. string会传null吗_JVM 解剖公园(10): String.intern()
  3. Python3.6 IDLE 使用 multiprocessing.Process 不显示执行函数的打印
  4. Gym 102798A(思维) acm寒假集训日记21/12/31or22/1/1
  5. Android 《第1行代码》-所有知识点架构
  6. pycharm设置python环境_pycharm怎么配置python环境
  7. 前端如何压缩图片质量
  8. 计算机突然有一个盘打不开,电脑分区突然打不开的原因及解决方法
  9. java安装教程win7_给win7系统搭建Java环境的详细教程(图文)
  10. CSRF, XSS攻击
  11. 秒杀迅雷的linux命令行下载文件以及常用工具:wget、Prozilla、MyGet、Linuxdown、Curl、Axel
  12. 中国第一台103型电子计算机诞生于,第一台计算机诞生于几年?
  13. 优思学院|德国制造为何被受推崇?
  14. HTML学习笔记(实体+meta标签+块、行内元素+语义化标签+布局标签)
  15. 网络封包过滤之分层服务提供者(LSP)
  16. 灵魂有香气的女子李筱懿:自律,是追求更高级的快乐
  17. windows安装python虚拟环境_windows上安装python虚拟环境
  18. 03 ffprobe工具详解【全】
  19. Android(SpreadTurm)多语言版本电话录音系统报错
  20. 致我们那年青春热血的高考

热门文章

  1. 如何将视频网站中的视频插入到博客中
  2. 团队招人的笔试题,我的回答。
  3. CEGUI中文处理(补)
  4. 调用startActivityForResult,onActivityResult无响应的问题
  5. 【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)
  6. 各种过安全狗一句话***
  7. struts2 中文乱码问题
  8. linux docker搭建 minecraft 我的世界游戏服务器
  9. linux iostat 查看磁盘io利用率
  10. centos7 yum 错误 This system is not registered with an entitlement server