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

 

最新文章

  1. 一眼看懂KMP匹配算法
  2. Windows Azure Virtual Network (8) 创建Azure Point-to-Site点到站点 VPN
  3. c# 获取iis地址
  4. mysql查看字段注释(帮助信息)指令
  5. win7 安装 memcached
  6. eclipse template里面的${user}更改
  7. hive 子查询特别分析
  8. &#183;数据库基本内容回顾-day16.06.30
  9. struts 学习之问一
  10. YBC中国国际青年创业计划
  11. LeetCode OJ 59. Spiral Matrix II
  12. 区块链3.0:拥抱EOS
  13. [HAOI2015]数字串拆分
  14. 自动驾驶系统 bfs
  15. jq怎么给图片绑定上传文件按钮
  16. php mysql 查询判断周几
  17. WebRTC源码分析(一):安卓相机采集实现分析
  18. sqlserver将数据库的数据导成excel文档方法
  19. Python学习过程笔记整理(三)
  20. TF-池化函数 tf.nn.max_pool 的介绍

热门文章

  1. V2EX的RSS订阅地址
  2. pandas的merge方法
  3. vue - 计算属性、表单输入绑定
  4. 监听checkbox事件
  5. python 面向对象 公有属性
  6. CentOS7安装mysql-python模块
  7. jQuery实现节点克隆、替换和互换
  8. JS随机数种子
  9. git配置文件
  10. EditPlus 4.3.2477 中文版已经发布(11月3日更新)