param(); $avatar =$param['avatar']??''; $nickname =$param['nickname']??''; $code =$param['code']??''; $distribution_code =$param['distribution_code']??''; $encryptedData =$param['encryptedData']??''; $iv =$param['iv']??''; if(!$avatar || !$nickname || !$code){ return error('参数不足'); } $user_info = $this->get_openid($code,$encryptedData,$iv); if (!$user_info['openid']) { return error('授权失败'); } $where['mobile'] = array('EQ',$user_info['tel']); $userinfo = $fumodel->field('id,avatar,nickname,openid')->where($where)->find(); if($userinfo && !$userinfo['openid']){ $data_login['login_ip']=$request->ip(); $data_login['login_time']=time(); $data_login['openid']=$user_info['openid']; $fumodel->where('id', $userinfo['id'])->update($data_login); $token = $this->getToken($userinfo['id']); $uid=Crypt::encrypt($userinfo['id']); return success(['token' => $token,'uid'=>$uid], '登录成功'); }else if($userinfo && $userinfo['openid']){ $data_login['login_ip']=$request->ip(); $data_login['login_time']=time(); $fumodel->where('id', $userinfo['id'])->update($data_login); $token = $this->getToken($userinfo['id']); $uid=Crypt::encrypt($userinfo['id']); return success(['token' => $token,'uid'=>$uid], '登录成功'); } //登录逻辑 // 启动事务 $fumodel->startTrans(); try { $res['sn'] =create_user_sn(); $res['distribution_code'] =generate_invite_code(); $res['nickname']=$nickname; $res['username'] = '用户'.$res['sn']; $res['avatar'] = $avatar; $res['openid'] = $user_info['openid']; $res['mobile'] = $user_info['tel']; $res['create_time'] = time(); $res['login_ip']=$request->ip(); $res['login_time']=time(); $fumodel::create($res); $uid=$fumodel->getLastInsID(); //分销 if($distribution_code){ $fumodel->code($distribution_code,$uid); } $fumodel->commit(); } catch (Exception $e) { $fumodel->rollback(); return client_error($e->getMessage()); } $uid=Crypt::encrypt($uid); $token = $this->getToken($uid); //返回数据 return success(['token' => $token,'uid'=>$uid], '注册成功'); } //获取用户临时code 用来去获取openid public function get_openid($code,$encryptedData,$iv) { $APPID =ShopConfig::get('website', 'APPID'); $APPSECRET=ShopConfig::get('website', 'APPSECRET'); $url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' . $APPID. '&secret=' . $APPSECRET. '&js_code=' . $code . '&grant_type=authorization_code'; $val = curl_request($url); $user_info = json_decode($val,true); $encryptedData=urldecode($encryptedData); $iv = urldecode($iv); $pc = new WXBizDataCrypt($APPID,$user_info['session_key']); $errCode = $pc->decryptData($encryptedData,$iv,$data); $data1 = json_decode($data, true); $user_info['tel']=$data1['purePhoneNumber']; return $user_info; } }