阶段更新

This commit is contained in:
2023-01-12 14:47:38 +08:00
parent 088dd64b2f
commit 5b8901281c
626 changed files with 39326 additions and 12 deletions

View File

@@ -0,0 +1,63 @@
<?php
namespace Modules\User\Http\Controllers\Api\Auth;
use App\Api\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use Jason\Api\Api;
use Modules\User\Events\UserLoginSuccess;
use Modules\User\Http\Requests\LoginRequest;
use Modules\User\Models\User;
class LoginController extends Controller
{
/**
* Notes : 用户名密码登录
*
* @Date : 2021/3/11 5:03 下午
* @Author : <Jason.C>
* @param LoginRequest $request
* @return JsonResponse
*/
public function index(LoginRequest $request): JsonResponse
{
$credentials = [
'username' => $request->username,
'password' => $request->password,
];
$token = Api::attempt($credentials);
if ($token) {
$user = User::where('username', $request->username)->first();
event(new UserLoginSuccess($user, $request, '账号密码'));
return $this->success([
'access_token' => $token,
'token_type' => 'Bearer',
]);
} else {
return $this->failed('用户名或密码错误');
}
}
/**
* Notes : 退出登录,撤销所有令牌,这个需要配合 api:^5.0 使用
*
* @Date : 2021/9/22 11:07 上午
* @Author : <Jason.C>
* @return JsonResponse
*/
public function logout(): JsonResponse
{
$user = Api::user();
if ($user) {
$user->tokens()->delete();
}
return $this->success('');
}
}

View File

@@ -0,0 +1,43 @@
<?php
namespace Modules\User\Http\Controllers\Api\Auth;
use App\Api\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use Jason\Api\Api;
use Modules\User\Events\UserLoginSuccess;
use Modules\User\Http\Requests\RegisterRequest;
use Modules\User\Models\User;
class RegisterController extends Controller
{
/**
* Notes : 注册
*
* @Date : 2021/3/14 1:24 下午
* @Author : <Jason.C>
* @param RegisterRequest $request
* @return JsonResponse
*/
public function index(RegisterRequest $request): JsonResponse
{
$username = $request->username;
$password = $request->password;
$user = User::create([
'username' => $username,
'password' => $password,
]);
$token = Api::login($user);
event(new UserLoginSuccess($user, $request, '用户注册'));
return $this->success([
'access_token' => $token,
'token_type' => 'Bearer',
]);
}
}

View File

@@ -0,0 +1,132 @@
<?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,
]);
}
}

View File

@@ -0,0 +1,154 @@
<?php
namespace Modules\User\Http\Controllers\Api\Auth;
use App\Api\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Modules\User\Traits\WechatTrait;
class WechatController extends Controller
{
use WechatTrait;
/**
* Notes: 获取授权的跳转地址
*
* @Author: 玄尘
* @Date : 2021/6/25 13:21
* @param Request $request
* @return mixed
*/
public function getAuthUrl(Request $request)
{
$app = app('wechat.official_account');
$pages = $request->url ?? '';
$scopes = $request->scopes ?? ['snsapi_userinfo'];
$web_url = config('user.web.base');
$redirect = $web_url.$pages;
if (! is_array($scopes)) {
$scopes = [$scopes];
}
$response = $app->oauth->scopes($scopes)->redirect($redirect);
return $this->success($response);
}
/**
* Notes: 获取jssdk
*
* @Author: 玄尘
* @Date : 2021/7/1 11:08
* @param Request $request
* @return JsonResponse
*/
public function getJsSdk(Request $request)
{
$url = $request->url;
$jsApiList = $request->jsApiList ?? [];
$openTagList = $request->openTagList ?? [];
$app = app('wechat.official_account');
if ($url) {
$app->jssdk->setUrl($url);
}
if (! is_array($jsApiList)) {
$jsApiList = [$jsApiList];
}
if (! is_array($openTagList)) {
$openTagList = [$openTagList];
}
return $this->success($app->jssdk->buildConfig($jsApiList, false, false, true, $openTagList));
}
/**
* Notes: 微信分享
*
* @Author: 玄尘
* @Date : 2021/10/26 16:52
* @param Request $request
* @return JsonResponse|mixed
* @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
* @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
* @throws \EasyWeChat\Kernel\Exceptions\RuntimeException
* @throws \GuzzleHttp\Exception\GuzzleException
* @throws \Psr\SimpleCache\InvalidArgumentException
*/
public function officialShare(Request $request)
{
$url = $request->url ?? '';
if (empty($url)) {
return $this->failed('地址必须传');
}
$app = app('wechat.official_account');
$apis = [
'updateAppMessageShareData',
'updateTimelineShareData',
// 'showOptionMenu',
// 'showMenuItems',
'showAllNonBaseMenuItem',
];
$app->jssdk->setUrl($url);
$cog = $app->jssdk->buildConfig($apis);
return $this->success($cog);
}
/**
* Notes: 获取小程序openid
*
* @Author: 玄尘
* @Date: 2022/9/26 14:17
* @return mixed|void
*/
public function getMiniOpenid(Request $request)
{
$validator = \Validator::make($request->all(), [
'code' => 'required',
], [
'code.required' => '缺少参数code',
]);
if ($validator->fails()) {
return $this->failed($validator->errors()->first());
}
$weChat = app('wechat.mini_program');
$session = $weChat->auth->session($request->code);
if (isset($session->errcode)) {
return $this->failed($session->errmsg);
}
return $this->success($session->openid);
}
/**
* Notes: 获取公众号openid
*
* @Author: 玄尘
* @Date: 2022/9/26 14:21
*/
public function getOfficialOpenid()
{
try {
$weUser = $this->getUserFromCode();
return $this->success([
'openid' => $weUser->getId()
]);
} catch (\Exception $exception) {
return $this->failed($exception->getMessage());
}
}
}