get('card_id'); $name = $request->get('name'); $age = idCard2age($card_id); $is_match_ride_age = ($age >= 16); User::where('id', $this->user->id)->update([ 'card_id' => $card_id, 'truename' => $name, 'is_card_certified' => User::CARD_NO, 'is_match_ride_age' => $is_match_ride_age ]); if (!$is_match_ride_age) { return $this->errorNoValidation('不满16周岁禁止骑车!'); } $status = IdCardHandler::main($card_id, $name); if ($status['code']) { return $this->errorNoValidation($status['msg']); } $user = User::where('id', $this->user->id)->update([ 'is_card_certified' => User::CARD_OK ]); event(new CardCertifiedEvent($this->user())); } catch (\Exception $exception) { return $this->exception($exception); } return $this->response->array([ 'is_card_certified' => !!$user ]); } public function bindWechatMobile(WechatEncryptorMobileRequest $request) { try { $session = $request->get('session_key'); $iv = $request->get('iv'); $encryptedData = $request->get('encryptedData'); $miniProgram = Factory::miniProgram(wechat_mini_config(self::$MERCHANT)); $decryptedData = $miniProgram->encryptor->decryptData($session, $iv, $encryptedData); $mobile = $decryptedData['purePhoneNumber']; $user = User::where('id', $this->user->id)->update([ 'mobile' => $mobile, 'is_bind_mobile' => User::BIND_MOBILE_OK ]); return $this->response->array([ 'is_bind_mobile' => !!$user ]); } catch (\Exception $exception) { return $this->exception($exception); } } /** * 绑定手机号 * @param BindMobileRequest $request * User: Mead */ public function bindMobile(BindMobileRequest $request) { try { $mobile = $request->get('mobile'); $code = $request->get('code', false); $v_code = Cache::get("verification_code_{$mobile}", ''); if (empty($v_code)) { return $this->errorNoValidation('验证码已过期'); } if ((string)$v_code !== (string)$code) { return $this->errorNoValidation('验证码错误'); } if (User::where('mobile', $mobile)->where('merchant_id', self::$MERCHANT_ID)->count()) { return $this->errorNoValidation('手机号已存在'); } $user = User::where('id', $this->user->id)->update([ 'mobile' => $mobile, 'is_bind_mobile' => User::BIND_MOBILE_OK ]); return $this->response->array([ 'is_bind_mobile' => !!$user ]); } catch (\Exception $exception) { return $this->exception($exception); } } /** * 发送验证码 * @param MobileCodeRequest $request * @return mixed * User: Mead */ public function sendVerificationCode(MobileCodeRequest $request) { $mobile = $request->get('mobile'); $type = $request->get('type'); $code = rand(1000, 9999); if ($type == 2) { // 仅仅表示换绑手机号 if ((bool)$this->user()->is_bind_mobile) { $verify_mobile = $this->user()->mobile ?? ''; if ($verify_mobile == $mobile) return $this->errorNoValidation('与旧手机号码相同,无需更改'); } $verify_user = User::query()->merchant()->where('mobile', $mobile)->exists(); if ($verify_user) return $this->errorNoValidation('您绑定得手机号已存在,如有疑问请致电客服'); } elseif ($type == 3) { // 仅仅换账号登录时 $verify_user = User::query()->merchant()->where('mobile', $mobile)->exists(); if (!$verify_user) return $this->errorNoValidation('您登录得手机号不存在,如有疑问请致电客服'); } try { // $this->dispatch(new SendSMSCodeJob($mobile, $code)); app('easy_sms')->send($mobile, [ 'template' => 'SMS_199330236', 'data' => [ 'code' => $code ] ]); Cache::put("verification_code_{$mobile}", $code, Carbon::now()->addMinutes(5)); return $this->response->array([ 'is_send_sms' => true ]); } catch (Exception $exception) { return $this->exception($exception); } } /** * 获取时间戳 * @param UserRepository $userRepository * @return * User: Mead */ public function userStatus(UserRepository $userRepository) { try { $user = $userRepository->byIdGetUserStatus($this->user->id); return $this->response->item($user, UserStatusTransformer::class); } catch (\Exception $exception) { return $this->exception($exception); } } /** * 存储用户的form_id * User: Mead */ public function storeFormId(UserFormIdRequest $request) { try { $form_id = $request->get('form_id'); FormId::create([ 'user_id' => $this->user->id, 'form_id' => $form_id, 'timestamp' => (time() + 604800) ]); return $this->success(); } catch (\Exception $exception) { return $this->exception($exception); } } /** * 用户钱包记录 userWallerLogList * * @param WalletLogRepository $walletLogRepository * @return \Dingo\Api\Http\Response|void * @author Fx * */ public function userWallerLogList(WalletLogRepository $walletLogRepository) { try { $data = $walletLogRepository->byUserIdGetWalletLog($this->user->id); return $this->response->paginator($data, WalletLogTransformer::class); } catch (\Exception $exception) { return $this->exception($exception); } } public function getInviteWechatQrcode(ImageUploadHandler $imageUploadHandler) { try { $folder = storage_path('app/public/img/invite_new_users/qrcode/'); $endfilename = 'qrcode.png'; $user_id = $this->user->id; // $user_id = 212; $user_qrcode_file = $folder . $user_id . $endfilename; if (!file_exists($user_qrcode_file)) { if (!is_dir($folder . 'qrcode')) { mkdir($folder . 'qrcode'); } if (!$imageUploadHandler->createWechatQrcode($folder, $user_id, $endfilename)) { return $this->errorNoValidation('系统错误,请稍后重试'); } } return $this->response->array([ 'path' => config('app.url') . '/storage/img/invite_new_users/qrcode/' . $user_id . $endfilename, ]); } catch (\Exception $exception) { return $this->exception($exception); } } public function getInvitePoster(InviteNewUsersConfigRepository $inviteNewUsersConfigRepository, ImageUploadHandler $imageUploadHandler) { try { $folder = storage_path('app/public/img/invite_new_users/'); $endfilename = 'qrcode.png'; $user_id = $this->user->id; $register_area_id = $this->user->register_area_id; $posterEndFileName = 'register_area_id_' . $register_area_id . '_user_id_' . $user_id . '_poster.png'; $path = $folder . 'poster/' . $posterEndFileName; if (!is_dir($folder . 'poster')) { mkdir($folder . 'poster'); } if (!file_exists($path)) { $user_qrcode_file = $folder . 'qrcode/' . $user_id . $endfilename; if (!file_exists($user_qrcode_file)) { if (!is_dir($folder . 'qrcode')) { mkdir($folder . 'qrcode'); } if (!$imageUploadHandler->createWechatQrcode($folder . 'qrcode/', $user_id, $endfilename)) { return $this->errorNoValidation('系统错误,请稍后重试'); } } $inviteConfig = $inviteNewUsersConfigRepository->getInviteNewUsersConfigByAreaId($register_area_id); if (empty($inviteConfig) || empty($inviteConfig->background_image)) return $this->errorNoValidation('系统错误,请稍后重试'); $background_image = $inviteConfig->background_image; // Log::info($background_image); $img = Image::make($background_image); // Log::info(111); $watermark = Image::make($user_qrcode_file); $img->insert($watermark, 'bottom', 0, 635); $img->save($path); } return $this->response->array([ 'path' => config('app.url') . '/storage/img/invite_new_users/poster/' . $posterEndFileName, ]); } catch (\Exception $exception) { return $this->exception($exception); } } /** * @param InviteNewUsersRewardRequest $request * @param InviteNewUsersConfigRepository $inviteNewUsersConfigRepository * @param InviteNewUserRepository $inviteNewUserRepository * @param InviteNewUsersGiveGiftLogRepository $inviteNewUsersGiveGiftLogRepository * @return \Dingo\Api\Http\Response|void * Author: Mead */ public function getInviteNewUsersReward(InviteNewUsersRewardRequest $request, InviteNewUsersConfigRepository $inviteNewUsersConfigRepository, InviteNewUserRepository $inviteNewUserRepository, InviteNewUsersGiveGiftLogRepository $inviteNewUsersGiveGiftLogRepository) { try { $invite_new_users_configs_id = $request->get('invite_new_users_configs_id'); $gift_type = $request->get('gift_type'); $gift_id = $request->get('gift_id'); $gift_num = $request->get('gift_num'); $num = $request->get('num'); $data = [ 'user_id' => $this->user->id, 'invite_new_users_configs_id' => $invite_new_users_configs_id, 'gift_type' => $gift_type, 'gift_id' => $gift_id, 'gift_num' => $gift_num, 'merchant_id' => self::$MERCHANT_ID ]; $invite_new_users_configs = $inviteNewUsersConfigRepository->byIdGetModel($invite_new_users_configs_id); if (empty($invite_new_users_configs)) return $this->errorNoValidation('找不到该互动,或活动已过期'); $is_repeat = $invite_new_users_configs->is_repeat; if ($is_repeat == InviteNewUsersConfig::REPEAT_NO) { // 不可重复 if ($inviteNewUsersGiveGiftLogRepository->checkExist($data)) return $this->errorNoValidation('您已经领取过该礼物,不可重复领取'); } $condition = $invite_new_users_configs->condition; $register_ids = $inviteNewUserRepository->isCondition($this->user->id, $condition, $num); if (!$register_ids) return $this->errorNoValidation('暂未达成条件,请稍后重试'); // 达成条件 $res = DB::transaction(function () use ($inviteNewUserRepository, $register_ids, $inviteNewUsersGiveGiftLogRepository, $data) { // 更新用户名额失效 $inviteNewUserRepository->updateStatus($register_ids); // 送礼 $logs = $inviteNewUsersGiveGiftLogRepository->logs($data); return $logs; }); if ($res) { // 成功获得 return $this->response->array(['status' => true]); } else { return $this->errorNoValidation('赠送失败'); } } catch (\Exception $exception) { return $this->exception($exception); } } /** * * @param InviteNewUserRepository $inviteNewUserRepository * @return \Dingo\Api\Http\Response|void * Author: Mead\ */ public function getInviteUsers(InviteNewUserRepository $inviteNewUserRepository) { try { $inviteUsers = $inviteNewUserRepository->getInviteUsers($this->user->id); return $this->response->collection($inviteUsers, RegisterUsersTransformer::class); } catch (\Exception $exception) { return $this->exception($exception); } } /** * 学生或者老师实名认证 * Author: Mead */ public function students(UserStudentAuthRequest $studentAuthRequest) { $data = $studentAuthRequest->all(); $user_id = $this->user->id; $auth = Student::where('user_id', $user_id)->first(); $re = false; if ($auth) { //已经认证 if ((int)$auth->auth_status === Student::AUTH_STATUS_OK) { return $this->error('您已经认证,请勿重复认证'); } $re = $auth->fill([ 'user_id' => $user_id, 'name' => $data['name'], 'school' => $data['school'], 'student_no' => $data['no'], 'type' => $data['type'], 'year' => $data['year'], 'imgs' => $data['imgs'], 'auth_status' => Student::AUTH_STATUS_WAIT, ]); } else { $re = Student::create([ 'user_id' => $user_id, 'name' => $data['name'], 'school' => $data['school'], 'student_no' => $data['no'], 'type' => $data['type'], 'year' => $data['year'], 'imgs' => $data['imgs'], 'auth_status' => Student::AUTH_STATUS_WAIT, 'merchant_id' => self::$MERCHANT_ID ]); } if ($re) { return $this->success(); } return $this->error('认证失败'); } /** * 新用户邀请 * @param Request $request * Author: Mead */ public function newUserCoupons(Request $request, CouponRepository $couponRepository) { $ids = $request->get('ids', false); $user = $this->user; //判断是否领取 if ($user->is_new_user_coupons === User::IS_NEW_USER_COUPONS_NO) { return $this->error('您已经领取,请勿重复领取'); } //发放福利 $coupons = $couponRepository->byIdsGetNewUserCoupons($ids); foreach ($coupons as $coupon) { CouponsUserBag::addCoupon($coupon, $user, $coupon->give_count); } User::where('id', $user->id)->update([ 'is_new_user_coupons' => User::IS_NEW_USER_COUPONS_NO ]); return $this->success(); } }