如果你的小程序没有绑定微信开放平台,解密的数据中不包含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)
}
}
});
}