tp5集成淘宝,微信,网易,新浪等第三方登录
tp5集成淘宝,微信,网易,新浪等第三方登录
一、总结
一句话总结:
接口 链接
实现的话就是这些平台给的一个接口(链接),你通过这些接口登录进去之后,它会给你返回用户名,头像之类的信息,我们的网站存储这些信息就好
比如微信登录
121 /**
122 * 微信登录
123 * @author tangtanglove
124 */
125 public function wechat()
126 {
127 $state = input('get.state');
128 if ($state != session('state')) {
129 return $this->error('授权出错!');
130 }
131 $config = config('think_sdk_wechat');
132 $response_type = input('get.response_type');
133 $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$config['app_id'].'&secret='.$config['app_secret'].'&code='.$response_type.'&grant_type=authorization_code';
134 $result = json_decode(httpMethod($url));
135 $openid = $result['openid'];
136 $access_token = $result['access_token'];
137
138 // 获取用户信息
139 $url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid;
140 $wechatInfo = json_decode(httpMethod($url));
141
142 if (empty($wechatInfo['openid'])) {
143 return $this->error('错误!');
144 }
145
146 if (empty($openid)) {
147 return $this->error('错误!');
148 }
149
150 $where['openid'] = $openid;
151 $userInfo = Db::name('Users')->where($where)->find();
152 if (!empty($userInfo) && $userInfo['status']!=1) {
153 return $this->error('用户被禁用!');
154 }
155
156 if (!empty($userInfo)) {
157 $session['uid'] = $userInfo['id'];
158 $session['username'] = $userInfo['username'];
159 $session['nickname'] = $userInfo['nickname'];
160 $session['mobile'] = $userInfo['mobile'];
161 $session['last_login']= $userInfo['last_login'];
162 // 记录用户登录信息
163 session('index_user_auth',$session);
164 return $this->success('登陆成功!',url('index/user/userCenter'));
165 } else {
166 $data['openid'] = $openid;
167 $data['nickname'] = $wechatInfo['nickname'];
168 $data['uuid'] = create_uuid();
169 $data['salt'] = create_salt();
170 $data['regdate'] = time();
171 $data['last_login'] = $data['regdate'];
172 $data['status'] = '1';
173 $result = Db::name('Users')->insert($data);
174 if ($result) {
175 $openid = $result['openid'];
176 $session['uid'] = Db::getLastInsID();
177 $session['nickname'] = $wechatInfo['nickname'];
178 $session['last_login']= $userInfo['last_login'];
179 // 记录用户登录信息
180 session('index_user_auth',$session);
181 return $this->success('登陆成功!',url('index/user/userCenter'));
182 } else {
183 return $this->error('错误!');
184 }
185 }
186 }
1、如何用thinkphp实现第三方登录?、
搜索
比如你要用thinkphp实现第三方登录,直接在网上搜索thinkphp第三方登录,代码大堆
搜索的关键词
需要的功能直接搜索就好,网上很多,可以多参考几个来做
2、微信第三方登录接口?
搜索
直接搜索“微信第三方登录接口”,搜索到网站,照着里面的文档来,非常简单的
WeChat Open Platform
https://open.weixin.qq.com/
3、如何实现第三方支付?
网址 参考文档
搜索 代码
照着参考文档来,非常简单
微信支付
微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式
https://pay.weixin.qq.com/index.php/core/home/login?return_url=%2F

