微信小程序——unionId

20 篇文章 0 订阅

如果你的小程序没有绑定微信开放平台,解密的数据中不包含unionid参数

扫码登录(tp后台)

控制器

public function getSession(){ 
        $code=$_POST['code']; 
        if(!$code){ 
            $data['errmsg']='code为空'; 
            $data['error']=1; 
            // $this->response($data,'json'); 
            echo '{"data":'.json_encode($data).'}';
            exit; 
        } 
        if(!$_POST['userInfo']){ 
            $data['errmsg']='userInfo为空'; 
            $data['error']=1; 
            // $this->response($data,'json'); 
            echo '{"data":'.json_encode($data).'}';
            exit; 
        } 
        $userInfo=json_decode($_POST['userInfo'],true); 
        $return=$this->updateSession($code,$userInfo); 
        // $this->response($return,'json'); 
        echo '{"data":'.json_encode($return).'}';
    } 
    //刷新session 
    private function updateSession($code,$userInfo){ 
        $return = $this->getOAuth($code); //发送code授权 
        if(!$return['session_key']){ 
            $data['errmsg'] = 'getOAuth函数报错:'.json_encode($return); 
            $data['error']  = 1; 
            return $data; 
            exit; 
        } 
        $unionid_Data=json_decode($this->getUnionID($return['session_key'],$userInfo),true); 
        /*if(!$unionid_Data['unionId']){ 
            $data['errmsg']='getUnionID函数报错:'.json_encode($unionid_Data); 
            $data['error']=1; 
            return $data; 
            exit; 
        } */
        $wei_user_Model=M('user','wei_'); 
        $exist=$wei_user_Model->where(array('openid'=>$return['openid']))->find(); 
        if($exist){ 
            $save=array( 
                // 'unionid'=>$unionid_Data['unionId'], 
                'session_key'=>$return['session_key'], 
                'expires_in'=>$return['expires_in'], 
                'dateline'=>time() 
                ); 
            $is_save=$wei_user_Model->where(array('openid'=>$return['openid']))->data($save)->save(); 
        }else{ 
            $add=array( 'openid'=>$return['openid'], 
                // 'unionid'=>$unionid_Data['unionId'], 
                'session_key'=>$return['session_key'], 
                'expires_in'=>$return['expires_in'], 
                'dateline'=>time() 
                ); 
            $is_add=$wei_user_Model->data($add)->add(); 
        } 
        if($is_save||$is_add){ 
            $wei_user_Data=$wei_user_Model->where(array('openid'=>$return['openid']))->find(); 
            $this->setSession($return['session_key']); 
            $data['session']=session('session'); 
            $data['expires']=time()+$return['expires_in']; 
            $data['error']=0; 
        }else{ 
            $data['errmsg']="入库失败!"; 
            $data['error']=1; 
        } 
        return $data; 
    } 
    //设置session 
    private function setSession($session){ 
        if(!empty($session)){  
            session('session',$session); 
        } 
    } 
    //发送code授权 
    private function getOAuth($code){ 
        $url='https://api.weixin.qq.com/sns/jscode2session'; 
        $data=array( 
            'appid'=>'',//填写你自己的 
            'secret'=>'',//填写你自己的 
            'js_code'=>$code, 
            'grant_type'=>'authorization_code' 
            ); 
        $return=json_decode($this->request_post($url,$data),true); 
        return $return; 
    } 
    //得到unionid 提交sessionKey、userinfo、 
    private function getUnionID($sessionKey,$userInfo){
        if(!$userInfo['encryptedData']){ 
            return 'encryptedData为空'; 
            exit; 
        } 
        if(!$userInfo['iv']){ 
            return 'iv为空'; 
            exit; 
        }         
        vendor('wxBizDataCrypt.wxBizDataCrypt');//引入官方解密sdk 
        $appid = '';//填写你自己的 
        $encryptedData=$userInfo['encryptedData'];
        $iv = $userInfo['iv']; 
        $pc = new \WXBizDataCrypt($appid, $sessionKey); 
        $errCode = $pc->decryptData($encryptedData, $iv, $data ); 
        // var_dump($data);
        if ($errCode == 0) { 
            return $data; 
        } else { 
            return $errCode; 
        } 
    }
}

小程序js:

//刷新用户信息 
    onLoad: function () {
    wx.login({
      success: function(loginRes) {
        if (loginRes.code) {
          // console.log('获取code成功!code:' + loginRes.code);
          wx.getUserInfo({
            success: function(userinfoRes) {
              // console.log('获得用户信息成功!userInfo:');
              // console.log(userinfoRes);
              var userInfoStr = JSON.stringify(userinfoRes);
              wx.request({
                url: '你的url',
                data: {
                  code: loginRes.code,
                  userInfo: userInfoStr
                },
                header: {
                  'content-type': 'application/x-www-form-urlencoded'
                },
                method: 'POST',
                success: function(res) { 
                    console.log(res.data);                    
                  //缓存session及userInfo                  
                  //var obj = JSON.parse(res.data);                  
                  if(res.data.error==0){                    
                    console.log('刷新缓存成功!');                    
                    wx.setStorage({                      
                      key:"session",                      
                      data:{                        
                        session:res.data.session,                        
                        userInfo:userinfoRes.userInfo,                       
                        expires:res.data.expires   //超时时间戳                      
                      },                      
                      success:function(){                        
                        console.log('写入缓存成功!');                      
                      },                      
                      fail:function(){                        
                        console.log('写入缓存失败!');                      
                      }                    
                    })                  
                  }else{                    
                    console.log('刷新缓存失败!');                    
                    console.log(res);                  
                  }                
                },                
                fail:function(res){                 
                  console.log('刷新session失败!');                  
                  console.log(res)                
                }              
              });            
            },            
            fail:function(res){              
              console.log('获取用户信息失败!' + res)            
            }          
          });        
        }else {          
          console.log('获取用户登录态失败!' + res.errMsg)        
        }
      }   
    });
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值