158 lines
5.1 KiB
PHP
158 lines
5.1 KiB
PHP
<?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' => '']);
|
||
}
|
||
|
||
} |