diff --git a/app/Endpoint/Api/Http/Controllers/Account/WalletPasswordController.php b/app/Endpoint/Api/Http/Controllers/Account/WalletPasswordController.php index 3678fd92..ac376310 100644 --- a/app/Endpoint/Api/Http/Controllers/Account/WalletPasswordController.php +++ b/app/Endpoint/Api/Http/Controllers/Account/WalletPasswordController.php @@ -4,12 +4,48 @@ namespace App\Endpoint\Api\Http\Controllers\Account; use App\Endpoint\Api\Http\Controllers\Controller; use App\Exceptions\BizException; +use App\Models\SmsCode; use App\Models\Wallet; +use App\Services\SmsCodeService; use Illuminate\Http\Request; use Illuminate\Support\Arr; class WalletPasswordController extends Controller { + /** + * 设置钱包密码 + * + * @param Request $request + * @param SmsCodeService $smsCodeService + * @return void + */ + public function update(Request $request, SmsCodeService $smsCodeService) + { + $input = $request->validate([ + 'verify_code' => ['bail', 'required'], + 'new_password' => ['bail', 'required', 'size:6'], + ], [ + 'verify_code' => '验证码', + 'new_password' => '新密码', + ]); + + $user = $request->user(); + + $smsCodeService->validate( + $user->phone, + SmsCode::TYPE_SET_WALLET_PASSWORD, + $input['verify_code'] + ); + + Wallet::updateOrCreate([ + 'user_id'=> $user->id, + ], [ + 'password' => $input['new_password'], + ]); + + return response()->noContent(); + } + /** * 设置安全密码 * diff --git a/app/Endpoint/Api/Http/Controllers/SmsCodeController.php b/app/Endpoint/Api/Http/Controllers/SmsCodeController.php index 0cd8fa6d..aa6a1e61 100644 --- a/app/Endpoint/Api/Http/Controllers/SmsCodeController.php +++ b/app/Endpoint/Api/Http/Controllers/SmsCodeController.php @@ -2,9 +2,12 @@ namespace App\Endpoint\Api\Http\Controllers; -use App\Endpoint\Api\Http\Requests\StoreSmsCodeRequest; use App\Exceptions\BizException; +use App\Models\SmsCode; +use App\Rules\PhoneNumber; use App\Services\SmsCodeService; +use Illuminate\Auth\AuthenticationException; +use Illuminate\Http\Request; use Throwable; class SmsCodeController extends Controller @@ -12,22 +15,36 @@ class SmsCodeController extends Controller /** * 发送短信验证码 * - * @param \App\Endpoint\Api\Http\Requests\StoreSmsCodeRequest $request + * @param \Illuminate\Http\Request $request * @param \App\Services\SmsCodeService $smsCodeService * @return \Illuminate\Http\Response * * @throws \App\Exceptions\BizException */ public function store( - StoreSmsCodeRequest $request, + Request $request, SmsCodeService $smsCodeService, ) { + $type = (int) $request->input('type'); + + if (in_array($type, [SmsCode::TYPE_SET_WALLET_PASSWORD])) { + if (is_null($user = $request->user())) { + throw new AuthenticationException('请先登录', ['api']); + } + + $phone = $user->phone; + } else { + $request->validate([ + 'phone' => ['bail', 'required', new PhoneNumber()], + ]); + + $phone = $request->input('phone'); + } + + $code = app()->isProduction() ? mt_rand(100000, 999999) : '666666'; + try { - $smsCodeService->send( - $request->input('phone'), - $request->input('type'), - app()->isProduction() ? mt_rand(100000, 999999) : '666666', - ); + $smsCodeService->send($phone, $type, $code); } catch (BizException $e) { throw $e; } catch (Throwable $e) { diff --git a/app/Endpoint/Api/Http/Requests/StoreSmsCodeRequest.php b/app/Endpoint/Api/Http/Requests/StoreSmsCodeRequest.php deleted file mode 100644 index 1ee9150d..00000000 --- a/app/Endpoint/Api/Http/Requests/StoreSmsCodeRequest.php +++ /dev/null @@ -1,32 +0,0 @@ - ['bail', 'required', new PhoneNumber()], - 'type' => ['bail', 'required', 'int'], - ]; - } -} diff --git a/app/Endpoint/Api/routes.php b/app/Endpoint/Api/routes.php index 4370afd0..66151284 100644 --- a/app/Endpoint/Api/routes.php +++ b/app/Endpoint/Api/routes.php @@ -92,6 +92,7 @@ Route::group([ // 修改密码 Route::post('change-password', ChangePasswordController::class); //安全密码 + Route::put('wallet-password', [WalletPasswordController::class, 'update']); Route::post('wallet-password/reset', [WalletPasswordController::class, 'reset']);//重置或设置安全密码 //我的账户 diff --git a/app/Models/SmsCode.php b/app/Models/SmsCode.php index cf4022cc..73d030ba 100644 --- a/app/Models/SmsCode.php +++ b/app/Models/SmsCode.php @@ -14,6 +14,7 @@ class SmsCode extends Model public const TYPE_REGISTER = 1; public const TYPE_RESET_PASSWORD = 2; + public const TYPE_SET_WALLET_PASSWORD = 3; /** * @var array @@ -51,6 +52,7 @@ class SmsCode extends Model public static $allowedTypes = [ self::TYPE_REGISTER, self::TYPE_RESET_PASSWORD, + self::TYPE_SET_WALLET_PASSWORD, ]; /** diff --git a/app/Services/SmsCodeService.php b/app/Services/SmsCodeService.php index 1fa53d02..3cae4762 100644 --- a/app/Services/SmsCodeService.php +++ b/app/Services/SmsCodeService.php @@ -43,10 +43,23 @@ class SmsCodeService throw new BizException(__('Invalid verification code type')); } - if ($type === SmsCode::TYPE_REGISTER) { - if (User::where('phone', $phone)->exists()) { - throw new BizException(__('The phone number is already registered')); - } + $user = User::where('phone', $phone)->first(); + + switch ($type) { + case SmsCode::TYPE_REGISTER: + if ($user) { + throw new BizException(__('The phone number is already registered')); + } + + break; + + case SmsCode::TYPE_RESET_PASSWORD: + case SmsCode::TYPE_SET_WALLET_PASSWORD: + if ($user === null) { + throw new BizException('手机号未注册'); + } + + break; } if (! $this->cache->add("sms_lock_{$type}_{$phone}", 1, $decaySeconds)) { @@ -58,6 +71,7 @@ class SmsCodeService 'code' => $code, 'type' => $type, 'expires_at' => now()->addSeconds($this->expires), + 'user_id' => $user->id, ]); }