thinkphp 3.23 第三方登录sdk集成包
本集成包在官方包上扩展了支付宝登录和微信,支持最新的3.23版本
config
/* URL配置 */'URL_CASE_INSENSITIVE' => true, //默认false 表示URL区分大小写 true则表示不区分大小写'URL_MODEL' => 3, //URL模式'VAR_URL_PARAMS' => '', // PATHINFO URL参数变量'URL_PATHINFO_DEPR' => '/', //PATHINFO URL分割符/* 加载扩展配置文件 */'LOAD_EXT_CONFIG' => 'sdk_config',
sdk_config
<?php// +----------------------------------------------------------------------// | LTHINK [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2015-2016 http://LTHINK.cn All rights reserved.// +----------------------------------------------------------------------// | Author: 涛哥 <liangtao.gz@foxmail.com>// +----------------------------------------------------------------------// | sdk_config.php 2015-12-01// +----------------------------------------------------------------------//定义回调URL通用的URLdefine('URL_CALLBACK', 'http://' . $_SERVER['SERVER_NAME'] . '?s=/User/Index/callback');return array(//支付宝登录'THINK_SDK_ALIPAY' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'alipay',),//微信登录'THINK_SDK_WEIXIN' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'weixin',),//腾讯QQ登录配置'THINK_SDK_QQ' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'qq',),//腾讯微博配置'THINK_SDK_TENCENT' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'tencent',),//新浪微博配置'THINK_SDK_SINA' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'sina',),//网易微博配置'THINK_SDK_T163' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 't163',),//人人网配置'THINK_SDK_RENREN' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'renren',),//360配置'THINK_SDK_X360' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'x360',),//豆瓣配置'THINK_SDK_DOUBAN' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'douban',),//Github配置'THINK_SDK_GITHUB' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'github',),//Google配置'THINK_SDK_GOOGLE' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'google',),//MSN配置'THINK_SDK_MSN' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'msn',),//点点配置'THINK_SDK_DIANDIAN' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'diandian',),//淘宝网配置'THINK_SDK_TAOBAO' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'taobao',),//百度配置'THINK_SDK_BAIDU' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'baidu',),//开心网配置'THINK_SDK_KAIXIN' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'kaixin',),//搜狐微博配置'THINK_SDK_SOHU' => array('APP_KEY' => '', //应用注册成功后分配的 APP ID'APP_SECRET' => '', //应用注册成功后分配的KEY'CALLBACK' => URL_CALLBACK . 'sohu',),);
IndexController
<?php// +----------------------------------------------------------------------// | LTHINK [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2015-2016 http://LTHINK.cn All rights reserved.// +----------------------------------------------------------------------// | Author: 涛哥 <liangtao.gz@foxmail.com>// +----------------------------------------------------------------------// IndexAction.class.php 2013-02-25namespace User\Controller;use Think\Controller;use LT\ThinkSDK\ThinkOauth;Header('Content-Type: text/html; charset=utf-8');class IndexController extends Controller{//SNS登录首页public function index(){lt(URL_CALLBACK);$this->display();}//登录地址public function login($type = null){empty($type) && $this->error('参数错误');//加载ThinkOauth类并实例化一个对象$sns = ThinkOauth::getInstance($type);//跳转到授权页面redirect($sns->getRequestCodeURL());}//授权回调地址public function callback($type = null, $code = null){(empty($type) || empty($code)) && $this->error('参数错误');//加载ThinkOauth类并实例化一个对象$sns = ThinkOauth::getInstance($type);//腾讯微博需传递的额外参数$extend = null;if ($type == 'tencent') {$extend = array('openid' => $this->_get('openid'), 'openkey' => $this->_get('openkey'));}//请妥善保管这里获取到的Token信息,方便以后API调用//调用方法,实例化SDK对象的时候直接作为构造函数的第二个参数传入//如: $qq = ThinkOauth::getInstance('qq', $token);$token = $sns->getAccessToken($code, $extend);//获取当前登录用户信息if (is_array($token)) {$user_info = A('Type', 'Event')->$type($token);echo("<h1>恭喜!使用 {$type} 用户登录成功</h1><br>");echo("授权信息为:<br>");dump($token);echo("当前登录用户信息为:<br>");dump($user_info);}}}复制
TypeEvent.class
<?php// +----------------------------------------------------------------------// | LTHINK [ WE CAN DO IT JUST THINK ]// +----------------------------------------------------------------------// | Copyright (c) 2015-2016 http://LTHINK.cn All rights reserved.// +----------------------------------------------------------------------// | Author: 涛哥 <liangtao.gz@foxmail.com>// +----------------------------------------------------------------------// TypeEvent.class.php 2015-12-02namespace User\Event;use LT\ThinkSDK\ThinkOauth;Header('Content-Type: text/html; charset=utf-8');class TypeEvent{//登录成功,获取腾讯QQ用户信息public function qq($token){$qq = ThinkOauth::getInstance('qq', $token);$data = $qq->call('user/get_user_info');if ($data['ret'] == 0) {$userInfo['type'] = 'QQ';$userInfo['name'] = $data['nickname'];$userInfo['nick'] = $data['nickname'];$userInfo['head'] = $data['figureurl_2'];return $userInfo;} else {throw_exception("获取腾讯QQ用户信息失败:{$data['msg']}");}}//登录成功,获取腾讯微博用户信息public function tencent($token){$tencent = ThinkOauth::getInstance('tencent', $token);$data = $tencent->call('user/info');if ($data['ret'] == 0) {$userInfo['type'] = 'TENCENT';$userInfo['name'] = $data['data']['name'];$userInfo['nick'] = $data['data']['nick'];$userInfo['head'] = $data['data']['head'];return $userInfo;} else {throw_exception("获取腾讯微博用户信息失败:{$data['msg']}");}}//登录成功,获取新浪微博用户信息public function sina($token){$sina = ThinkOauth::getInstance('sina', $token);$data = $sina->call('users/show', "uid={$sina->openid()}");if ($data['error_code'] == 0) {$userInfo['type'] = 'SINA';$userInfo['name'] = $data['name'];$userInfo['nick'] = $data['screen_name'];$userInfo['head'] = $data['avatar_large'];return $userInfo;} else {throw_exception("获取新浪微博用户信息失败:{$data['error']}");}}//登录成功,获取网易微博用户信息public function t163($token){$t163 = ThinkOauth::getInstance('t163', $token);$data = $t163->call('users/show');if ($data['error_code'] == 0) {$userInfo['type'] = 'T163';$userInfo['name'] = $data['name'];$userInfo['nick'] = $data['screen_name'];$userInfo['head'] = str_replace('w=48&h=48', 'w=180&h=180', $data['profile_image_url']);return $userInfo;} else {throw_exception("获取网易微博用户信息失败:{$data['error']}");}}//登录成功,获取人人网用户信息public function renren($token){$renren = ThinkOauth::getInstance('renren', $token);$data = $renren->call('users.getInfo');if (!isset($data['error_code'])) {$userInfo['type'] = 'RENREN';$userInfo['name'] = $data[0]['name'];$userInfo['nick'] = $data[0]['name'];$userInfo['head'] = $data[0]['headurl'];return $userInfo;} else {throw_exception("获取人人网用户信息失败:{$data['error_msg']}");}}//登录成功,获取360用户信息public function x360($token){$x360 = ThinkOauth::getInstance('x360', $token);$data = $x360->call('user/me');if ($data['error_code'] == 0) {$userInfo['type'] = 'X360';$userInfo['name'] = $data['name'];$userInfo['nick'] = $data['name'];$userInfo['head'] = $data['avatar'];return $userInfo;} else {throw_exception("获取360用户信息失败:{$data['error']}");}}//登录成功,获取豆瓣用户信息public function douban($token){$douban = ThinkOauth::getInstance('douban', $token);$data = $douban->call('user/~me');if (empty($data['code'])) {$userInfo['type'] = 'DOUBAN';$userInfo['name'] = $data['name'];$userInfo['nick'] = $data['name'];$userInfo['head'] = $data['avatar'];return $userInfo;} else {throw_exception("获取豆瓣用户信息失败:{$data['msg']}");}}//登录成功,获取Github用户信息public function github($token){$github = ThinkOauth::getInstance('github', $token);$data = $github->call('user');if (empty($data['code'])) {$userInfo['type'] = 'GITHUB';$userInfo['name'] = $data['login'];$userInfo['nick'] = $data['name'];$userInfo['head'] = $data['avatar_url'];return $userInfo;} else {throw_exception("获取Github用户信息失败:{$data}");}}//登录成功,获取Google用户信息public function google($token){$google = ThinkOauth::getInstance('google', $token);$data = $google->call('userinfo');if (!empty($data['id'])) {$userInfo['type'] = 'GOOGLE';$userInfo['name'] = $data['name'];$userInfo['nick'] = $data['name'];$userInfo['head'] = $data['picture'];return $userInfo;} else {throw_exception("获取Google用户信息失败:{$data}");}}//登录成功,获取Google用户信息public function msn($token){$msn = ThinkOauth::getInstance('msn', $token);$data = $msn->call('me');if (!empty($data['id'])) {$userInfo['type'] = 'MSN';$userInfo['name'] = $data['name'];$userInfo['nick'] = $data['name'];$userInfo['head'] = '微软暂未提供头像URL,请通过 me/picture 接口下载';return $userInfo;} else {throw_exception("获取msn用户信息失败:{$data}");}}//登录成功,获取点点用户信息public function diandian($token){$diandian = ThinkOauth::getInstance('diandian', $token);$data = $diandian->call('user/info');if (!empty($data['meta']['status']) && $data['meta']['status'] == 200) {$userInfo['type'] = 'DIANDIAN';$userInfo['name'] = $data['response']['name'];$userInfo['nick'] = $data['response']['name'];$userInfo['head'] = "https://api.diandian.com/v1/blog/{$data['response']['blogs'][0]['blogUuid']}/avatar/144";return $userInfo;} else {throw_exception("获取点点用户信息失败:{$data}");}}//登录成功,获取淘宝网用户信息public function taobao($token){$taobao = ThinkOauth::getInstance('taobao', $token);$fields = 'user_id,nick,sex,buyer_credit,avatar,has_shop,vip_info';$data = $taobao->call('taobao.user.buyer.get', "fields={$fields}");if (!empty($data['user_buyer_get_response']['user'])) {$user = $data['user_buyer_get_response']['user'];$userInfo['type'] = 'TAOBAO';$userInfo['name'] = $user['user_id'];$userInfo['nick'] = $user['nick'];$userInfo['head'] = $user['avatar'];return $userInfo;} else {throw_exception("获取淘宝网用户信息失败:{$data['error_response']['msg']}");}}//登录成功,获取百度用户信息public function baidu($token){$baidu = ThinkOauth::getInstance('baidu', $token);$data = $baidu->call('passport/users/getLoggedInUser');if (!empty($data['uid'])) {$userInfo['type'] = 'BAIDU';$userInfo['name'] = $data['uid'];$userInfo['nick'] = $data['uname'];$userInfo['head'] = "http://tb.himg.baidu.com/sys/portrait/item/{$data['portrait']}";return $userInfo;} else {throw_exception("获取百度用户信息失败:{$data['error_msg']}");}}//登录成功,获取开心网用户信息public function kaixin($token){$kaixin = ThinkOauth::getInstance('kaixin', $token);$data = $kaixin->call('users/me');if (!empty($data['uid'])) {$userInfo['type'] = 'KAIXIN';$userInfo['name'] = $data['uid'];$userInfo['nick'] = $data['name'];$userInfo['head'] = $data['logo50'];return $userInfo;} else {throw_exception("获取开心网用户信息失败:{$data['error']}");}}//登录成功,获取搜狐用户信息public function sohu($token){$sohu = ThinkOauth::getInstance('sohu', $token);$data = $sohu->call('i/prv/1/user/get-basic-info');if ('success' == $data['message'] && !empty($data['data'])) {$userInfo['type'] = 'SOHU';$userInfo['name'] = $data['data']['open_id'];$userInfo['nick'] = $data['data']['nick'];$userInfo['head'] = $data['data']['icon'];return $userInfo;} else {throw_exception("获取搜狐用户信息失败:{$data['message']}");}}}复制
使用方式:
1、使用命名空间
use LT\ThinkSDK\ThinkOauth;
2、设置三方登录的类别并赋予一个变量
$type = ThinkOauth::getInstance('qq');
3、设置配置文件
'THINK_SDK_(TYPE)' => array(
'APP_KEY' => '', //应用注册成功后分配的 APP ID
'APP_SECRET' => '', //应用注册成功后分配的KEY
'CALLBACK' => '', //注册应用填写的callback
),
上文中的(TYPE)为设置的类别,其值目前有以下几个:
//支付宝登录 THINK_SDK_ALIPAY
//微信登录 THINK_SDK_WEIXIN
//腾讯QQ登录配置 THINK_SDK_QQ
// 用户基本信息API接口 user/get_user_info
//腾讯微博配置 THINK_SDK_TENCENT
// 用户基本信息API接口 user/info
//新浪微博配 THINK_SDK_SINA
// 用户基本信息API接口 users/show。附加参数:'uid='.$obj->openid()
//网易微博配置 THINK_SDK_T163
// 用户基本信息API接口 users/show
//人人网配置 THINK_SDK_RENREN
// 用户基本信息API接口 users.getInfo
//360配置 THINK_SDK_X360
// 用户基本信息API接口 user/me
//豆瓣配置 THINK_SDK_DOUBAN
// 用户基本信息API接口 user/~me
//Github配置 THINK_SDK_GITHUB
// 用户基本信息API接口 user
//Google配置 THINK_SDK_GOOGLE
// 用户基本信息API接口 userinfo
//MSN配置 THINK_SDK_MSN
// 用户基本信息API接口 msn。附加参数:token
//点点配置 THINK_SDK_DIANDIAN
// 用户基本信息API接口 user/info
//淘宝网配置 THINK_SDK_TAOBAO
// 用户基本信息API接口 taobao.user.buyer.get。附加参数:'fields=user_id,nick,sex,buyer_credit,avatar,has_shop,vip_info'
//百度配置 THINK_SDK_BAIDU
// 用户基本信息API接口 passport/users/getLoggedInUser
// 注意,百度的头像位置是http://tb.himg.baidu.com/sys/portrait/item/{$data['portrait']}
//开心网配置 THINK_SDK_KAIXIN
// 用户基本信息API接口 users/me
//搜狐微博配置 THINK_SDK_SOHU
// 用户基本信息API接口 i/prv/1/user/get-basic-info
4、实例化一个登录页面
redirect($type->getRequestCodeURL());
这里的$type是第二部获取的结果
5、回调页面
$code = $this->get('code');
$type = 'QQ';
$sns = ThinkOauth::getInstance($type);
//腾讯微博需传递的额外参数
$extend = null;
if($type == 'tencent'){
$extend = array('openid' => $this->_get('openid'), 'openkey' => $this->_get('openkey'));
}
//请妥善保管这里获取到的Token信息,方便以后API调用
//调用方法,实例化SDK对象的时候直接作为构造函数的第二个参数传入
//如: $qq = ThinkOauth::getInstance('qq', $token);
$token = $sns->getAccessToken($code , $extend);
//获取当前登录用户信息
if(is_array($token)){
$data = $sns->call('user/get_user_info');
if($data['ret'] == 0){
$userInfo['type'] = 'QQ';
$userInfo['name'] = $data['nickname'];
$userInfo['nick'] = $data['nickname'];
$userInfo['head'] = $data['figureurl_2'];
// 此处的$userInfo就是需要的用户信息
} else {
E('获取腾讯QQ用户信息失败 : '.$data['msg']);
}
}
thinkphp 3.23 第三方登录sdk集成包的更多相关文章
- 第三方登录SDK
紧接着上次的第三方登录文档,这一波又来了. 一.使用qq登录https://connect.qq.com/ 首次登录的话会跳转到应用开发者注册,自己测试的话选择个人.下面的各项自己按真实情况填写. 注 ...
- 使用cocoaPods一键集成第三方登录(新浪微博,qq,微信)
第三方登录是现在app很常用的功能,而这个功能我已经写过两三次了...每次都写大同小异的代码真的是很痛苦,而且每次都要根据说明去添加那些依赖库,配置linkFlag什么的,完全是体力活,所以一直想把这 ...
- 史上最全的整合第三方登录的工具JustAuth
JustAuth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录SDK,让登录变得So easy! 参考图例 授权gitee 授权github 授权weibo 授权钉 ...
- react-native 的微信SDK辅助包,支持微信登录、微信分享、微信支付
微信SDK集成示例,现已完成微信授权登录,之后将陆续包装分享等其他功能. ReactNative高级交流群 127482131 或访问 http://blog.1ygowu.com ReactNat ...
- iOS无处不在详解iOS集成第三方登录(SSO授权登录无需密码)
链接地址:http://www.it165.net/pro/html/201408/18884.html 1.前言 不多说,第三登录无处不在!必备技能,今天以新浪微博为例. 这是上次写的iOS第三方社 ...
- Django rest framework集成微博第三方登录
Django restframework 集成第三方登录(微博.微信.QQ等) 友情链接 python-social-auth-app官方文档 微博开放者平台 QQ开放者平台 准备工作 1.注册微博开 ...
- Android 集成支付宝第三方登录
前言: 在集成支付宝支付的时候遇到一点小麻烦,先在此记录供大家参考 1.授权 支付宝第三方登录需要在后台进行授权,在查看授权的时候我们一定要看清楚时候真的已经获得了权限(我在没有获取权限的情况下集成的 ...
- Unity利用Share SDK实现QQ、微信及微博第三方登录及定制内容分享(附代码)
最近因为公司的项目需要添加一些实用性的功能,需要添加第三方登录及分享,采用的是Mob的SDK,可以先到其官网下载对应的SDK 点击这里,为了方便后期进行数据统计和分析,所以可以先添加一个应用,添加成功 ...
- 网站如何集成Facebook和Twitter第三方登录
最近公司要求做海外的第三方登录:目前只做了Facebook和Twitter;国内百度到的信息太少VPN FQ百度+Google了很久终于弄好了.但是做第三方登录基本上都有个特点就是引入必须的js,设置 ...
随机推荐
- 从0开始学java——Tomcat的安装及其常见错误排查(zz)
来源: <http://www.cnblogs.com/xdp-gacl/p/3729033.html> 学习web开发,为什么必须要先装一个WEB服务器? 在本地计算机上随便创建一个we ...
- 20135316王剑桥 linux第七周课实验笔记
第十章.程序间的交互和通信 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程.输入操作是从I/O设备拷贝数据到主存,而输出操作是从主存拷贝数据到I/O设备. 输入:从I/O拷贝到主存,输出:从 ...
- eclipse项目编码问题
使得eclipse的新建项目的默认编码直接为UTF-8: 在菜单栏的Window->Preferences->General->Workspace->Text file enc ...
- vs2010 “SetScrollSizes”: 找不到标识符
SetScrollSizes是CScrollView的成员函数,你的view类必须从CScrollView派生
- WP&Win10仿微信消息框代码分享
上次分享了幸运转盘的源码,感觉小伙伴们很喜欢:这次和大家分享下通信相关部分需要用到的类似微信的消息框代码,有需要的童鞋可以拿去用哟.自己尝试写的,可能有点low,勿喷呀! 希望以后有好的东西大家都分享 ...
- 【niubi-job——一个分布式的任务调度框架】----框架设计原理以及实现
引言 niubi-job的框架设计是非常简单实用的一套设计,去掉了很多其它调度框架中,锦上添花但并非必须的组件,例如MQ消息通讯组件(kafka等).它的框架设计核心思想是,让每一个jar包可以相对之 ...
- [wikioi 1307][poj 2054]欧少堆(乱搞)
题目:http://www.wikioi.com/problem/1307/ 题意:给你一个树,上面有n个节点,每个节点都有一个价值p,求一个n个节点的排列顺序,是的Σi*p[i]最小(要求父节点一定 ...
- java网络编程基础
前言 通过网络进行数据传输时,一般使用TCP/UDP进行数据传输.但是两个的区别就是TCP可靠,UDP不可靠.两个的共同之处就是都需要建立socket套接字,将IP地址和端口port进行绑定.但是服务 ...
- RESTful WebService入门(转)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lavasoft.blog.51cto.com/62575/229206 REST ...
- Spring配置文件详解:<context:annotation-config/>和<context:component-scan base-package=""/>和<mvc:annotation-driven />
<context:annotation-config/> 在基于主机方式配置Spring时,Spring配置文件applicationContext.xml,你可能会见<contex ...