133 lines
3.7 KiB
PHP
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,
|
|
]);
|
|
}
|
|
|
|
}
|