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

84 lines
2.5 KiB
PHP

<?php
namespace App\Http\Controllers\Api\Miniprogram;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Str;
use EasyWeChat\Factory;
use App\Models\{User, ActivityUser};
use Carbon\Carbon;
use Cache;
use App\Http\Resources\UserResource;
class AuthController extends Controller
{
public function authMiniprogram(Request $request){
$request->validate([
'code' => 'required',
], [
'code.required' => '授权码必填',
]);
//绑定OPenid
$code = $request->input('code');
$app = \EasyWeChat::miniProgram();
$result = $app->auth->session($code);
if (data_get($result, 'errcode')) {
return $this->error(data_get($result, 'errmsg'));
}
if ($openid = data_get($result, 'openid')) {
$session_key = data_get($result, 'session_key');
//判断是否已绑定对应用户
$user = User::where(['mini_openid'=>$openid])->first();
//写入缓存
Cache::put($openid, $session_key, 48*60*60);
if(!$user){
//写入新用户
$user = new User();
$user->mini_openid = $openid;
$user->save();
//写入用户抽奖记录
$activity_user = new ActivityUser();
$activity_user->user_id = $user->id;
$activity_user->save();
}
return $this->attemptUser($user, $request);
}
return $this->error('授权失败');
}
public function refreshToken(Request $request){
try {
$token = auth('api')->refresh();
}catch (\Throwable $th) {
// $this->message = $th->getMessage();
return $this->error('刷新错误,请稍后再试');
}
return $this->success([
'api_token'=> $token,
'expire_in'=> Carbon::parse()->addSeconds(auth('api')->factory()->getTTL() * 60)->toDateTimeString()
]);
}
protected function attemptUser(User $user, Request $request)
{
$token = auth('api')->login($user);
// if (!$user->api_token) {
// $user->api_token = Str::random(32);
// }
// $user->api_token = $token;
$data = UserResource::make($user);
$data->offsetSet('api_token', $token);
return $data;
}
}