cxgj/modules/api/models/ResetPasswordForm.php
2023-11-27 09:45:13 +08:00

99 lines
2.9 KiB
PHP

<?php
/**
* @author Any
* @description KISS
* @date 2021-5-13
* @version 1.0.0
*
* _____LOG_____
*
*/
namespace app\modules\api\models;
use app\models\User;
use app\models\sms\SmsMsgHelper;
use app\models\sms\SmsTpl;
use app\components\EncryptHelper;
class ResetPasswordForm extends ApiModel
{
public $mobile;
public $mobile_prefix;
public $code;
public $cx_mch_id;
public $password;
public $password_repeat;
public function rules()
{
return [
[['mobile', 'mobile_prefix', 'code', 'password', 'password_repeat'], 'trim'],
[['mobile', 'mobile_prefix', 'code', 'password', 'password_repeat'], 'string'],
[['cx_mch_id', ], 'integer'],
[['mobile_prefix'], 'default', 'value' => 86],
[['mobile', 'code', 'cx_mch_id', 'password', 'password_repeat'], 'required'],
[['password','password_repeat'], 'string', 'min' => 6],
[['password'],'match', 'pattern' => '/(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[-#_*%$])^.{6,16}$/', 'message' => '密码需包含大小写字母以及字符殊符号 #-_*%$组成', ],
['password', 'compare', 'message' => '两次密码必须一致'],
];
}
public function attributeLabels() {
return [
'mobile' => '手机号',
'mobile_prefix' => '手机号国家代码',
'code' => '验证码',
'password' => '密码',
'password_repeat' => '重复密码'
];
}
public function reset()
{
if(!$this->validate()){
return $this->getModelError();
}
$mobile_phone = EncryptHelper::encryptMobilePhone($this->mobile);
if(!$mobile_phone){
return [
'code' => 1,
'msg' => '系统内部异常'
];
}
$user = User::findOne([
'cx_mch_id' => $this->cx_mch_id,
'mobile_phone' => $mobile_phone,
'mobile_prefix' => $this->mobile_prefix,
'is_delete' => 0,
'status' => User::STATUS_NORMAL
]);
if($user == null){
return [
'code' => 1,
'msg' => '手机号未绑定任何账号',
];
}
//验证码校验
$sms_sender = new SmsMsgHelper($this->cx_mch_id);
$res = $sms_sender->validate($this->mobile, $this->code, SmsTpl::TYPE_MODIFY_PASSWORD, $this->mobile_prefix);
if($res['code'] != 0){
return $res;
}
//重置密码
$user->password = \Yii::$app->security->generatePasswordHash($this->password);
if(!$user->save()){
return $this->getModelError($user);
}
return [
'code' => 0,
'msg' => '密码重置成功'
];
}
}