Files
water-back/modules/User/Http/Controllers/Api/Auth/SmsController.php
2023-01-12 14:47:38 +08:00

133 lines
3.7 KiB
PHP

<?php
namespace Modules\User\Http\Controllers\Api\Auth;
use App\Api\Controllers\Controller;
use Exception;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Arr;
use Jason\Api\Api;
use Modules\User\Events\UserLoginSuccess;
use Modules\User\Facades\Sms;
use Modules\User\Http\Requests\LoginSmsRequest;
use Modules\User\Http\Requests\SmsRequest;
use Modules\User\Models\User;
use Modules\User\Models\UserChannel;
use Vinkla\Hashids\Facades\Hashids;
class SmsController extends Controller
{
/**
* Notes : 获取登录短信验证码
*
* @Date : 2021/5/26 4:59 下午
* @Author : <Jason.C>
* @param SmsRequest $request
* @return JsonResponse
*/
public function send(SmsRequest $request): JsonResponse
{
$mobile = $request->mobileNo;
try {
Sms::sendVerificationCode($mobile);
if (Arr::get(Sms::getConfig(), 'debug')) {
$message = '短信发送成功,测试短信码'.Arr::get(Sms::getConfig(), 'debug_code');
} else {
$message = '短信发送成功';
}
return $this->success($message);
//
// $isExists = User::where('username', $mobile)->exists();
//
// return $this->success([
// 'new' => ! $isExists,
// 'message' => $message,
// ]);
} catch (Exception $exception) {
return $this->failed($exception->getException('aliyun')->getMessage());
}
}
/**
* Notes : 短信验证码登录
*
* @Date : 2021/7/20 10:15 上午
* @Author : <Jason.C>
* @param LoginSmsRequest $request
* @return JsonResponse
*/
public function login(LoginSmsRequest $request): JsonResponse
{
$mobileNo = $request->mobileNo;
$code = $request->code;
$invite_code = $request->invite ?? '';
$channel_code = $request->channel ?? '';//渠道
$name = $request->name ?? '';//姓名
$delivery_code = $request->delivery_code ?? '';//提货码
$channel = '';
if ($channel_code) {
$channel = UserChannel::query()
->where('code', $channel_code)
->first();
}
$parent = 0;
if ($invite_code) {
$invite = Hashids::connection('code')->decode($invite_code);
if (empty($invite)) {
return $this->failed('邀请码不正确');
}
$parent = $invite[0];
}
$check = Sms::checkCode($mobileNo, $code);
if ($check == false) {
return $this->failed('验证码不正确', 422);
}
$user = User::firstOrCreate([
'username' => $mobileNo,
], [
'parent_id' => $parent,
'channel_id' => $channel ? $channel->id : null,
'password' => 111111,
]);
$is_new = $user->wasRecentlyCreated;
$message = '';
if ($is_new) {
if ($user->parent && $parent && $user->parent->id != $parent) {
$message = "您已与用户{$user->parent->info->nickname}绑定隶属关系,此次邀请码无效";
}
}
if ($name) {
$user->info->update([
'nickname' => $name
]);
}
$token = Api::login($user);
event(new UserLoginSuccess($user, $request, '手机验证码'));
return $this->success([
'token_type' => 'Bearer',
'access_token' => $token,
'message' => $message,
'invite' => Hashids::connection('code')->encode($user->id),
'is_new' => $is_new,
]);
}
}