aSv = new Api2021Service(); $this->checkParamSv = new CheckParamService(); $this->captcha = new CaptchaBuilder(); $this->captcha->build(); } public function setdoc(Request $request) { // 參數驗證 $messages = [ 'doc.required' => '圖片必填', ]; $validate = Validator::make($request->all(), [ 'doc' => 'required', ], $messages); if ($validate->fails()) { $err = $validate->errors(); $err_msg = ""; foreach ($err->all() as $item) { $err_msg .= $item . "\n"; } return response()->json(["succ" => false, "err" => $err_msg]); } else { $doc = $request->input('doc', ''); $doc = explode(',', $doc); $doc = base64_decode($doc[1]); } $data = $this->aSv->setdoc($doc); // 返回 return response()->json(["succ" => true, "err" => '', "data" => $data]); } public function setinfo(Request $request) { // 參數驗證 $messages = [ 'image_uri.nullable' => '', 'image_uri.regex' => '圖片路徑格式錯誤', 'nickname.required' => '暱稱必填', 'nickname.max' => '暱稱最多64字', // 格式的一半 'memo.nullable' => '', 'memo.max' => '留言最多1024字', // 格式的一半 'hash.nullable' => '', 'hash.max' => 'TAG最多64字', // 格式的一半 'name.required' => '姓名必填', 'name.max' => '姓名最多32字', // 格式的一半 'tel.required' => '電話必填', 'tel.max' => '電話最多32字', 'email.required' => '信箱必填', 'email.max' => '信箱最多128字', 'email.email' => '信箱格式錯誤', 'zone.required' => '地區必填', 'zone.max' => '地區最多16字', // 格式的一半 'utm_source.nullable' => '', 'utm_source.max' => 'utm_source 20字以內', 'utm_medium.nullable' => '', 'utm_medium.max' => 'utm_medium 20字以內', 'utm_campaign.nullable' => '', 'utm_campaign.max' => 'utm_campaign 20字以內', ]; $validate = Validator::make($request->all(), [ 'image_uri' => ['regex:/^pr(e|o)\/202(1|2)-[0-9]{2}-[0-9]{2}\/[0-9]{10}\.jpg$/'], 'nickname' => 'max:128', 'memo' => 'max:2048', 'hash' => 'max:128', 'name' => 'required|max:64', 'tel' => 'required|max:32', 'email' => 'required|max:128|email', 'zone' => 'required|max:32', 'utm_source' => 'nullable|max:20', 'utm_medium' => 'nullable|max:20', 'utm_campaign' => 'nullable|max:20', ], $messages); if ($validate->fails()) { $err = $validate->errors(); $err_msg = ""; foreach ($err->all() as $item) { $err_msg .= $item . "\n"; } return response()->json(["succ" => false, "err" => $err_msg]); } else { $info = [ 'image_uri' => $request->input('image_uri', ''), 'nickname' => $request->input('nickname', '') ?? '', 'memo' => $request->input('memo', ''), 'hash' => $request->input('hash', ''), 'name' => $request->input('name', ''), 'tel' => $request->input('tel', ''), 'email' => $request->input('email', ''), 'zone' => $request->input('zone', ''), 'utm_source' => $request->input('utm_source', ''), 'utm_medium' => $request->input('utm_medium', ''), 'utm_campaign' => $request->input('utm_campaign', ''), ]; } // 業務邏輯: 保存訊息 $this->aSv->setinfo($info); // 返回 return response()->json(["succ" => true, "err" => '']); } public function counterGet($type) { // 業務邏輯: 保存訊息 $cnt = $this->aSv->counterGet($type); // 返回 return response()->json(["succ" => true, "err" => '', "cnt" => $cnt]); } public function counterSet($type) { // 業務邏輯: 設定訊息 $this->aSv->counterSet($type); // 返回 return response()->json(["succ" => true, "err" => '']); } public function reset() { $this->aSv->reset(); // 返回 return response()->json(["succ" => true, "err" => '']); } public function cdnInvalidation(Request $request) { $path = $request->input('path'); $client = new CloudFront\CloudFrontClient([ 'region' => env('AWS_S3_REGION'), 'version' => 'latest', 'credentials' => [ 'key' => env('AWS_CDN_KEY'), 'secret' => env('AWS_CDN_SECRET'), ], ]); $result = $client->createInvalidation([ 'DistributionId' => env('AWS_CDN_ID'), 'InvalidationBatch' => [ 'CallerReference' => time() . Uuid::uuid4()->toString(), 'Paths' => [ 'Items' => [$path], 'Quantity' => 1, ], ], ]); return '進行中,根據檔案數量請等待數秒至數分鐘不等。'; } }