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官网上面的代码

  1 namespace app\index\controller;
  2 
  3 use think\Controller;
  4 use think\Request;
  5 use think\Db;
  6 use org\ThinkOauth;
  7 
  8 /**
  9  * 第三方登录
 10  * @author  tangtnglove <dai_hang_love@126.com>
 11  */
 12 class OpenAuth extends Base
 13 {
 14     /**
 15      * 统一登录方法
 16      * @author tangtanglove
 17      */
 18     public function login($type = null){
 19 
 20         if (empty($type)) {
 21             return $this->error('参数错误');
 22         }
 23         if ($type == 'wechat') {
 24             // 生成一个token
 25             $state = md5(time());
 26             // 储存token
 27             session('state',$state);
 28             $config = config('think_sdk_wechat');
 29             $wechatUrl = 'https://open.weixin.qq.com/connect/qrconnect?appid='.$config['app_id']
 30             .'&redirect_uri='.$config['callback']
 31             .'&response_type=code&scope=snsapi_login&state='.$state
 32             .'#wechat_redirect';
 33 
 34             return $this->redirect($wechatUrl);
 35         } else {
 36 
 37             //加载ThinkOauth类并实例化一个对象
 38             import('org.util.thinksdk.ThinkOauth');
 39             $sns  = ThinkOauth::getInstance($type);
 40 
 41             //跳转到授权页面
 42             return $this->redirect($sns->getRequestCodeURL());
 43         }
 44 
 45     }
 46 
 47     /**
 48      * 授权回调
 49      * @author tangtanglove
 50      */
 51     public function callback($type = null, $code = null){
 52         (empty($type) || empty($code)) && $this->error('参数错误');
 53         
 54         //加载ThinkOauth类并实例化一个对象
 55         import('org.util.thinksdk.ThinkOauth');
 56         $sns  = ThinkOauth::getInstance($type);
 57 
 58         //腾讯微博需传递的额外参数
 59         $extend = null;
 60         if($type == 'tencent'){
 61             $extend = array('openid' => input('openid'), 'openkey' => input('openkey'));
 62         }
 63 
 64         //请妥善保管这里获取到的Token信息,方便以后API调用
 65         //调用方法,实例化SDK对象的时候直接作为构造函数的第二个参数传入
 66         //如: $qq = ThinkOauth::getInstance('qq', $token);
 67         $token = $sns->getAccessToken($code , $extend);
 68         //获取当前登录用户信息
 69         if(is_array($token)){
 70             //$user_info = $this->$type($token);
 71             $openAuthInfo = call_user_func_array(array($this,$type), array($token));
 72             // echo("<h1>恭喜!使用 {$type} 用户登录成功</h1><br>");
 73             // echo("授权信息为:<br>");
 74             // dump($token);
 75             // echo("当前登录用户信息为:<br>");
 76             // dump($openAuthInfo);
 77 
 78             if (empty($openAuthInfo)) {
 79                 return $this->error('错误!');
 80             }
 81 
 82             $where[$type.'_openid'] = $token['openid'];
 83             $userInfo = Db::name('Users')->where($where)->find();
 84             if (!empty($userInfo) && $userInfo['status']!=1) {
 85                 return $this->error('用户被禁用!');
 86             }
 87 
 88             if (!empty($userInfo)) {
 89                 $session['uid']       = $userInfo['id'];
 90                 $session['username']  = $userInfo['username'];
 91                 $session['nickname']  = $userInfo['nickname'];
 92                 $session['mobile']    = $userInfo['mobile'];
 93                 $session['last_login']= $userInfo['last_login'];                                            
 94                 // 记录用户登录信息
 95                 session('index_user_auth',$session);
 96                 return $this->success('登陆成功!',url('index/user/userCenter'));
 97             } else {
 98                 $data[$type.'_openid']  = $token['openid'];
 99                 $data['nickname']       = $openAuthInfo['nick'];
100                 $data['uuid']           = create_uuid();
101                 $data['salt']           = create_salt();
102                 $data['regdate']        = time();
103                 $data['last_login']     = $data['regdate'];
104                 $data['status']         = '1';
105                 $result = Db::name('Users')->insert($data);
106                 if ($result) {
107                     $openid = $result['openid'];
108                     $session['uid']       = Db::getLastInsID();
109                     $session['nickname']  = $openAuthInfo['nick'];
110                     $session['last_login']= $userInfo['last_login'];
111                     // 记录用户登录信息
112                     session('index_user_auth',$session);
113                     return $this->success('登陆成功!',url('index/user/userCenter'));
114                 } else {
115                     return $this->error('错误!');
116                 }
117             }
118         }
119     }
120 
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     }
187 
188     //登录成功,获取腾讯QQ用户信息
189     public function qq($token){
190         //加载ThinkOauth类并实例化一个对象
191         import('org.util.thinksdk.ThinkOauth');
192         $qq   = ThinkOauth::getInstance('qq', $token);
193         $data = $qq->call('user/get_user_info');
194         if($data['ret'] == 0){
195             $userInfo['type'] = 'QQ';
196             $userInfo['name'] = $data['nickname'];
197             $userInfo['nick'] = $data['nickname'];
198             $userInfo['head'] = $data['figureurl_2'];
199             return $userInfo;
200         } else {
201             throw_exception("获取腾讯QQ用户信息失败:{$data['msg']}");
202         }
203     }
204 
205     //登录成功,获取腾讯微博用户信息
206     public function tencent($token){
207         //加载ThinkOauth类并实例化一个对象
208         import('org.util.thinksdk.ThinkOauth');
209         $tencent = ThinkOauth::getInstance('tencent', $token);
210         $data    = $tencent->call('user/info');
211 
212         if($data['ret'] == 0){
213             $userInfo['type'] = 'TENCENT';
214             $userInfo['name'] = $data['data']['name'];
215             $userInfo['nick'] = $data['data']['nick'];
216             $userInfo['head'] = $data['data']['head'];
217             return $userInfo;
218         } else {
219             throw_exception("获取腾讯微博用户信息失败:{$data['msg']}");
220         }
221     }
222 
223     //登录成功,获取新浪微博用户信息
224     public function sina($token){
225         //加载ThinkOauth类并实例化一个对象
226         import('org.util.thinksdk.ThinkOauth');
227         $sina = ThinkOauth::getInstance('sina', $token);
228         $data = $sina->call('users/show', "uid={$sina->openid()}");
229 
230         if($data['error_code'] == 0){
231             $userInfo['type'] = 'SINA';
232             $userInfo['name'] = $data['name'];
233             $userInfo['nick'] = $data['screen_name'];
234             $userInfo['head'] = $data['avatar_large'];
235             return $userInfo;
236         } else {
237             throw_exception("获取新浪微博用户信息失败:{$data['error']}");
238         }
239     }
240 
241     //登录成功,获取网易微博用户信息
242     public function t163($token){
243         //加载ThinkOauth类并实例化一个对象
244         import('org.util.thinksdk.ThinkOauth');
245         $t163 = ThinkOauth::getInstance('t163', $token);
246         $data = $t163->call('users/show');
247 
248         if($data['error_code'] == 0){
249             $userInfo['type'] = 'T163';
250             $userInfo['name'] = $data['name'];
251             $userInfo['nick'] = $data['screen_name'];
252             $userInfo['head'] = str_replace('w=48&h=48', 'w=180&h=180', $data['profile_image_url']);
253             return $userInfo;
254         } else {
255             throw_exception("获取网易微博用户信息失败:{$data['error']}");
256         }
257     }
258

 

参考:tp5集成淘宝,微信,网易,新浪等第三方登录 - ThinkPHP框架
http://www.thinkphp.cn/topic/43566.html

 

 

 

 
THINKPHP最全第三方登录(包括腾讯QQ、微信新浪微博、Github、淘宝网、百度、搜狐微博、人人、360、网易等等) 使用方式: 1、使用命名空间 use Org\ThinkSDK\ThinkOauth; 2、设置三方登录的类别并赋予一个变量 $type = ThinkOauth::getInstance('qq'); 3、设置配置文件 'THINK_SDK_(TYPE)' => array( 'APP_KEY' => '', //应用注册成功后分配的 APP ID 'APP_SECRET' => '', //应用注册成功后分配的KEY 'CALLBACK' => '', //注册应用填写的callback ), 上文中的(TYPE)为设置的类别,其值目前有以下几个: //腾讯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')); } //请妥善保管这里获取到的Tok
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值