ThinkPHP作后台 微信小程序:微信登录案例1


小程序登录代码:

//app.js
var config = require('/pages/config/config.js');
App({
  onLaunch: function() {
    //调用API从本地缓存中获取数据
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs);

    var openId=(wx.getStorageSync('openId'));
    console.log("openId:"+openId);
    if (openId)
    {
      ;//已经有过授权的
    }
    else
    {
    //---------------begin login
    wx.login({
      success: function (res) {
        console.log("code:"+res.code)
        if (res.code)
        {
          wx.getUserInfo({
            withCredentials: true,
            success: function (res_user)
            {
              console.log("reqUserLogin:" + config.api.reqUserLogin);
              console.log("nickName:" + res_user.userInfo.nickName);
              console.log("avatarUrl:" + res_user.userInfo.avatarUrl);
              console.log("avatarUrl:" + res_user.userInfo.avatarUrl);
              wx.request({
                //后台接口地址
                url: config.api.reqUserLogin,
                data:
                {
                  "code": res.code,
                  "signature": res_user.signature,
                  "wxid": config.static.wxid,
                  "encryptedData":res_user.encryptedData,
                  "iv":res_user.iv,
                  "rawData":res_user.rawData,
                },
                method: 'GET',
                header:
                {
                  'content-type': 'application/json'
                },
                success: function (res) {
                  //
                  console.log(res);
                  var result=res.data||[];
                  if (result.result=="ok")
                  {
                    var data = result.data;
                    wx.setStorageSync('uid', data.id);
                    wx.setStorageSync('openId', data.openid);
                    console.log("openId:" + data.openid + "--uid:" + data.id);
                  }
                  else
                  {
                    console.log("result:" + result.msg);
                  }


                }
              })
            },
            fail: function () {
              wx.showModal({
                title: '警告通知',
                content: '您点击了拒绝授权,将无法正常显示个人信息,点击确定重新获取授权。',
                success: function (res) {
                  if (res.confirm) {
                    wx.openSetting({
                      success:
                      (res) => {
                        if (res.authSetting["scope.userInfo"]) {
                          ////如果用户重新同意了授权登录
                          wx.login({
                            success: function (res_login) {
                              if (res_login.code) {
                                wx.getUserInfo({
                                  withCredentials: true,
                                  success: function (res_user) {
                                    wx.request({
                                      url: config.api.reqUserLogin,
                                      data:
                                      {
                                        code:res_login.code,
                                        wxid: config.static.wxid,
                                        encryptedData:res_user.encryptedData,
                                        iv:res_user.iv
                                      },
                                      method: 'GET',
                                      header:
                                      {
                                        'content-type': 'application/json'
                                      },
                                      success: function (res) {
                                        that.setData({
                                          nickName:res.data.nickName,
                                          avatarUrl:res.data.avatarUrl,
                                        })
                                        wx.setStorageSync('openId',res.data.openId);
                                      }
                                    })
                                  }
                                })
                              }
                            }
                          });
                        }
                      },
                      fail: function (res) {

                      }
                    })

                  }
                }
              })
            },
            complete: function (res) {


            }
          })
        }
      }
    })
    //=-----------------end login
    }
    //------------end if openid

  },

  getUserInfo: function(cb) {
    var that = this
    if (this.globalData.userInfo) {
      typeof cb == "function" && cb(this.globalData.userInfo)
    } else {
      //调用登录接口
      wx.getUserInfo({
        withCredentials: false,
        success: function(res) {
          that.globalData.userInfo = res.userInfo
          typeof cb == "function" && cb(that.globalData.userInfo)
        }
      })
    }
  },

  globalData: {
    userInfo: null
  }
})


