zoukankan      html  css  js  c++  java
  • 微信小程序授权登录

      最近做微信小程序,需要用户授权登录和获取微信绑定的手机号。

      首先我是个渣渣,看微信文档理解不了人家的逻辑,所以。。。我觉得微信小程序的文档写的简直是一坨粑粑,好了吐槽完毕,进入正文

      首先这个流程是怎么样的呢?他这个流程图还是很ok的  

     

    简单来说就是通过wx.log方法获取当前的code,用这个code来向微信服务器验证,然后拿到openid和sessionkey,然后在用openid来获得授权,嘛,我是后端,没写过前端,所以,不晓得怎么获取code,我们接着说 后台怎么获得授权吧,就这样子

    'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';

    我们通过访问人家的接口,获取数据嘛,最简单了,来看地址的参数 appid和secret都是成为开发者就能获取到的,还要个code就是前段传过来的。上代码

     public function openid(){
            $code= input('code');
            $appid = '*************';
            $secret = '************';  //secret
            if (!$code) {
                return json(array('code'=>"0",'msg'=>'缺少code参数!'));
            }
            if (!$appid || !$secret) {
                return json(array('code'=>"0",'msg'=>'参数错误!'));
            }
            $url='https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';
            function getcurl($url){
                $ch = curl_init();
                curl_setopt ($ch,CURLOPT_URL,$url);
                curl_setopt ($ch,CURLOPT_RETURNTRANSFER,1);
                curl_setopt ($ch,CURLOPT_TIMEOUT,30);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 设置是否检查服务器端的证书
                $content=curl_exec($ch); //获取结果
                $status=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE );
                if($status==404)
                {
                    return  "";
                }
                curl_close($ch);
                return $content;
            }
            
            //code换取openid
            $res= getcurl($url);
    
            return json(array('code'=>"0",'msg'=>'获取成功!','data'=>json_decode($res)));
        }

    然后前段就可以获取到代表用户的openid和sessionkey了,然后就是我们需要授权下,

    //授权登录接口
        public function authlogin(){
           
            $openid = input('openid');
            if (!$openid) {
                return json(array('code'=>"1",'msg'=>'授权失败!'));
            }
            $con = array();
            $con['wxid']=trim($openid);
           
            $uid = db('user')->where($con)->value('id'); //查询是否有openid
            if ($uid) { //如果有openid
               
                $userinfo = db('user')->where('id='.$uid)->find(); //查询wxid是否为0
    
                $err = array(); //用来存放查询出来的用户id,昵称和头像
                $err['id'] = $uid;
                $err['nickname'] = $userinfo['nname'];
                $err['phono'] = $userinfo['phono'];
                $err['touxiang'] = $userinfo['touxiang'];
        
                return json(array('code'=>"0",'msg'=>'成功','data'=>$err));
            }else{ //如果用户首次登录,就是注册
                $data = array();
                $data['nname'] = input('nname'); //获取用户名
                $data['touxiang'] = input('touxiang'); //头像地址
                $data['phono'] = input('phono'); //手机号
               
                $data['sex'] = input('sex');  //性别
                
                $data['wxid'] = $openid; //openid
                $data['retime'] = time(); //当前时间
     
                if (!$data['wxid']) {
                    return json(array('code'=>"1",'msg'=>'授权失败!'));
                }
                $res = db('user')->insertGetId($data);
                if ($res) {
                    $err = array();
                    $err['id'] = $res;
                    $err['nickname'] = urldecode($data['nname']);
                    $err['phono'] = urldecode($data['phono']);
                    $err['icon'] = $data['touxiang'];
                    return json(array('code'=>"0",'msg'=>'成功','data'=>$err));
                }else{
                    return json(array('code'=>"1",'msg'=>'授权失败!'));
                }
            }
        }

    嗯,大概就这样子

  • 相关阅读:
    iphone6闪存检测
    knowledges address
    类linux系统/proc/sysrq-trigger文件功能作用
    iphone 6s pp助手 越狱
    C pointers
    ubuntu15.04 TLS
    ubuntu cenots 禁止本地登陆
    CentOS7
    CentOS7安全设置 yum-cron系统自动更新,firewalld防火墙简单使用
    SAS学习笔记之函数应用
  • 原文地址:https://www.cnblogs.com/cyk2/p/11328634.html
Copyright © 2011-2022 走看看