order-food-admin/app/Http/Controllers/Api/Miniprogram/UsersController.php

158 lines
5.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace App\Http\Controllers\Api\Miniprogram;
use Cache;
use Carbon\Carbon;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Models\{User, PointsLog, UserTicket};
use App\Http\Resources\{UserResource, PointsLogsResource, UserTicketResource};
class UsersController extends Controller
{
/**
* 绑定用户信息,头像
*/
public function bindInfo(Request $request)
{
$request->validate([
'data' => 'required',
'iv' => 'required'
]);
$app = \EasyWeChat::miniProgram();
$user = auth('api')->user();
// 解密
$session = Cache::has($user->mini_openid) ? Cache::get($user->mini_openid):'';
if(!$session){
return $this->error('解析失败, 请重新调用auth');
}
$iv = $request->input('iv');
$data = $request->input('data');
try {
$decryptedData = $app->encryptor->decryptData($session, $iv, $data);
$user->nick_name = data_get($decryptedData, 'nickName');
$user->avatar = data_get($decryptedData, 'avatarUrl');
$user->save();
return UserResource::make($user);
} catch (\EasyWeChat\Kernel\Exceptions\DecryptException $e) {
return $this->error('解析失败, '.$e->getMessage());
}
}
public function bindPhone(Request $request){
$request->validate([
'data' => 'required',
'iv' => 'required',
]);
$app = \EasyWeChat::miniProgram();
$user = auth('api')->user();
// 解密
$session = Cache::has($user->mini_openid) ? Cache::get($user->mini_openid):'';
if(!$session){
return $this->error('解析失败, 请重新调用auth');
}
$iv = $request->input('iv');
$data = $request->input('data');
try {
$decryptedData = $app->encryptor->decryptData($session, $iv, $data);
$phone = data_get($decryptedData, 'phoneNumber');
$message = '绑定成功';
if($user->register_gift == 0){
//查询注册赠送的优惠券
$tickets = json_decode(admin_setting('register_ticket'));
if(count($tickets) > 0){
$user->sendTicket($tickets, 0, '注册绑定手机号赠送');
$message = '恭喜获得优惠券,请在【我的优惠券】中查看';
$user->register_gift = 1;
}
}
$user->phone = $phone;
$user->save();
return $this->success(UserResource::make($user)->resolve(), $message);
} catch (\EasyWeChat\Kernel\Exceptions\DecryptException $e) {
return $this->error('解析失败, 重新进入小程序再绑定');
}
}
/**
* 更新用户信息
*/
public function updateInfo(Request $request){
$user = auth('api')->user();
$need_update = 0;
//更新头像
if($request->filled('avatar')){
$user->avatar = str_replace(env('OSS_URL'), '', $request->input('avatar'));
// dd(env('OSS_URL'),$request->input('avatar'), str_replace(env('OSS_URL'), '', $request->input('avatar')), $user->avatar);
$need_update = 1;
}
$need_update && $user->save();
return UserResource::make($user);
}
/**
* 积分记录
*/
public function pointsLog(Request $request){
$user = auth('api')->user();
$per_page = $request->input('per_page', 10);
$list = PointsLog::where([
'user_id'=>$user->id,
])->orderBy('created_at', 'desc')->paginate($per_page);
return PointsLogsResource::collection($list)->additional(['code' => Response::HTTP_OK, 'message' => '']);
}
/**
* 获取用户奖品数量情况
*/
public function getUserAward(Request $request){
$user = auth('api')->user();
$award_array = [];
for($i =1; $i<10; $i++){
$key = 'award_'.$i;
$award_array[$i] = $user->activity->$key;
}
return $this->success($award_array);
}
public function userInfo(Request $request){
$user = auth('api')->user();
return UserResource::make($user);
}
/**
* 获取用户优惠券
*/
public function userTicket(Request $request){
$type = $request->input('type', 1);//1可用2失效
$user = auth('api')->user();
$per_page = $request->input('per_page', 10);
$query = UserTicket::with('quanTicket')->where([
'user_id'=>$user->id,
]);
if($type == 1){
$query->where('ticket_status', 0)->where('end_time', '>', Carbon::now());
}else{
$query->where(function($q){
$q->where('ticket_status', 1)->orWhere('end_time', '<=', Carbon::now());
});
}
$list = $query->orderBy('created_at', 'desc')->paginate($per_page);
return UserTicketResource::collection($list)->additional(['code' => Response::HTTP_OK, 'message' => '']);
}
}