123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362 |
- <?php
- namespace api\modules\v1\controllers;
- use api\libs\WxBizDecrypt;
- use api\models\Common;
- use common\library\WeChat;
- use common\models\ApiShare;
- use common\models\Information;
- use common\models\Notice;
- use common\models\User;
- use common\models\UserCompany;
- use common\models\UserInfo;
- use common\models\UserMater;
- use yii\rest\ActiveController;
- use common\library\Apireturn;
- use yii\helpers\ArrayHelper;
- use yii\filters\auth\QueryParamAuth;
- use yii;
- class UsersController extends ActiveController
- {
- const DISPLAY = 15;//显示条数
- public $modelClass = 'common\models';
- public function behaviors()
- {
- return ArrayHelper::merge(parent::behaviors(), [
- 'authenticator' => [
- '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));
- }
- }
|