thinkphp 后台代码:

 $code=I('get.code');
        $wxid=I('get.wxid');
        /*
        $AppId=C("WXID")[$wxid]['appId'];
        $AppSecret=C("WXID")[$wxid]['appSecret'];
        */
        $AppId="wx85bfad0b61d6902a";
        $AppSecret="efd5deedc28929a51372f896f47c550a";
        $session_key="";
        $url="https://api.weixin.qq.com/sns/jscode2session?appid=".$AppId."&secret=".$AppSecret."&js_code=".$code."&grant_type=authorization_code";
        $result =$this->vget($url); 
        $result=json_decode($result,true);
        if(empty($result['openid']))
        { 
            $this->ajaxReturn(array("result"=>"err","msg"=>"openid err url:".$url."---".$result['errcode'].":".$result['errmsg']));
            die;
        } 
        else 
        {
            $session_key=$result['session_key'];
            $openid=$result['openid'];
        }
        // 数据签名校验
        $signature = I('get.signature');
        $signature2 = sha1($_GET['rawData'].$session_key);  //记住不应该用TP中的I方法,会过滤掉必要的数据
        if ($signature != $signature2)
        { 
            $this->ajaxReturn(array("result"=>"err","msg"=> '数据签名验证失败!'));
            die;
        }

        $iv=$_GET['iv'];
        
        unset($_GET['_URL_']);
        $_GET['encryptedData']=urlencode($_GET['encryptedData']);
        $_GET['encryptedData'] = str_replace("%2B","+",$_GET['encryptedData']);
        $_GET['encryptedData'] = str_replace("%3D","=",$_GET['encryptedData']);
        $_GET['encryptedData'] = str_replace("%2F","/",$_GET['encryptedData']);            
        $encryptedData=$_GET['encryptedData'];    
        
        vendor("PHP-WX.wxBizDataCrypt");
        $pc = new \WXBizDataCrypt($AppId, $session_key);
        $errCode = $pc->decryptData($encryptedData, $iv, $data );
        //$errCode=0;        
        if ($errCode == 0)
        {
            //----获得 openid 
            //------------------------------------------------------------------开始数据库操作
            $userTab=M("Users")->field("id,openid,session_key,user_nicename,avatar")->where(array("openid"=>$openid))->find();
            //echo M("Users")->getLastSql();
            if($userTab!=false)
            {
                //已经存在 openid  //----登录设置                
                $this->ajaxReturn(array("result"=>"ok","data"=>$userTab));
                die;
            }
            else
            {
                $unionid=$data['unionid'];
                $inData=array(
                        "openid"=>$openid,
                        "session_key"=>$session_key,
                        "user_login"=>"RZ".rand(100,999).$openid.rand(10,99),
                        "user_pass"=>sp_password($openid),
                        "user_nicename"=>$data['nickName'],
                        "avatar"=>$data['avatarUrl'],
                        "sex"=>$data['gender'],
                        "last_login_time"=>date("y-m-d H:i:s",NOW_TIME),
                        "create_time"=>date("y-m-d H:i:s",NOW_TIME)
                );     
                if(M("User")->add($inData))
                {
                    //----登录设置
                    $inData['id']=M("User")->getLastInsID();
                    $this->ajaxReturn(array("result"=>"ok","data"=>$inData));
                    die;
                }
                else 
                {
                    $this->ajaxReturn(array("result"=>"err","msg"=>"insert err"));
                    die;
                }
                                   
            }            
            //if($userTab!=false)
        }
        else
        {
            /**
             * error code 说明.
             * <ul>
            
             *    <li>-41001: encodingAesKey 非法</li>
             *    <li>-41003: aes 解密失败</li>
             *    <li>-41004: 解密后得到的buffer非法</li>
             *    <li>-41005: base64加密失败</li>
             *    <li>-41016: base64解密失败</li>
             * </ul>
             */
            $this->ajaxReturn(array("result"=>"err","msg"=>"解密数据失败!".$errCode."--encryptedData:".$encryptedData."----iv:".$iv));
            die;
        }
        //vendor("php-AES.php-AES");
        //$Curl = new \Curl($url,$data,'get','json');
        //redirect($url); 
        //echo $code."<br/>".$appId."<br/>".$appId."<br/>".$appSecret;



注:本文转载自拾图网[http://www.tshinet.com],转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除。
上一篇 下一篇

淘宝热销

  • Mistine小黄帽防晒霜乳SPF50泰版面部防紫外线隔离男女军训蜜丝婷

    【推荐理由】赠运费险

    【优惠券】20   【券后价】59.00

    【下单链接】18¥ CZ0001 G5fHdEqOsnB¥

    >>>>>> 马上打开

  • G7旗舰店越南进口美式纯黑咖啡粉速溶无糖0脂减燃正品学生提神

    【推荐理由】库存紧张,好评过万

    【优惠券】3    【券后价】26.90

    【下单链接】27¥ CZ0001 zb0bdEqLV7G¥

    >>>>>> 马上打开