支付宝支付
开放平台文档中心
https://docs.open.alipay.com/200
参考文档开发是一份方面,直接找代码的话就更加快了,而且可以多找几个进行参考
二、tp5集成淘宝,微信,网易,新浪等第三方登录
参考的thinkphp官网上面的代码
namespace app\index\controller; use think\Controller;
use think\Request;
use think\Db;
use org\ThinkOauth; /**
* 第三方登录
* @author tangtnglove <dai_hang_love@126.com>
*/
class OpenAuth extends Base
{
/**
* 统一登录方法
* @author tangtanglove
*/
public function login($type = null){ if (empty($type)) {
return $this->error('参数错误');
}
if ($type == 'wechat') {
// 生成一个token
$state = md5(time());
// 储存token
session('state',$state);
$config = config('think_sdk_wechat');
$wechatUrl = 'https://open.weixin.qq.com/connect/qrconnect?appid='.$config['app_id']
.'&redirect_uri='.$config['callback']
.'&response_type=code&scope=snsapi_login&state='.$state
.'#wechat_redirect'; return $this->redirect($wechatUrl);
} else { //加载ThinkOauth类并实例化一个对象
import('org.util.thinksdk.ThinkOauth');
$sns = ThinkOauth::getInstance($type); //跳转到授权页面
return $this->redirect($sns->getRequestCodeURL());
} } /**
* 授权回调
* @author tangtanglove
*/
public function callback($type = null, $code = null){
(empty($type) || empty($code)) && $this->error('参数错误'); //加载ThinkOauth类并实例化一个对象
import('org.util.thinksdk.ThinkOauth');
$sns = ThinkOauth::getInstance($type); //腾讯微博需传递的额外参数
$extend = null;
if($type == 'tencent'){
$extend = array('openid' => input('openid'), 'openkey' => input('openkey'));
} //请妥善保管这里获取到的Token信息,方便以后API调用
//调用方法,实例化SDK对象的时候直接作为构造函数的第二个参数传入
//如: $qq = ThinkOauth::getInstance('qq', $token);
$token = $sns->getAccessToken($code , $extend);
//获取当前登录用户信息
if(is_array($token)){
//$user_info = $this->$type($token);
$openAuthInfo = call_user_func_array(array($this,$type), array($token));
// echo("<h1>恭喜!使用 {$type} 用户登录成功</h1><br>");
// echo("授权信息为:<br>");
// dump($token);
// echo("当前登录用户信息为:<br>");
// dump($openAuthInfo); if (empty($openAuthInfo)) {
return $this->error('错误!');
} $where[$type.'_openid'] = $token['openid'];
$userInfo = Db::name('Users')->where($where)->find();
if (!empty($userInfo) && $userInfo['status']!=1) {
return $this->error('用户被禁用!');
} if (!empty($userInfo)) {
$session['uid'] = $userInfo['id'];
$session['username'] = $userInfo['username'];
$session['nickname'] = $userInfo['nickname'];
$session['mobile'] = $userInfo['mobile'];
$session['last_login']= $userInfo['last_login'];
// 记录用户登录信息
session('index_user_auth',$session);
return $this->success('登陆成功!',url('index/user/userCenter'));
} else {
$data[$type.'_openid'] = $token['openid'];
$data['nickname'] = $openAuthInfo['nick'];
$data['uuid'] = create_uuid();
$data['salt'] = create_salt();
$data['regdate'] = time();
$data['last_login'] = $data['regdate'];
$data['status'] = '1';
$result = Db::name('Users')->insert($data);
if ($result) {
$openid = $result['openid'];
$session['uid'] = Db::getLastInsID();
$session['nickname'] = $openAuthInfo['nick'];
$session['last_login']= $userInfo['last_login'];
// 记录用户登录信息
session('index_user_auth',$session);
return $this->success('登陆成功!',url('index/user/userCenter'));
} else {
return $this->error('错误!');
}
}
}
} /**
* 微信登录
* @author tangtanglove
*/
public function wechat()
{
$state = input('get.state');
if ($state != session('state')) {
return $this->error('授权出错!');
}
$config = config('think_sdk_wechat');
$response_type = input('get.response_type');
$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$config['app_id'].'&secret='.$config['app_secret'].'&code='.$response_type.'&grant_type=authorization_code';
$result = json_decode(httpMethod($url));
$openid = $result['openid'];
$access_token = $result['access_token']; // 获取用户信息
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid;
$wechatInfo = json_decode(httpMethod($url)); if (empty($wechatInfo['openid'])) {
return $this->error('错误!');
} if (empty($openid)) {
return $this->error('错误!');
} $where['openid'] = $openid;
$userInfo = Db::name('Users')->where($where)->find();
if (!empty($userInfo) && $userInfo['status']!=1) {
return $this->error('用户被禁用!');
} if (!empty($userInfo)) {
$session['uid'] = $userInfo['id'];
$session['username'] = $userInfo['username'];
$session['nickname'] = $userInfo['nickname'];
$session['mobile'] = $userInfo['mobile'];
$session['last_login']= $userInfo['last_login'];
// 记录用户登录信息
session('index_user_auth',$session);
return $this->success('登陆成功!',url('index/user/userCenter'));
} else {
$data['openid'] = $openid;
$data['nickname'] = $wechatInfo['nickname'];
$data['uuid'] = create_uuid();
$data['salt'] = create_salt();
$data['regdate'] = time();
$data['last_login'] = $data['regdate'];
$data['status'] = '1';
$result = Db::name('Users')->insert($data);
if ($result) {
$openid = $result['openid'];
$session['uid'] = Db::getLastInsID();
$session['nickname'] = $wechatInfo['nickname'];
$session['last_login']= $userInfo['last_login'];
// 记录用户登录信息
session('index_user_auth',$session);
return $this->success('登陆成功!',url('index/user/userCenter'));
} else {
return $this->error('错误!');
}
}
} //登录成功,获取腾讯QQ用户信息
public function qq($token){
//加载ThinkOauth类并实例化一个对象
import('org.util.thinksdk.ThinkOauth');
$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){
//加载ThinkOauth类并实例化一个对象
import('org.util.thinksdk.ThinkOauth');
$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){
//加载ThinkOauth类并实例化一个对象
import('org.util.thinksdk.ThinkOauth');
$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){
//加载ThinkOauth类并实例化一个对象
import('org.util.thinksdk.ThinkOauth');
$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']}");
}
}
}
参考:tp5集成淘宝,微信,网易,新浪等第三方登录 - ThinkPHP框架
http://www.thinkphp.cn/topic/43566.html
tp5集成淘宝,微信,网易,新浪等第三方登录的更多相关文章
- 微信qq,新浪等第三方授权登录的理解
偶们常说的第三方是指的微信,qq,新浪这些第三方,因为现在基本每个人都有qq或者微信,那么我们就可以通过这些第三方进行登录.而这些网站比如慕课网是通过第三方获取用户的基本信息 它会有个勾选按钮,提示是 ...
- 淘宝上倒卖新浪微盘事件来龙去脉——谈谈巧用IMEI
这是一个老黄历的事件,曾记得淘宝上的卖家卖10元卖50g网络硬盘,并且卖的相当的火,一个月就卖了500个账号.由于我也是那个事件的亲身经历者之一,这里就看到了IMEI号在项目中防止作弊是何其的重要. ...
- 从淘宝 UWP 的新功能 -- 比较页面来谈谈 UWP 的窗口多开功能
前言 之前在 剁手党也有春天 -- 淘宝 UWP ”比较“功能诞生记 这篇随笔中介绍了一下 UWP 淘宝的“比较”新功能呱呱坠地的过程.在鲜活的文字背后,其实都是程序员不眠不休的血泪史(有血有泪有史) ...
- 微信、QQ、新浪微博等第三方登录,你想知道的都在这了(上) 微信、QQ、新浪微博等第三方登录,你想知道的都在这了(下)
微信.QQ.新浪微博等第三方登录,你想知道的都在这了(上):https://www.jianshu.com/p/133d84042483 微信.QQ.新浪微博等第三方登录,你想知道的都在这了(下):h ...
- 对QQ、微信等第三方登录的几个思考
转自:http://www.jianshu.com/p/7f282dfc16fc 今天聊聊注册.登录环节中很常见的第三方登录,如QQ.微信.支付宝.新浪微博等.虽然这些产品的开放平台都提供了标准的接入 ...
- 从淘宝和网易的font-size思考移动端怎样使用rem?
最近翻了一下关于移动端的rem的使用,怎样最方便.在读到流云诸葛的一篇关于<从网易与淘宝的font-size思考前端设计稿与工作流>的文章后,来总结一下. 然而根据我以往做移动端web项目 ...
- 淘宝、网易移动端 px 转换 rem 原理,Vue-cli 实现 px 转换 rem
在过去的一段时间里面一直在使用Vue配合 lib-flexible和px2rem-loader配合做移动端的网页适配.秉着求知的思想,今天决定对他的原理进行分析.目前网上比较主流使用的就是淘宝方 ...
- 模拟淘宝购物,运用cookie,记录登录账号信息,并且记住购物车内所选的商品
1.登录界面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEn ...
- 新浪OAuth网络登录,请求access_token时遇到21323的错误
按照新浪给出的文档写了,但是遇到错误,总是获取不到token值,也是post方式提交的. 查阅百度资料,发现有网友给出了解决办法,是因为 文档中有这么一句提示: HTTP请求方式:POST 这句话太简 ...
随机推荐
- 混合欧拉回路的判断(Dinic)
POJ1637 Sightseeing tour Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7483 Accepte ...
- Mybatis 搭配 阿里druid连接池 连接 oracle 或 mysql
DRUID介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针 ...
- Java项目工程化之项目构建工具Maven
欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...
- 170503、centos6.5安装mysql5.6.30
准备:虚拟机地址:192.168.0.110 安装目录/usr/local/ 首先卸载已经安装的mysql使用命令查看rpm -qa | grep mysql卸载使用 rpm -e xxx 或者 yu ...
- 转载:隐式Intent
一.隐式意图介绍 显式意图我们前面已经提到,形如: Intent intent = new Intent(); intent.setClass(this,Other.class); //此句表示显式意 ...
- IIS 6.0上部署ASP.NET MVC2.0
在IIS7.5及8.0上部署都没有成功,对于身份验证会出现问题,据说是要安装什么东西,在这里说下IIS6.0的配置吧,下面是使用.net 4.0,自己可以选择所需的版本. 再此之前先确定web是用到了 ...
- Django之urls.py详解
urls.py:URL分发器(路由配置文件)URL配置(URLconf)就像是Django所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表.你就是以这种方式告诉Dj ...
- 运行mlflow命令报错 The 'nose' distribution was not found and is required by nose-exclude
安装好mlflow之后命令行运行: mlflow 得到报错: 解决: sudo pip3 install nose
- IT运营新世界大会:广通软件开启双态运维大时代
10月28日,第一届“IT运营新世界大会”在北京成功举办.大会上由10家ITOM领域的标杆企业宣布结成“ITOM联盟”. 广通软件(证券代码:833322)作为大会的创始成员全程推动见证了这一历史时刻 ...
- modelform动态显示select标签的对象范围
既根据当前登录人,动态显示对象相关的的select的选项,例如 A登录,只显示A的客户,B登录,只显示B自己的客户 先了解form的ModelChoiceField字段(这个表格没意义,就是引出参数q ...