• 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 appindexcontroller;
      2 
      3 use thinkController;
      4 use thinkRequest;
      5 use thinkDb;
      6 use orgThinkOauth;
      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

     
  • 相关阅读:
    kafka参数解析+启动参数解析
    flume参数解析+启动参数解析
    flume+flume+kafka消息传递+storm消费
    C++快速读取大文件
    阿里云ecs : Couldn't connect to host, port: smtp.aliyun.com, 25; timeout -1;
    对渲染相关操作封装的类库
    51nod-1134 最长递增子序列,用线段树将N^2的dp降到NlogN
    51nod-1503 猪和回文
    51nod1073-约瑟夫环,递归。
    算法基础题
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9995596.html
Copyright © 2020-2023  润新知