作者:未署名,来自原文地址
我用thinkphp写了个公共类Common供参考
前端代码:
//刷新用户信息function updateUserInfo(){ 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: ', data: { code: loginRes.code, userInfo:userInfoStr }, header: { 'content-type': 'application/x-www-form-urlencoded' }, method:'POST', success: function(res) { //缓存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) } } });}
后端代码:
<?php/* * 小程序公共类 */namespace Weixin\Controller;use Think\Controller\RestController;class CommonController extends RestController{ public function getSession(){ $code=$_POST['code']; if(!$code){ $data['errmsg']='code为空'; $data['error']=1; $this->response($data,'json'); exit; } if(!$_POST['userInfo']){ $data['errmsg']='userInfo为空'; $data['error']=1; $this->response($data,'json'); exit; } $userInfo=json_decode($_POST['userInfo'],true); $return=$this->updateSession($code,$userInfo); $this->response($return,'json'); } //刷新session private function updateSession($code,$userInfo){ $return=$this->getOAuth($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='; $data=array( 'appid'=>'wx888888888',//填写你自己的 'secret'=>'88888888888888',//填写你自己的 'js_code'=>$code, 'grant_type'=>'authorization_code' ); $return=json_decode(https_request($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 = 'wx88888888888888';//填写你自己的 $encryptedData=$userInfo['encryptedData']; $iv = $userInfo['iv']; $pc = new \WXBizDataCrypt($appid, $sessionKey); $errCode = $pc->decryptData($encryptedData, $iv, $data ); if ($errCode == 0) { return $data; } else { return $errCode; } }}