84 lines
2.5 KiB
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;
|
|
}
|
|
} |