master
cody 3 months ago
parent b5277a1467
commit 6cf5027447

@ -553,25 +553,25 @@ class CourseController extends CommonController
{
$all = \request()->all();
$messages = [
'longitude.required' => '经度必填',
'latitude.required' => '纬度必填',
// 'longitude.required' => '经度必填',
// 'latitude.required' => '纬度必填',
'course_content_id.required' => '课表id必填',
];
$validator = Validator::make($all, [
'longitude' => 'required',
'latitude' => 'required',
// 'longitude' => 'required',
// 'latitude' => 'required',
'course_content_id' => 'required'
], $messages);
if ($validator->fails()) {
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
}
// 获取打卡范围,千米
$content_check_range = Config::getValueByKey('content_check_range');
// $content_check_range = Config::getValueByKey('content_check_range');
$courseContent = CourseContent::find($all['course_content_id']);
$distance = getDistance($courseContent->longitude, $courseContent->latitude, $all['longitude'], $all['latitude']);
if ($distance > $content_check_range) {
return $this->fail([ResponseCode::ERROR_BUSINESS, '超出打卡范围']);
}
// $distance = getDistance($courseContent->longitude, $courseContent->latitude, $all['longitude'], $all['latitude']);
// if ($distance > $content_check_range) {
// return $this->fail([ResponseCode::ERROR_BUSINESS, '超出打卡范围']);
// }
// 判断当天才能签到
$today = date('Y-m-d');
if ($today != $courseContent->date) {
@ -639,12 +639,12 @@ class CourseController extends CommonController
$all = \request()->all();
$messages = [
'longitude.required' => '经度必填',
'latitude.required' => '纬度必填',
'course_id.required' => '课表id必填',
// 'latitude.required' => '纬度必填',
// 'course_id.required' => '课表id必填',
];
$validator = Validator::make($all, [
'longitude' => 'required',
'latitude' => 'required',
// 'longitude' => 'required',
// 'latitude' => 'required',
'course_id' => 'required'
], $messages);
if ($validator->fails()) {
@ -652,14 +652,14 @@ class CourseController extends CommonController
}
// 获取打卡范围,千米
$content_check_range = Config::getValueByKey('content_check_range');
$course = Course::find($all['course_id']);
if (empty($course->longitude) || empty($course->latitude)) {
return $this->fail([ResponseCode::ERROR_BUSINESS, '请先设置课程经纬度']);
}
$distance = getDistance($course->longitude, $course->latitude, $all['longitude'], $all['latitude']);
if ($distance > $content_check_range) {
return $this->fail([ResponseCode::ERROR_BUSINESS, '超出打卡范围']);
}
// $course = Course::find($all['course_id']);
// if (empty($course->longitude) || empty($course->latitude)) {
// return $this->fail([ResponseCode::ERROR_BUSINESS, '请先设置课程经纬度']);
// }
// $distance = getDistance($course->longitude, $course->latitude, $all['longitude'], $all['latitude']);
// if ($distance > $content_check_range) {
// return $this->fail([ResponseCode::ERROR_BUSINESS, '超出打卡范围']);
// }
// 判断当天才能签到
$today = date('Y-m-d');
if ($today != $course->start_date) {

@ -521,4 +521,96 @@ class UserController extends CommonController
return $this->success(compact('qrcode'));
}
/**
* @OA\Get(
* path="/api/mobile/user/mobile-login",
* tags={"小程序-用户管理"},
* summary="手机号登陆",
* @OA\Parameter(name="code", in="query", @OA\Schema(type="string"), required=false, description="code"),
* @OA\Parameter(name="mobile", in="query", @OA\Schema(type="string"), required=false, description="手机号"),
* @OA\Response(
* response=200,
* description="操作成功"
* )
* )
*/
public function mobileLogin()
{
$all = \request()->all();
$messages = [
'code.required' => 'code必填',
'mobile.required' => '手机号必填'
];
$validator = Validator::make($all, [
'code' => 'required',
'mobile' => 'required'
], $messages);
if ($validator->fails()) {
return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
}
$key = 'sms_login_' . $all['mobile'];
$check = Cache::get($key);
if (empty($check)) return $this->fail([ResponseCode::ERROR_BUSINESS, '请先发送验证码']);
if ($check['code'] != $all['code']) return $this->fail([ResponseCode::ERROR_BUSINESS, '验证码错误']);
$user = User::where('mobile', $all['mobile'])->first();
$token = $user->createToken("mobile-token")->plainTextToken;
return $this->success(compact('token'));
}
/**
* @OA\Get (
* path="/api/mobile/user/mobile-login-code",
* tags={"手机端-用户管理"},
* summary="短信登陆发送验证码",
* description="",
* @OA\Parameter(name="course_id", in="query", @OA\Schema(type="string"), required=true, description="课程id"),
* @OA\Parameter(name="mobile", in="query", @OA\Schema(type="string"), required=true, description="手机号"),
* @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"),
* @OA\Response(
* response="200",
* description=""
* )
* )
*/
public function mobileLoginCode()
{
$all = \request()->all();
$messages = [
'course_id.required' => '课程id必填',
'mobile.required' => '手机号必填',
'mobile.numeric' => '手机号格式错误',
];
$validator = Validator::make($all, [
'course_id' => 'required',
'mobile' => 'required|numeric'
], $messages);
if ($validator->fails()) {
return $this->fail([StarterResponseCode::START_ERROR_PARAMETER, implode(',', $validator->errors()->all())]);
}
// 监测是否正常报名并通过
$courseSigns = CourseSign::where('course_id', $all['course_id'])
->whereHas('user', function ($query) use ($all) {
$query->where('mobile', $all['mobile']);
})->where('status', 1)
->first();
if (empty($courseSigns)) {
return $this->fail([ResponseCode::ERROR_BUSINESS, '未报名课程']);
}
$key = 'sms_login_' . $all['mobile'];
$check = Cache::get($key);
if (isset($check) && time() - $check['time'] <= 60) {
return $this->fail([ResponseCode::ERROR_BUSINESS, '请勿频繁发送']);
}
$code = rand(1000, 9999);
$smsSign = Config::getValueByKey('sms_sign');
$content = "{$smsSign}您的验证码是:{$code},验证码五分钟内有效,如非本人操作,请忽略。";
$result = ymSms($all['mobile'], $content);
if ($result) {
// 缓存
Cache::put($key, ['code' => $code, 'time' => time()], 300);
return $this->success("发送成功");
}
return $this->fail([StarterResponseCode::START_ERROR_PARAMETER, "发送失败"]);
}
}

@ -255,10 +255,15 @@ Route::group(["namespace" => "Mobile", "prefix" => "mobile"], function () {
Route::get('course/course-detail-pc', [\App\Http\Controllers\Mobile\CourseController::class, "courseDetailPc"]);
// 小程序登陆
Route::get('user/applet-login', [\App\Http\Controllers\Mobile\UserController::class, "appletLogin"]);
// 手机号登陆
Route::get('user/mobile-login', [\App\Http\Controllers\Mobile\UserController::class, "mobileLogin"]);
// 手机号登陆发送验证码
Route::get('user/mobile-login-code', [\App\Http\Controllers\Mobile\UserController::class, "mobileLoginCode"]);
// 新闻列表
Route::get('course/news', [\App\Http\Controllers\Mobile\CourseController::class, "news"]);
// 新闻详情
Route::get('course/news-detail', [\App\Http\Controllers\Mobile\CourseController::class, "newsDetail"]);
Route::get('course/course-detail', [\App\Http\Controllers\Mobile\CourseController::class, "courseDetail"]);
// 支付回调
Route::any('course/pay_callback', [\App\Http\Controllers\Mobile\CourseController::class, "payCallback"]);
Route::group(['middleware' => ['sanctum.jwt:mobile']], function () {
@ -275,7 +280,7 @@ Route::group(["namespace" => "Mobile", "prefix" => "mobile"], function () {
Route::post('user/update-donates', [\App\Http\Controllers\Mobile\UserController::class, "updateDonates"]);
// 课程信息
Route::get('course/course-detail', [\App\Http\Controllers\Mobile\CourseController::class, "courseDetail"]);
Route::get('course/evaluation-detail', [\App\Http\Controllers\Mobile\CourseController::class, "evaluationDetail"]);
Route::post('course/sign', [\App\Http\Controllers\Mobile\CourseController::class, "sign"]);

Loading…
Cancel
Save