123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008 |
- <?php
-
- namespace App\Http\Controllers\Web;
-
- use App\Http\Controllers\Controller;
- use Illuminate\Http\Request;
- use App\Http\Services\Web\Api2021Service;
- use App\Http\Services\CheckParamService;
- use Illuminate\Support\Facades\Validator;
- use App\Http\Services\ConstDef\GeneralConst;
- use Illuminate\Support\Facades\Redis;
- use App\Http\Services\Backend\DataManagement\SettingManagementService;
- use Illuminate\Support\Facades\Cookie;
-
- class Api2021Controller extends Controller
- {
-
- private $aSv;
- private $cSv;
- protected $sisLog;
- protected $redis;
- private $settingManagementSv;
-
- public function __construct()
- {
- $this->aSv = new Api2021Service();
- $this->cSv = new CheckParamService();
- $this->settingManagementSv = new SettingManagementService();
- $this->sisLog = [
- 'type' => GeneralConst::LOG_USER,
- 'cdate' => date("Y-m-d H:i:s"),
- ];
- }
-
- public function __destruct()
- {
- // $this->aSv->syslog($this->sisLog);
- }
-
- // 申報系統(已廢棄)
-
- public function getinfo($hash)
- {
- // 業務驗證(解析HASH/是否封存/是否上架中)
- $hash = $this->aSv->hashParse($hash);
- if (!$this->aSv->hashCheck($hash)) return response()->json(["succ" => false, "err" => '代碼錯誤']);
- // 取得渲染用資訊
- $info = $this->aSv->getinfo($hash);
-
- // 返回
- return response()->json(["succ" => true, "err" => '', "info" => $info]);
- }
-
- public function saveimg($hash, Request $request)
- {
- // 參數驗證
- $messages = [
- 'type.required' => 'type 必填',
- 'type.regex' => 'type 格式錯誤',
- ];
- $validate = Validator::make($request->all(), [
- 'type' => ['required', 'regex:/^(' . implode('|', GeneralConst::$appendixValidateMap) . ')$/'],
- ], $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 {
- $type = $request->input('type', '');
- }
- // 業務驗證(解析HASH/是否封存/是否上架中)
- $hash = $this->aSv->hashParse($hash);
- if (!$this->aSv->hashCheck($hash)) return response()->json(["succ" => false, "err" => '代碼錯誤']);
- // 路徑命名
- $dirname = 'material';
- $date = date("Ymd");
- if (!file_exists($dirname)) mkdir($dirname, 0777, true);
- if (!file_exists($dirname . '/' . GeneralConst::$appendixMap[ $type ]['web_path'])) mkdir($dirname . '/' . GeneralConst::$appendixMap[ $type ]['web_path'], 0777, true);
- if (!file_exists($dirname . '/' . GeneralConst::$appendixMap[ $type ]['web_path'] . '/' . $date)) mkdir($dirname . '/' . GeneralConst::$appendixMap[ $type ]['web_path'] . '/' . $date, 0777, true);
- $basepath = $dirname . '/' . GeneralConst::$appendixMap[ $type ]['web_path'] . '/' . $date . '/';
- // 保存圖片
- $time = md5(bcrypt(microtime()));
- $err = '';
- $url = '';
- if ($request->hasFile('img')) {
- if ($request->file('img')->isValid()) {
- if (!in_array($request->file('img')->getMimeType(), ['image/jpeg'])) $err = '只接受 jpg 圖片';
- if ($request->file('img')->getSize() > 5242880) $err = '圖片檔案太大'; // 5MB
- if ($err == '') {
- $request->file('img')->move($basepath, $time . GeneralConst::$appendixMap[ $type ]['ext']);
- $url = $basepath . $time . GeneralConst::$appendixMap[ $type ]['ext'];
- }
- } else {
- $err = '圖片格式有誤';
- }
- } else {
- $err = '圖片檔案太大';
- }
- if ($err != '') return response()->json(["succ" => false, "err" => $err]);
-
- // 返回
- return response()->json(["succ" => true, "err" => '', "url" => $url]);
- }
-
- public function savedata($hash, Request $request)
- {
- // 參數驗證
- $messages = [
- 'name.required' => '姓名必填',
- 'name.min' => '姓名字數限制為1-50',
- 'name.max' => '姓名字數限制為1-50',
- 'identity.required' => '身分證號必填',
- 'identity.min' => '身分證號格式錯誤',
- 'identity.max' => '身分證號格式錯誤',
- 'add_host.required' => '戶籍地址必填',
- 'add_host.min' => '戶籍地址字數限制為1-200',
- 'add_host.max' => '戶籍地址字數限制為1-200',
- 'add_contact.required' => '通訊地址必填',
- 'add_contact.min' => '通訊地址字數限制為1-200',
- 'add_contact.max' => '通訊地址字數限制為1-200',
- 'tel.required' => '電話必填',
- 'tel.min' => '電話字數限制為1-20',
- 'tel.max' => '電話字數限制為1-20',
- ];
- $validate = Validator::make($request->all(), [
- 'name' => 'required|min:1|max:50',
- 'identity' => 'required|min:10|max:10',
- 'add_host' => 'required|min:1|max:200',
- 'add_contact' => 'required|min:1|max:200',
- 'tel' => 'required|min:1|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 {
- $name = $request->input('name', '');
- $identity = $request->input('identity', '');
- $add_host = $request->input('add_host', '');
- $add_contact = $request->input('add_contact', '');
- $tel = $request->input('tel', '');
- }
- // 業務驗證(解析HASH/是否封存/是否上架中)
- $hash = $this->aSv->hashParse($hash);
- if (!$this->aSv->hashCheck($hash)) return response()->json(["succ" => false, "err" => '代碼錯誤']);
- // 業務驗證(身分證字號)
- if (!$this->cSv->isIdentity($identity)) return response()->json(["succ" => false, "err" => '身分證格式有誤']);
- // 業務驗證(是否有本獎項需要的素材)
- $info = $this->aSv->getinfo($hash);
- ${GeneralConst::APPENDIX_IDENTITY_FRONT} = '';
- ${GeneralConst::APPENDIX_IDENTITY_BACK} = '';
- ${GeneralConst::APPENDIX_PASSBOOK} = '';
- if ($info['is_ide'] == GeneralConst::PHOTO_YES) {
- ${GeneralConst::APPENDIX_IDENTITY_FRONT} = $request->input(GeneralConst::APPENDIX_IDENTITY_FRONT, '');
- ${GeneralConst::APPENDIX_IDENTITY_BACK} = $request->input(GeneralConst::APPENDIX_IDENTITY_BACK, '');
- if (!file_exists(${GeneralConst::APPENDIX_IDENTITY_FRONT})) {
- return response()->json(["succ" => false, "err" => '請重新上傳身分證正面']);
- } else {
- if (!preg_match('/^material\/' . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_FRONT ]['web_path'] . '\/[0-9]{8}\/[a-zA-Z0-9]{32}' . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_FRONT ]['ext'] . '$/', ${GeneralConst::APPENDIX_IDENTITY_FRONT})) {
- return response()->json(["succ" => false, "err" => '身分證正面路徑有問題']);
- }
- }
- if (!file_exists(${GeneralConst::APPENDIX_IDENTITY_BACK})) {
- return response()->json(["succ" => false, "err" => '請重新上傳身分證背面']);
- } else {
- if (!preg_match('/^material\/' . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_BACK ]['web_path'] . '\/[0-9]{8}\/[a-zA-Z0-9]{32}' . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_IDENTITY_BACK ]['ext'] . '$/', ${GeneralConst::APPENDIX_IDENTITY_BACK})) {
- return response()->json(["succ" => false, "err" => '身分證背面路徑有問題']);
- }
- }
- }
- if ($info['id_acc'] == GeneralConst::PHOTO_YES) {
- ${GeneralConst::APPENDIX_PASSBOOK} = $request->input(GeneralConst::APPENDIX_PASSBOOK, '');
- if (!file_exists(${GeneralConst::APPENDIX_PASSBOOK})) {
- return response()->json(["succ" => false, "err" => '請重新上傳存摺']);
- } else {
- if (!preg_match('/^material\/' . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_PASSBOOK ]['web_path'] . '\/[0-9]{8}\/[a-zA-Z0-9]{32}' . GeneralConst::$appendixMap[ GeneralConst::APPENDIX_PASSBOOK ]['ext'] . '$/', ${GeneralConst::APPENDIX_PASSBOOK})) {
- return response()->json(["succ" => false, "err" => '存摺路徑有問題']);
- }
- }
- }
- // 業務邏輯(製作PDF)
- $pdf_path = $this->aSv->makePDF($info, $name, $identity, $add_host, $add_contact, $tel, ${GeneralConst::APPENDIX_IDENTITY_FRONT}, ${GeneralConst::APPENDIX_IDENTITY_BACK}, ${GeneralConst::APPENDIX_PASSBOOK});
- // 業務邏輯(存入資料庫)
- $this->aSv->savedata($hash[1], $name, $identity, $add_host, $add_contact, $tel, ${GeneralConst::APPENDIX_IDENTITY_FRONT}, ${GeneralConst::APPENDIX_IDENTITY_BACK}, ${GeneralConst::APPENDIX_PASSBOOK}, $pdf_path);
-
- // 返回
- return response()->json(["succ" => true, "err" => '', "url" => $pdf_path]);
- }
-
- // 小遊戲 0518
-
- public function info($lineId)
- {
- // testonly 等待 N 秒
- // $now = time();
- // while(time() - $now < 6) {}
-
- // return response()->json(["succ" => true, "err" => '', "info" => []]);
-
- // testonly
- // $this->aSv->debuglog('server', [
- // 'SERVER_ADDR' => $_SERVER['SERVER_ADDR'],
- // 'lineUserId' => $lineId,
- // ]);
-
- $this->sisLog['func'] = __FUNCTION__;
- $this->sisLog['k'] = $lineId;
- $this->sisLog['memoIn'] = '';
- $this->sisLog['memoOut'] = '';
-
- // testonly
- // $this->aSv->debuglog([
- // 'hashLineId' => $hashLineId,
- // 'cookieGamecc' => Cookie::get('gamecc')
- // ]);
-
- // 業務驗證(是否加入LINE帳號的好友) [不存在 cookie 的時候就要進直通查詢,造成每天只要最多一次查詢就好]
- if (!Cookie::get('gamecc')) {
- // if (false) { // testonly
- // if (!$this->aSv->isAuthUserExists($lineId)) { // testonly 用資料庫檢查
- if (!$this->aSv->lineFriendCheck($lineId)) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請先加入 LINE 好友'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請先加入 LINE 好友']);
- }
- // else { // testonly 用資料庫檢查
- // $this->aSv->addAuthUser($lineId);
- // }
- }
-
- // 業務邏輯(檢查有無本地資料,沒有就新增,順便取得個人資訊包含吉點)
- $playerinfo = $this->aSv->playerinfo($lineId);
-
- // 業務邏輯(取得當天所屬於的回合日期資訊,包含回合起訖日、本回合簽到狀態)
- // 業務邏輯(取得當回合的兌獎狀態,包含所有獎項以及可換與否)
- $roundinfo = $this->aSv->roundinfo($lineId);
- $goodinfo = $this->aSv->goodinfo($lineId);
- if (!$roundinfo && !$goodinfo) {
- // 遊戲時間已過 && 兌獎時間已過
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '活動已結束'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '活動已結束']);
- } else {
- // 要嘛都在期限內,要嘛一定至少兌獎在期限內因為他的時間範圍較大,這時候就要把回合簽到資訊清空
- if (!$roundinfo) $roundinfo = [];
- }
-
- // 業務邏輯(整理實際可兌換的獎項)
- foreach ($goodinfo as &$g) if ($playerinfo['gp'] < $g['gp']) $g['canuse'] = false;
-
- // 資料整理
- $info = [
- 'playerinfo' => $playerinfo,
- 'roundinfo' => $roundinfo,
- 'goodinfo' => $goodinfo,
- ];
- $this->sisLog['memoIn'] = json_encode(['lineId' => $lineId], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['info' => $info], JSON_UNESCAPED_UNICODE);
-
- // 返回
- if (Cookie::get('gamecc')) {
- return response()->json(["succ" => true, "err" => '', "info" => $info]);
- } else {
- return response()->json(["succ" => true, "err" => '', "info" => $info])->cookie('gamecc', time(), 1440);
- }
- }
-
- public function game($lineId, Request $request)
- {
- // testonly 等待 N 秒
- // $now = time();
- // while(time() - $now < 6) {}
-
- $this->sisLog['func'] = __FUNCTION__;
- $this->sisLog['k'] = $lineId;
- $this->sisLog['memoIn'] = '';
- $this->sisLog['memoOut'] = '';
-
- // 業務驗證(是否加入LINE帳號的好友) [不存在 cookie 的時候就要進直通查詢,造成每天只要最多一次查詢就好]
- // if (false) { // testonly
- if (!Cookie::get('gamecc')) {
- if (!$this->aSv->lineFriendCheck($lineId)) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請先加入 LINE 好友'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請先加入 LINE 好友']);
- }
- }
-
- // 業務驗證(是否在本地有資料)
- if (!$this->aSv->isPlayer($lineId)) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請從首頁進入'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請從首頁進入']);
- }
-
- // 業務驗證(是否今日已玩過遊戲與簽到)
- // if (false) { // testonly for 壓測
- // if ($lineId != 'Ud2534d6e1eed9cee2c919a993443352b') {
- if ($lineId != $this->settingManagementSv->getSetting()['GAME_TESTING_LINE_ID']) {
- if (!$this->aSv->canPlay($lineId)) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '今日已玩過遊戲或者活動結束'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '今日已玩過遊戲或者活動結束']);
- }
- }
- // 參數驗證
- $name = '';
- $messages = [
- 'name.required' => '姓名必填',
- 'name.max' => '姓名最多100字',
- ];
- $validate = Validator::make($request->all(), [
- 'name' => 'required|max:100',
- ], $messages);
- if ($validate->fails()) {
- $err = $validate->errors();
- $err_msg = "";
- foreach ($err->all() as $item) {
- $err_msg .= $item . "\n";
- }
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => $err_msg], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => $err_msg]);
- } else {
- $name = $request->input('name', '');
- }
-
- // 業務邏輯(玩遊戲簽到)
- $res = $this->aSv->playGameAndCheckin($lineId, $name);
-
- // 資料整理
- $this->sisLog['memoIn'] = json_encode(['lineId' => $lineId], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['res' => $res], JSON_UNESCAPED_UNICODE);
-
- // 返回
- if (Cookie::get('gamecc')) {
- return response()->json(["succ" => true, "err" => '', "currentGameGp" => $res['currentGameGp'], "currentCheckinGp" => $res['currentCheckinGp'], "gpAll" => $res['gp']]);
- } else {
- return response()->json(["succ" => true, "err" => '', "currentGameGp" => $res['currentGameGp'], "currentCheckinGp" => $res['currentCheckinGp'], "gpAll" => $res['gp']])->cookie('gamecc', time(), 1440);
- }
- }
-
- public function redeem($lineId, $gid, Request $request)
- {
- $this->sisLog['func'] = __FUNCTION__;
- $this->sisLog['k'] = $lineId;
- $this->sisLog['memoIn'] = '';
- $this->sisLog['memoOut'] = '';
-
- // 打點數量限制
- // 作用範圍: ALL
- $redis = new Redis();
- $redis::connect('localhost', 6379);
- $rlimitkey = $this->settingManagementSv->getSetting()['GAME_ESI_TEST_EVENT_KEY'];
- if (!$redis::exists($rlimitkey)) {
- $redis::set($rlimitkey, 1);
- } else {
- $redis::incr($rlimitkey);
- }
- if ($redis::get($rlimitkey) > $this->settingManagementSv->getSetting()['GAME_ESI_TEST_EVENT_LIMIT']) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '測試點數不能再打了'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '測試點數不能再打了']);
- }
-
- // \Log::debug($rlimitkey);
- // \Log::debug($redis::get($rlimitkey));
- // return response()->json(["succ" => true, "err" => 'okok']);
-
- // 業務驗證(防重)
- // 作用範圍: 以人為單位
- $rkey = $this->settingManagementSv->getSetting()['GAME_ESI_TEST_EVENT_LIMIT'] . '_' . $lineId;
- if (!$redis::setnx($rkey, 'true')) {
- $redis::expire($rkey, 15); // 15 秒防重(這樣就算業務在其他地方掛了,他也會自動失效)
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '您操作過快,請稍後再試'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '您操作過快,請稍後再試']);
- }
-
- // 業務驗證(是否加入LINE帳號的好友)
- if (!$this->aSv->lineFriendCheck($lineId)) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請先加入 LINE 好友'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請先加入 LINE 好友']);
- }
-
- // 業務驗證(是否在本地有資料)
- if (!$this->aSv->isPlayer($lineId)) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請從首頁進入'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請從首頁進入']);
- }
-
- // 業務驗證(取得當回合的兌獎狀態,包含所有獎項以及可換與否,拿來比對驗證)
- $canuse = false;
- foreach ($this->aSv->goodinfo($lineId) as $g) if ($g['id'] == $gid) if ($g['canuse'] == true) $canuse = true;
- if (!$canuse) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '獎項不存在或沒有兌獎所需吉點'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '獎項不存在或沒有兌獎所需吉點']);
- }
-
- // 參數驗證
- $name = '';
- $messages = [
- 'name.required' => '姓名必填',
- 'name.max' => '姓名最多100字',
- ];
- $validate = Validator::make($request->all(), [
- 'name' => 'required|max:100',
- ], $messages);
- if ($validate->fails()) {
- $err = $validate->errors();
- $err_msg = "";
- foreach ($err->all() as $item) {
- $err_msg .= $item . "\n";
- }
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => $err_msg], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => $err_msg]);
- } else {
- $name = $request->input('name', '');
- }
-
- // 業務邏輯(兌點)
- $redeeminfo = $this->aSv->redeemGood($lineId, $gid, $name);
- if (!$redeeminfo) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '兌換失敗'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '兌換失敗']);
- }
-
- // 資料整理
- $this->sisLog['memoIn'] = json_encode(['lineId' => $lineId, 'gid' => $gid], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['redeeminfo' => $redeeminfo], JSON_UNESCAPED_UNICODE);
-
- // 防重解鎖
- $redis::del($rkey);
-
- return response()->json(["succ" => true, "err" => '']);
- }
-
- public function test()
- {
- // if (Cookie::get('ttcc')) {
- // return response()->json(["succ" => true, "err" => '', "info" => 'I have cookie: ' . Cookie::get('ttcc')]);
- // } else {
- // return response()->json(["succ" => true, "err" => '', "info" => 'no cookie'])->cookie('ttcc', '123', 1440);
- // }
-
- return true;
- // return $this->aSv->esiFlowBak();
- //return $_SERVER['SERVER_ADDR'] ?? 'no';
- }
-
- // 類發票
-
- public function friendchk($lineId)
- {
- $this->sisLog['func'] = __FUNCTION__;
- $this->sisLog['k'] = $lineId;
- $this->sisLog['kk'] = 'activity';
- $this->sisLog['memoIn'] = '';
- $this->sisLog['memoOut'] = '';
- // 業務驗證(是否加入LINE帳號的好友)
- if (!$this->aSv->lineFriendCheck($lineId, 'activity')) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請先加入 LINE 好友'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請先加入 LINE 好友']);
- }
- // 資料整理
- $this->sisLog['memoIn'] = json_encode(['lineId' => $lineId], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['res' => ''], JSON_UNESCAPED_UNICODE);
-
- // 返回
- return response()->json(["succ" => true, "err" => '']);
- }
-
- public function activities($lineId)
- {
- $this->sisLog['func'] = __FUNCTION__;
- $this->sisLog['k'] = $lineId;
- $this->sisLog['kk'] = 'activity';
- $this->sisLog['memoIn'] = '';
- $this->sisLog['memoOut'] = '';
- // 業務驗證(是否加入LINE帳號的好友)
- if (!$this->aSv->lineFriendCheck($lineId, 'activity')) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請先加入 LINE 好友'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請先加入 LINE 好友']);
- }
- // 業務邏輯(取得活動時間資訊)
- $activities = $this->aSv->activities();
- // 資料整理
- $this->sisLog['memoIn'] = json_encode(['lineId' => $lineId], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['res' => $activities], JSON_UNESCAPED_UNICODE);
-
- // 返回
- return response()->json(["succ" => true, "err" => '', "data" => $activities]);
- }
-
- public function setdoc($lineId, Request $request)
- {
- $this->sisLog['func'] = __FUNCTION__;
- $this->sisLog['k'] = $lineId;
- $this->sisLog['kk'] = 'activity';
- $this->sisLog['memoIn'] = '';
- $this->sisLog['memoOut'] = '';
- // 業務驗證(是否加入LINE帳號的好友)
- // if (!$this->aSv->lineFriendCheck($lineId, 'activity')) {
- // $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- // $this->sisLog['memoOut'] = json_encode(['msg' => '請先加入 LINE 好友'], JSON_UNESCAPED_UNICODE);
- //
- // return response()->json(["succ" => false, "err" => '請先加入 LINE 好友']);
- // }
- // 參數驗證
- $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";
- }
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => $err_msg], JSON_UNESCAPED_UNICODE);
-
- 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);
- // 資料整理
- $this->sisLog['memoIn'] = json_encode(['lineId' => $lineId], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['res' => $data], JSON_UNESCAPED_UNICODE);
-
- // 返回
- return response()->json(["succ" => true, "err" => '', "data" => $data]);
- }
-
- public function reqreceipt($lineId, Request $request)
- {
- $this->sisLog['func'] = __FUNCTION__;
- $this->sisLog['k'] = $lineId;
- $this->sisLog['kk'] = 'activity';
- $this->sisLog['memoIn'] = '';
- $this->sisLog['memoOut'] = '';
- // 業務驗證(是否加入LINE帳號的好友)
- if (!$this->aSv->lineFriendCheck($lineId, 'activity')) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請先加入 LINE 好友'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請先加入 LINE 好友']);
- }
- // 參數驗證
- $messages = [
- 'name.required' => '姓名必填',
- 'name.max' => '姓名最多64字',
- 'order_date.required' => '登錄日期必填',
- 'order_date.date_format' => '登錄日期格式錯誤',
- 'account_bank.required' => '銀行代碼必填',
- 'account_bank.regex' => '銀行代碼格式錯誤',
- 'account_no.required' => '銀行帳號必填',
- 'account_no.regex' => '銀行帳號格式錯誤',
- 'order_no.required' => '訂單編號必填',
- 'order_no.regex' => '訂單編號格式錯誤',
- ];
- $validate = Validator::make($request->all(), [
- 'name' => 'required|max:64',
- 'order_date' => 'required|date_format:Y-m-d',
- 'account_bank' => ['required', 'regex:/^[0-9]{1,10}$/'],
- 'account_no' => ['required', 'regex:/^[0-9]{1,30}$/'],
- 'order_no' => ['required', 'regex:/^[A-Za-z0-9]{1,30}$/'],
- ], $messages);
- if ($validate->fails()) {
- $err = $validate->errors();
- $err_msg = "";
- foreach ($err->all() as $item) {
- $err_msg .= $item . "\n";
- }
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical', 'param' => $_POST], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => $err_msg], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => $err_msg]);
- } else {
- $info = [
- 'name' => $request->input('name', ''),
- 'order_date' => $request->input('order_date', ''),
- 'account_bank' => $request->input('account_bank', ''),
- 'account_no' => $request->input('account_no', ''),
- 'order_no' => $request->input('order_no', ''),
- ];
- }
- // 業務驗證(取得當前的登錄區間)
- $activityinfo = $this->aSv->activityinfo();
- if (!$activityinfo) {
- // 尚未到達登錄時間
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical', 'param' => $_POST], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '尚未到達登錄時間'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '尚未到達登錄時間']);
- }
- // 業務驗證(收據時間也要在活動時間內)
- if ($activityinfo[0]['reqTimeBegin'] > $info['order_date'] || $activityinfo[0]['reqTimeFinal'] < $info['order_date']) {
- // 尚未到達登錄時間
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical', 'param' => $_POST], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '收據日期錯誤'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '收據日期錯誤']);
- }
- // 業務邏輯(登錄)
- $info['lineId'] = $lineId;
- $info['aid'] = $activityinfo[0]['id'];
- $id = $this->aSv->reqreceipt($info);
- if ($id == 0) {
- // 完全相同的資料不能登錄
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical', 'param' => $_POST], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '您已登錄過這筆資料'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '您已登錄過這筆資料']);
- }
- // 資料整理
- $this->sisLog['memoIn'] = json_encode(['info' => $info], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['res' => $id], JSON_UNESCAPED_UNICODE);
-
- // 返回
- return response()->json(["succ" => true, "err" => '']);
- }
-
- public function lstreceipt($lineId)
- {
- $this->sisLog['func'] = __FUNCTION__;
- $this->sisLog['k'] = $lineId;
- $this->sisLog['kk'] = 'activity';
- $this->sisLog['memoIn'] = '';
- $this->sisLog['memoOut'] = '';
- // 業務驗證(是否加入LINE帳號的好友)
- if (!$this->aSv->lineFriendCheck($lineId, 'activity')) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請先加入 LINE 好友'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請先加入 LINE 好友']);
- }
- // 業務邏輯(取得列表)
- $data = $this->aSv->lstreceipt($lineId);
- // 資料整理
- $this->sisLog['memoIn'] = json_encode(['lineId' => $lineId], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['res' => $data], JSON_UNESCAPED_UNICODE);
-
- // 返回
- return response()->json(["succ" => true, "err" => '', "data" => $data]);
- }
-
- public function redeemreceipt($lineId, $rid, Request $request)
- {
- $this->sisLog['func'] = __FUNCTION__;
- $this->sisLog['k'] = $lineId;
- $this->sisLog['kk'] = 'activity';
- $this->sisLog['memoIn'] = '';
- $this->sisLog['memoOut'] = '';
- // 業務驗證(是否加入LINE帳號的好友)
- if (!$this->aSv->lineFriendCheck($lineId, 'activity')) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請先加入 LINE 好友'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請先加入 LINE 好友']);
- }
- // 業務驗證(該紀錄狀態是否可執行本動作/該紀錄的所屬活動是否在登錄的時間範圍內)
- if (!$this->aSv->redeemCheck($lineId, (integer)$rid)) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical', 'rid' => $rid], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '權限錯誤'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '權限錯誤']);
- }
- // 業務邏輯(更改狀態)
- $this->aSv->redeemExecute($lineId, (integer)$rid);
- // 資料整理
- $this->sisLog['memoIn'] = json_encode(['lineId' => $lineId], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['res' => ''], JSON_UNESCAPED_UNICODE);
-
- // 返回
- return response()->json(["succ" => true, "err" => '']);
- }
-
- public function getreceipt($lineId, $rid, Request $request)
- {
- $this->sisLog['func'] = __FUNCTION__;
- $this->sisLog['k'] = $lineId;
- $this->sisLog['kk'] = 'activity';
- $this->sisLog['memoIn'] = '';
- $this->sisLog['memoOut'] = '';
- // 業務驗證(防重)
- // 作用範圍: 以人為單位
- $redis = new Redis();
- $redis::connect('localhost', 6379);
- $rkey = $this->settingManagementSv->getSetting()['RECEIPT_ESI_TEST_EVENT_KEY'] . '_' . $lineId;
- if (!$redis::setnx($rkey, 'true')) {
- $redis::expire($rkey, 15); // 15 秒防重(這樣就算業務在其他地方掛了,他也會自動失效)
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '您操作過快,請稍後再試'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '您操作過快,請稍後再試']);
- }
- // 業務驗證(是否加入LINE帳號的好友)
- if (!$this->aSv->lineFriendCheck($lineId, 'activity')) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請先加入 LINE 好友'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請先加入 LINE 好友']);
- }
- // 業務驗證(該紀錄狀態是否可執行本動作/該紀錄的所屬活動是否在登錄的時間範圍內)
- if (!$this->aSv->getCheck($lineId, (integer)$rid)) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical', 'rid' => $rid], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '權限錯誤'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '權限錯誤']);
- }
- // 業務邏輯(更改狀態)
- $getinfo = $this->aSv->getExecute($lineId, (integer)$rid);
- if (!$getinfo) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '兌換失敗'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '兌換失敗']);
- }
- // 資料整理
- $this->sisLog['memoIn'] = json_encode(['lineId' => $lineId], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['res' => ''], JSON_UNESCAPED_UNICODE);
- // 防重解鎖
- $redis::del($rkey);
-
- // 返回
- return response()->json(["succ" => true, "err" => '']);
- }
-
- // 串門子
-
- public function tinfo($lineId, Request $request)
- {
- $this->sisLog['func'] = __FUNCTION__;
- $this->sisLog['k'] = $lineId;
- $this->sisLog['kk'] = 'tmz';
- $this->sisLog['memoIn'] = '';
- $this->sisLog['memoOut'] = '';
- // 業務驗證(是否加入LINE帳號的好友) [不存在 cookie 的時候就要進直通查詢,造成每天只要最多一次查詢就好]
- if (!Cookie::get('tgamecc')) {
- if (!$this->aSv->lineFriendCheck($lineId, 'tmz')) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請先加入 LINE 好友'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請先加入 LINE 好友']);
- }
- }
- // 業務邏輯(檢查有無本地資料,沒有就新增,順便取得個人資訊包含吉點)
- $playerinfo = $this->aSv->tplayerinfo($lineId);
- // 參數驗證
- $name = '';
- $messages = [
- 'name.required' => '姓名必填',
- 'name.max' => '姓名最多100字',
- ];
- $validate = Validator::make($request->all(), [
- 'name' => 'required|max:100',
- ], $messages);
- if ($validate->fails()) {
- $err = $validate->errors();
- $err_msg = "";
- foreach ($err->all() as $item) {
- $err_msg .= $item . "\n";
- }
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => $err_msg], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => $err_msg]);
- } else {
- $name = $request->input('name', '');
- }
- // 業務邏輯(今日簽到)
- $this->aSv->tcheckin($lineId, $name);
- // 業務邏輯(取得當天所屬於的回合日期資訊,包含回合起訖日、本回合簽到狀態)
- $roundinfo = $this->aSv->troundinfo($lineId);
- if (!$roundinfo) {
- // 遊戲時間已過 && 兌獎時間已過
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '活動已結束'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '活動已結束']);
- } else {
- // 要嘛都在期限內,要嘛一定至少兌獎在期限內因為他的時間範圍較大,這時候就要把回合簽到資訊清空
- if (!$roundinfo) $roundinfo = [];
- }
- // 業務邏輯(取得是否可以轉蛋的資格)
- $redeeminfo = $this->aSv->tredeeminfo($lineId);
- // 資料整理
- $info = [
- 'playerinfo' => $playerinfo,
- 'roundinfo' => $roundinfo,
- 'redeeminfo' => $redeeminfo,
- ];
- $this->sisLog['memoIn'] = json_encode(['lineId' => $lineId], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['info' => $info], JSON_UNESCAPED_UNICODE);
-
- // 返回
- if (Cookie::get('tgamecc')) {
- return response()->json(["succ" => true, "err" => '', "info" => $info]);
- } else {
- return response()->json(["succ" => true, "err" => '', "info" => $info])->cookie('tgamecc', time(), 1440);
- }
- }
-
- public function tgame($lineId, Request $request)
- {
- $this->sisLog['func'] = __FUNCTION__;
- $this->sisLog['k'] = $lineId;
- $this->sisLog['kk'] = 'tmz';
- $this->sisLog['memoIn'] = '';
- $this->sisLog['memoOut'] = '';
- // 業務驗證(是否加入LINE帳號的好友) [不存在 cookie 的時候就要進直通查詢,造成每天只要最多一次查詢就好]
- if (!Cookie::get('tgamecc')) {
- if (!$this->aSv->lineFriendCheck($lineId, 'tmz')) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請先加入 LINE 好友'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請先加入 LINE 好友']);
- }
- }
- // 業務驗證(是否在本地有資料)
- if (!$this->aSv->isTPlayer($lineId)) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請從首頁進入'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請從首頁進入']);
- }
- // 參數驗證
- $name = '';
- $c = 0;
- $messages = [
- 'name.required' => '姓名必填',
- 'name.max' => '姓名最多100字',
- 'c.required' => '九宮格必填',
- ];
- $validate = Validator::make($request->all(), [
- 'name' => 'required|max:100',
- 'c' => 'required|numeric|min:1|max:9',
- ], $messages);
- if ($validate->fails()) {
- $err = $validate->errors();
- $err_msg = "";
- foreach ($err->all() as $item) {
- $err_msg .= $item . "\n";
- }
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => $err_msg], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => $err_msg]);
- } else {
- $name = $request->input('name', '');
- $c = $request->input('c', 0);
- }
- // 業務邏輯(玩遊戲)
- $res = $this->aSv->playTGame($lineId, $name, $c);
- if (!$res) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '已回答過囉'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '已回答過囉']);
- }
- // 資料整理
- $this->sisLog['memoIn'] = json_encode(['lineId' => $lineId, 'c' => $c], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['res' => $res], JSON_UNESCAPED_UNICODE);
-
- // 返回
- if (Cookie::get('tgamecc')) {
- return response()->json(["succ" => true, "err" => '', "currentGameGp" => $res['currentGameGp'], "playerinfo" => $res['gp']]);
- } else {
- return response()->json(["succ" => true, "err" => '', "currentGameGp" => $res['currentGameGp'], "playerinfo" => $res['gp']])->cookie('tgamecc', time(), 1440);
- }
- }
-
- public function tredeem($lineId, Request $request)
- {
- $this->sisLog['func'] = __FUNCTION__;
- $this->sisLog['k'] = $lineId;
- $this->sisLog['kk'] = 'tmz';
- $this->sisLog['memoIn'] = '';
- $this->sisLog['memoOut'] = '';
- // 打點數量限制
- // 作用範圍: ALL
- $redis = new Redis();
- $redis::connect('localhost', 6379);
- $rlimitkey = $this->settingManagementSv->getSetting()['TMZ_ESI_TEST_EVENT_KEY'];
- if (!$redis::exists($rlimitkey)) {
- $redis::set($rlimitkey, 1);
- } else {
- $redis::incr($rlimitkey);
- }
- if ($redis::get($rlimitkey) > $this->settingManagementSv->getSetting()['TMZ_ESI_TEST_EVENT_LIMIT']) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '測試點數不能再打了'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '測試點數不能再打了']);
- }
- // 業務驗證(防重)
- // 作用範圍: 以人為單位
- $rkey = $this->settingManagementSv->getSetting()['TMZ_ESI_TEST_EVENT_LIMIT'] . '_' . $lineId;
- if (!$redis::setnx($rkey, 'true')) {
- $redis::expire($rkey, 15); // 15 秒防重(這樣就算業務在其他地方掛了,他也會自動失效)
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '您操作過快,請稍後再試'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '您操作過快,請稍後再試']);
- }
- // 業務驗證(是否加入LINE帳號的好友)
- if (!$this->aSv->lineFriendCheck($lineId, 'tmz')) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請先加入 LINE 好友'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請先加入 LINE 好友']);
- }
- // 業務驗證(是否在本地有資料)
- if (!$this->aSv->isTPlayer($lineId)) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '請從首頁進入'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '請從首頁進入']);
- }
- // 參數驗證
- $name = '';
- $messages = [
- 'name.required' => '姓名必填',
- 'name.max' => '姓名最多100字',
- ];
- $validate = Validator::make($request->all(), [
- 'name' => 'required|max:100',
- ], $messages);
- if ($validate->fails()) {
- $err = $validate->errors();
- $err_msg = "";
- foreach ($err->all() as $item) {
- $err_msg .= $item . "\n";
- }
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => $err_msg], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => $err_msg]);
- } else {
- $name = $request->input('name', '');
- }
- // 業務邏輯(可否轉蛋再次確認)
- if (!$this->aSv->tredeeminfo($lineId)) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '吉點不夠不能轉蛋'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '吉點不夠不能轉蛋']);
- }
- // 業務邏輯(轉蛋兌點)
- $redeeminfo = $this->aSv->redeemTGood($lineId, $name);
- if (!$redeeminfo) {
- $this->sisLog['memoIn'] = json_encode(['error' => 'logical'], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['msg' => '銘謝惠顧'], JSON_UNESCAPED_UNICODE);
-
- return response()->json(["succ" => false, "err" => '銘謝惠顧']);
- }
- // 資料整理
- $this->sisLog['memoIn'] = json_encode(['lineId' => $lineId], JSON_UNESCAPED_UNICODE);
- $this->sisLog['memoOut'] = json_encode(['redeeminfo' => $redeeminfo], JSON_UNESCAPED_UNICODE);
- unset($redeeminfo['playerinfo']['lineId']);
- unset($redeeminfo['redeeminfo']['fromIssuedQty']);
- unset($redeeminfo['redeeminfo']['toIssuedQty']);
- unset($redeeminfo['session']);
- // 防重解鎖
- $redis::del($rkey);
-
- return response()->json(["succ" => true, "err" => '', 'info' => $redeeminfo]);
- }
-
- }
|