[ 'class' => QueryParamAuth::className(), 'tokenParam' => "token",//access-token修改为token 'optional' => [//不需要认证方法名 array 'login','user-info','company-reg','company-log','test','wechat-login','verify' ], ] ]); } /** * 通过code获取session_key * @return array */ public function actionLogin() { $code = Yii::$app->request->post('code'); if(empty($code)) return Apireturn::sent(0,'缺少code'); $wechat = new WeChat(); $result = $wechat->getApiSns($code); return Apireturn::sent(1,'success',200,$result); } /** * 获取登录凭证 */ public function actionUserInfo() { return Apireturn::sent(1,'success',200); } /** * 公司端注册 */ public function actionCompanyReg() { $post = Yii::$app->request->post(); if(empty($post['tel'])) return Apireturn::sent(0,'输入手机号'); if(!Common::is_tel($post['tel'])) return Apireturn::sent(0,'输入正确的手机号'); if(empty($post['code'])) return Apireturn::sent(0,'输入验证码'); $result = TelCodeController::existCode($post['tel'],TelCodeController::TYPE_REGISTER,$post['code']); if($result==false) return Apireturn::sent(0,'验证码错误'); if(empty($post['password'])) return Apireturn::sent(0,'输入密码'); if(empty($post['password2'])) return Apireturn::sent(0,'输入确认密码'); if($post['password'] != $post['password2']) return Apireturn::sent(0,'两次密码不一致'); if(User::find()->where(['username'=>$post['tel']])->count()>0) return Apireturn::sent(0,'账号已存在'); $model = new User(); $model->username = $post['tel']; $model->setPassword($post['password']); $model->generateAuthKey(); $model->status =User::STATUS_ACTIVE; $model->state = User::USER_STATE_THROUGH; $model->created_at = time(); $model->updated_at = time(); //公司 if($post['role'] == 1) { if(empty($post['company_name'])) return Apireturn::sent(0,'请输入公司名称'); $model->role = User::USER_ROLE_DECORATE; if($model->validate() && $model->save()) { $company = new UserCompany(); $company->uid = $model->id; $company->created_at = time(); $company->updated_at = time(); $company->company = $post['company_name']; $company->tel = $post['tel']; $company->save(); }else{ return Apireturn::sent(0,'注册失败',200); } } else{ //建材 $model->role = User::USER_ROLE_MATER; // if($model->validate() && $model->save()) // return Apireturn::sent(1,'success',200); // else // return Apireturn::sent(0,'注册失败',200); if($model->validate() && $model->save()) { $mater = new UserMater(); $mater->uid = $model->id; $mater->tel = $post['tel']; $mater->save(); }else{ return Apireturn::sent(0,'注册失败',200); } } if(!empty($post['uid'])) { if(User::find()->where(['id'=>$post['uid']])->count()>0) { $api_share = new ApiShare(); $api_share->uid = $model->id; $api_share->share_uid = $post['uid']; $api_share->c_time = time(); $api_share->save(); } } return Apireturn::sent(1,'登录成功',200); } /** * 登录 */ public function actionCompanyLog() { $post = Yii::$app->request->post(); if(empty($post['username'])) return Apireturn::sent(0,'账号不能为空',200); if(empty($post['password'])) return Apireturn::sent(0,'密码不能为空',200); $user = User::find()->where(array('username'=>$post['username']))->one(); if(empty($user)) return Apireturn::sent(0,'用户不存在',200); if($user->status==User::STATUS_DELETED) return Apireturn::sent(0,'用户被删除',200); if(!Yii::$app->getSecurity()->validatePassword($post['password'],$user->password_hash)) return Apireturn::sent(0,'密码错误',200); if(!in_array($user->role,array(User::USER_ROLE_DECORATE,User::USER_ROLE_MATER))) return Apireturn::sent(0,'无权限',200); $access_token = md5($user->id.$user->auth_key.time()); $user->access_token = $access_token; if($user->save()) return Apireturn::sent(1,'登录成功',200,array('token'=>$access_token,'role'=>$user->role)); else return Apireturn::sent(0,'登录失败',200); } /** * 用户是否绑定手机 */ public function actionBindTel() { if(empty(Yii::$app->user->identity->tel)) $data = 0; else $data = 1; return Apireturn::sent(1,'success',200,$data); } /** * 用户的修改及查看 * @return array */ public function actionEdit(){ $model = UserInfo::findOne(['uid'=>Yii::$app->user->id]); if(empty($model)){ return Apireturn::sent(0,'找不到数据',200); } if(Yii::$app->request->isPost){ $data = Yii::$app->request->post(); if(isset($data['uid'])){ unset($data['uid']); } if( $model->load($data,'') && $model->save()){ return Apireturn::sent(1,'保存成功',200); } return Apireturn::sent(0,$model->getFirstError(),200); } $arr = $model->getAttributes(['nickname','portrait']); $arr['tel']=Yii::$app->user->identity->tel; return Apireturn::sent(1,'查询信息',200,$arr); } /** * 绑定手机号 */ public function actionBinding() { $tel = Yii::$app->request->post('tel'); $code = Yii::$app->request->post('code'); if(empty($tel) || empty($code)) return Apireturn::sent(0,'缺少参数'); $result = TelCodeController::existCode($tel,TelCodeController::TYPE_BIND,$code); if($result==false) return Apireturn::sent(0,'验证码错误'); $count = User::find()->where(array('tel'=>$tel))->count(); if($count>0) return Apireturn::sent(0,'手机号已绑定',200); $model = User::find()->where(['id'=>Yii::$app->user->id])->one(); // if(!empty($model->tel)) // return Apireturn::sent(0,'账号已绑定手机',200); $model->tel = $tel; if($model->save()) { TelCodeController::clearCode($tel,TelCodeController::TYPE_BIND); return Apireturn::sent(1, '绑定成功', 200); } else { return Apireturn::sent(0, '绑定失败', 200); } } public function actionNews(){ $page = Yii::$app->request->POST('page', 1); $time = time(); $models = Notice::find()->from("{{%notice}} a")->select("b.*,a.release_time")->leftJoin("{{%information}} b","a.sid = b.id")->where(['a.status'=>Notice::STATUS_ACTIVE,'b.type'=>Information::INFORMATION ]); $models = $models->andwhere(['<' , 'a.release_time' , $time]); $models = $models->andwhere(['>' , 'a.over_time' , $time]); $models = $models->offset(($page-1)*self::DISPLAY)->limit(self::DISPLAY); $models = $models->orderBy('a.updated_at DESC')->asArray()->all(); //$models = Information::find()->orderBy('created_at desc')->where(['type'=>Information::INFORMATION,'status'=>Information::STATUS_ACTIVE]); //$models=$models->offset(($page-1)*self::DISPLAY)->limit(self::DISPLAY)->asArray()->all(); foreach ($models as $key =>$each){ $models[$key]['created_at']=date('Y-m-d H:i',$each['release_time']); } return Apireturn::sent(1,'列表成功',200,$models); } public function actionNewsdetail(){ $id = Yii::$app->request->POST('id'); $models = Information::find()->where(array('id'=>$id))->one(); $models['created_at']=date('Y-m-d H:i',$models['created_at']); return Apireturn::sent(1,'获取成功',200,$models); } public function actionWechatLogin() { $code =\Yii::$app->request->post('code'); header('content-type:application/json; charset=UTF-8;'); if(empty($code)) return Apireturn::sent(0,'NO CODE',200); $data = ''; WxBizDecrypt::$appid = Yii::$app->params['wechatapi']['appidUser']; WxBizDecrypt::$appSecret =Yii::$app->params['wechatapi']['secretUser']; $result = WxBizDecrypt::getSessionkey($code,$data); if($result == WxBizDecrypt::$OK){ $dataObj = json_decode($data); if(empty($dataObj->session_key)) return Apireturn::sent(0,'用户授权失败',200); //$res['session_key'] =$dataObj->session_key; //$res['openid'] = $dataObj->openid; $sessionKey =$dataObj->session_key; $encryptedData = Yii::$app->request->post('encryptedData'); $iv = Yii::$app->request->post('iv'); // return Apireturn::sent(1,'success',200,array('encryptedData'=>$encryptedData,'iv'=>$iv,'sessionKey'=>$sessionKey)); $result = WxBizDecrypt::decryptData($encryptedData,$iv,$sessionKey,$data); if($result == WxBizDecrypt::$OK){ $dataObj = json_decode($data); if(!empty($dataObj->openId)){ $model = User::find()->where(['username'=>$dataObj->openId,'role'=>User::USER_ROLE_COMMON])->one(); if(!empty($model)) { $access_token = md5($model->id.$model->auth_key.time()); $model->login_count = $model->login_count + 1; $model->access_token = $access_token; if($model->save()) return Apireturn::sent(1,'登录成功',200,array('token'=>$access_token,'loginCount'=>1)); else return Apireturn::sent(0,'登录失败',200); }else{ $model = new User(); $model->username = $dataObj->openId; $model->setPassword('null'); $model->generateAuthKey(); $model->status =User::STATUS_ACTIVE; $model->state = User::USER_STATE_THROUGH; $model->role = User::USER_ROLE_COMMON; $model->created_at = time(); $model->updated_at = time(); if($model->validate() && $model->save()) { Yii::$app->db->createCommand()->insert('{{%user_info}}',['uid'=>$model->id,'nickname'=>$dataObj->nickName,'updated_at'=>time(),'portrait'=>$dataObj->avatarUrl])->execute(); Yii::$app->db->createCommand()->insert('{{%user_wechat}}',['uid'=>$model->id,'openid'=>$dataObj->openId])->execute(); $access_token = md5($model->id.$model->auth_key.time()); $model->access_token = $access_token; if($model->save()) return Apireturn::sent(1,'登录成功',200,array('token'=>$access_token)); else return Apireturn::sent(0,'登录失败',200); } return Apireturn::sent(0,'获取用户信息出错',200); } // return Apireturn::sent(1,'success',200,$dataObj); }else{ return Apireturn::sent(0,'获取用户信息出错',200); } }else{ return Apireturn::sent(0,'解密用户信息出错',200); } }else{ return Apireturn::sent(0,'获取用户信息出错',200); } } public function actionVerify() { $token = \Yii::$app->request->post('token'); if(!empty($token)) { $is_exit = User::find()->where('access_token=:access_token',['access_token'=>$token])->one(); if(!empty($is_exit)) { return Apireturn::sent(0, 'verify success', 200); } else { return Apireturn::sent(1, 'verify fail', 200); } } else { return Apireturn::sent(1, 'token not null', 200); } } /** * 登录次数 * @return array */ public function actionLoginCount() { return Apireturn::sent(1, 'success', 200,array('count'=>Yii::$app->user->identity->login_count)); } }