From d563199dafa2ecf45343cc587601f9134f7af77b Mon Sep 17 00:00:00 2001 From: xuanchen <122383162@qq.com> Date: Sun, 25 Apr 2021 10:31:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/TestController.php | 260 --------------------- app/Http/Controllers/ToolsController.php | 283 +++++++++++++++++++++++ routes/web.php | 22 +- 3 files changed, 300 insertions(+), 265 deletions(-) create mode 100644 app/Http/Controllers/ToolsController.php diff --git a/app/Http/Controllers/TestController.php b/app/Http/Controllers/TestController.php index 3236cb1..e44e0ed 100644 --- a/app/Http/Controllers/TestController.php +++ b/app/Http/Controllers/TestController.php @@ -2,273 +2,13 @@ namespace App\Http\Controllers; -use App\Api\Controllers\ApiResponse; -use App\Models\User; -use GuzzleHttp\Client; use Illuminate\Http\Request; -use XuanChen\Coupon\Coupon; class TestController { - use ApiResponse; - - public $baseUrl; - - public function __construct() - { - $this->baseUrl = env('BASE_URL'); - } - public function index(Request $request) { - $this->user = User::find(6); - $ret = [ - 'redemptionCode' => 'YSD201029312435', - 'outletId' => '2008030929274', - ]; - - $ret = [ - 'mobile' => '15663876870', - 'orderid' => '202008105236478', - 'activityId' => 'ysd202010272', - 'outletId' => '2008241014458', - - ]; - - return $this->success($ret); - - } - - /** - * Notes: 发券 - * @Author: 玄尘 - * @Date : 2020/6/29 13:57 - * @param \Illuminate\Http\Request $request - * @return mixed - */ - public function grant(Request $request) - { - $outletId = $request->outletId; - $outlet = User::where('outlet_id', $outletId)->first(); - $this->user = $outlet->parent; - - $data = $this->jiami($request->all()); - - $url = $this->baseUrl . 'user/grant'; - $res = $this->http($data, $url); - - return $res; - - // dump($this->getElapsedTime()); - // dump($this->getMemoryUsage()); - // - // dd($res); - } - - //查询 - public function query(Request $request) - { - $outletId = $request->outletId; - $redemptionCode = $request->redemptionCode; - - $outlet = User::where('outlet_id', $outletId)->first(); - $this->user = $outlet->parent; - - $data = $this->jiami($request->all()); - - $url = $this->baseUrl . 'user/query'; - $res = $this->http($data, $url); - - return $res; - if (isset($res['data'])) { - $jiemi = $this->jiemi($res['data']); - dump($jiemi); - } - - dump($this->getElapsedTime()); - dump($this->getMemoryUsage()); - - dump($res); - - } - - //卡券作废 - public function destroy(Request $request) - { - $outletId = $request->outletId; - - $outlet = User::where('outlet_id', $outletId)->first(); - $this->user = $outlet->parent; - - $redemptionCode = $request->redemptionCode; - $data = $this->jiami($request->all()); - - $url = $this->baseUrl . 'user/destroy'; - $res = $this->http($data, $url); - - dump($this->getElapsedTime()); - dump($this->getMemoryUsage()); - if (isset($res['data'])) { - $jiemi = $this->jiemi($res['data']); - dump($jiemi); - } - dump($res); - - } - - /** - * Notes: 核销 - * @Author: 玄尘 - * @Date : 2020/6/29 14:01 - */ - public function checkcoupon(Request $request) - { - $outletId = $request->outletId; - - $outlet = User::where('outlet_id', $outletId)->first(); - $this->user = $outlet->parent; - - $data = $this->jiami([ - 'redemptionCode' => $request->redemptionCode, - 'total' => $request->total, - 'outletId' => $request->outletId, - 'orderid' => $request->orderid, - 'from' => $request->from, - ]); - - $url = $this->baseUrl . 'user/freezecoupon'; - $res = $this->http($data, $url); - - return $res; - - $redemptionCode = $request->redemptionCode; - $total = $request->total; - $outletId = $request->outletId; - $orderid = $request->orderid ?? ''; - $from = $request->from ?? ''; - - $res = Coupon::Redemption( - $this->user, - $redemptionCode, - $total, - $outletId, - $orderid, - $from - ); - - if (is_string($res)) { - return $this->error($res); - } - - return $this->success('核销成功'); - } - - public function http($data, $url) - { - $client = new Client(); - $response = $client->request('POST', $url, - [ - 'form_params' => $data, - 'http_errors' => false, - ]); - - $body = $response->getBody(); - $content = $body->getContents(); - $result = json_decode($content, true); - - return $result; - } - - public function jiami($ret) - { - $jsonData = json_encode($ret); //数据JSON化 - $ascdata = $this->keyasc($jsonData); //加密 - $addcode = sprintf("%08d", mt_rand(0, 99999999)); //随机code 验证签名用 - $sign = $this->keysign($ascdata, $addcode); - - $data = [ - 'server_id' => $this->user->server_id, - 'key' => $this->user->server_key, - 'addcode' => $addcode, - 'sign' => $sign, - 'data' => $ascdata, - ]; - - return $data; - } - - /** - * 解密 - * @param $value - * @return - */ - public function jiemi($value) - { - $iv = substr($this->user->des3key, 0, 8); - $ret = openssl_decrypt($value, 'DES - EDE3 - CBC', $this->user->des3key, 0, $iv); - if (false === $ret) { - return openssl_error_string(); - } - - return $ret; - } - - public function getMemoryUsage($precision = 2) - { - $size = memory_get_usage(true); - - $unit = ['b', 'kb', 'mb', 'gb', 'tb', 'pb']; - - return round($size / pow(1024, ($i = floor(log($size, 1024)))), $precision) . ' ' . $unit[$i]; - } - - public function getElapsedTime(int $decimals = 2) - { - return number_format(microtime(true) - request()->server('REQUEST_TIME_FLOAT'), $decimals) . ' s'; - } - - /** - * Notes: 测试签名 - * @Author: 玄尘 - * @Date : 2020/12/30 11:47 - * @param \Illuminate\Http\Request $request - */ - public function getSign(Request $request) - { - - // $data = 'SMyBpCxqBnxAGr/Fk9LOB851Glkgc3ruZnu1Y0ft/R+Ng26ooLXok1Oi1SrwhSJaQ9U75zy3tI7fq3YfTLQxITwUmt4jBiShpeK1whMaYrI='; - // $addcode = '1234567812345678'; - // - // return [ - // 'sign' => $this->keysign($data, $addcode), - // 'server_id' => $this->user->server_id, - // 'server_key' => $this->user->server_key, - // 'data' => $data, - // 'addcode' => $addcode, - // ]; - - $server_id = $request->server_id; - $redemptionCode = $request->redemptionCode; - $total = $request->total; - $outletId = $request->outletId; - - $this->user = User::whereNull('parent_id') - ->where('server_id', $server_id) - ->first(); - if (!$this->user) { - return $this->error('未查到到渠道'); - } - $ret = [ - 'redemptionCode' => $redemptionCode, - 'total' => $total, - 'outletId' => $outletId, - ]; - - return json_encode($ret); - info(json_encode($ret)); - - return $this->success($ret); } diff --git a/app/Http/Controllers/ToolsController.php b/app/Http/Controllers/ToolsController.php new file mode 100644 index 0000000..b8d44e5 --- /dev/null +++ b/app/Http/Controllers/ToolsController.php @@ -0,0 +1,283 @@ +baseUrl = env('BASE_URL'); + } + + /** + * Notes: 发券 + * @Author: 玄尘 + * @Date : 2020/6/29 13:57 + * @param \Illuminate\Http\Request $request + * @return mixed + */ + public function grant(Request $request) + { + $validator = Validator::make($request->all(), [ + 'outletId' => 'required', + 'activityId' => 'required', + 'mobile' => 'required', + ], [ + 'outletId.required' => '缺少网点编号', + 'activityId.required' => '缺少活动编号', + 'mobile.required' => '缺少手机号', + ]); + + if ($validator->fails()) { + return $this->error($validator->errors()->first()); + } + + $outlet = User::where('outlet_id', $request->outletId)->first(); + $this->user = $outlet->parent; + + $input_data = [ + 'outletId' => $request->outletId, + 'activityId' => $request->activityId, + 'mobile' => $request->mobile, + ]; + $url = $this->baseUrl . 'user/grant'; + + return $this->getResult($input_data, $url); + + } + + /** + * Notes: 查询 + * @Author: 玄尘 + * @Date : 2021/4/25 9:57 + * @param \Illuminate\Http\Request $request + * @return mixed + */ + public function query(Request $request) + { + $validator = Validator::make($request->all(), [ + 'outletId' => 'required', + 'redemptionCode' => 'required', + ], [ + 'outletId.required' => '缺少网点编号', + 'redemptionCode.required' => '缺少券码', + ]); + + if ($validator->fails()) { + return $this->error($validator->errors()->first()); + } + + $outlet = User::where('outlet_id', $request->outletId)->first(); + $this->user = $outlet->parent; + + $input_data = [ + 'outletId' => $request->outletId, + 'redemptionCode' => $request->redemptionCode, + ]; + + $url = $this->baseUrl . 'user/query'; + + return $this->getResult($input_data, $url); + + } + + /** + * Notes: 卡券作废 + * @Author: 玄尘 + * @Date : 2021/4/25 10:08 + * @param \Illuminate\Http\Request $request + */ + public function destroy(Request $request) + { + $validator = Validator::make($request->all(), [ + 'outletId' => 'required', + 'redemptionCode' => 'required', + ], [ + 'outletId.required' => '缺少网点编号', + 'redemptionCode.required' => '缺少券码', + ]); + + if ($validator->fails()) { + return $this->error($validator->errors()->first()); + } + + $outlet = User::where('outlet_id', $request->outletId)->first(); + $this->user = $outlet->parent; + + $input_data = [ + 'outletId' => $request->outletId, + 'redemptionCode' => $request->redemptionCode, + ]; + + $url = $this->baseUrl . 'user/destroy'; + + return $this->getResult($input_data, $url); + } + + /** + * Notes: 核销 + * @Author: 玄尘 + * @Date : 2020/6/29 14:01 + */ + public function verify(Request $request) + { + $validator = Validator::make($request->all(), [ + 'redemptionCode' => 'required', + 'total' => 'required', + 'outletId' => 'required', + // 'orderid' => 'required', + // 'from' => 'required', + ], [ + 'redemptionCode.required' => '缺少券码', + 'total.required' => '缺少订单金额', + 'outletId.required' => '缺少网点id', + 'orderid.required' => '缺少订单id', + 'from.required' => '缺少来源', + ]); + + if ($validator->fails()) { + return $this->error($validator->errors()->first()); + } + + $outlet = User::where('outlet_id', $request->outletId)->first(); + $this->user = $outlet->parent; + + $input_data = [ + 'outletId' => $request->outletId, + 'redemptionCode' => $request->redemptionCode, + 'total' => $request->total, + 'orderid' => $request->orderid ?? '', + 'from' => $request->from ?? '', + ]; + + $url = $this->baseUrl . 'user/freezecoupon'; + + return $this->getResult($input_data, $url); + + } + + /** + * Notes: 总执行 + * @Author: 玄尘 + * @Date : 2021/4/25 10:00 + * @param $data + * @param $url + * @return array + */ + public function getResult($data, $url): array + { + $data = $this->encrypt($data); + + $res = $this->http($data, $url); + + $response = [ + 'getElapsedTime' => $this->getElapsedTime(), + 'getMemoryUsage' => $this->getMemoryUsage(), + 'ret' => $res, + 'raw_data' => $this->decode($res), + ]; + + return $response; + } + + public function http($data, $url) + { + $client = new Client(); + $response = $client->request('POST', $url, + [ + 'form_params' => $data, + 'http_errors' => false, + ]); + + $body = $response->getBody(); + $content = $body->getContents(); + $result = json_decode($content, true); + + return $result; + } + + /** + * Notes: 加密 + * @Author: 玄尘 + * @Date : 2021/4/25 9:46 + * @param $input + * @return array + */ + public function encrypt($input): array + { + $jsonData = json_encode($input); //数据JSON化 + $ascdata = $this->keyasc($jsonData); //加密 + $addcode = sprintf("%08d", mt_rand(0, 99999999)); //随机code 验证签名用 + $sign = $this->keysign($ascdata, $addcode); + + $data = [ + 'server_id' => $this->user->server_id, + 'key' => $this->user->server_key, + 'addcode' => $addcode, + 'sign' => $sign, + 'data' => $ascdata, + ]; + + return $data; + } + + /** + * Notes: 解密 + * @Author: 玄尘 + * @Date : 2021/4/25 10:07 + * @param $res + * @return mixed + */ + public function decode($res) + { + if (isset($res['data'])) { + $res = $this->keydesc($res['data']); + + return json_decode($res); + } + + return ''; + + } + + /*** + * Notes: 使用的内存 + * @Author: 玄尘 + * @Date : 2021/4/25 9:45 + * @param int $precision + * @return string + */ + public function getMemoryUsage($precision = 2): string + { + $size = memory_get_usage(true); + + $unit = ['b', 'kb', 'mb', 'gb', 'tb', 'pb']; + + return round($size / pow(1024, ($i = floor(log($size, 1024)))), $precision) . ' ' . $unit[$i]; + } + + /** + * Notes: 代码执行时间 + * @Author: 玄尘 + * @Date : 2021/4/25 9:45 + * @param int $decimals + * @return string + */ + public function getElapsedTime(int $decimals = 2): string + { + return number_format(microtime(true) - request()->server('REQUEST_TIME_FLOAT'), $decimals) . ' s'; + } + +} \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index bd1b3ba..2303cdb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -4,14 +4,26 @@ use App\Http\Controllers\CouponController; use App\Http\Controllers\SkyxuController; use App\Http\Controllers\TestController; use App\Http\Controllers\IndexController; +use App\Http\Controllers\ToolsController; +use Illuminate\Routing\Router; +use Illuminate\Support\Facades\Route; Route::get('/', [IndexController::class, 'index'])->name('index'); Route::get('/test', [TestController::class, 'index'])->name('test'); -Route::get('/test/grant', [TestController::class, 'grant'])->name('test.grant'); -Route::get('/test/checkcoupon', [TestController::class, 'checkcoupon'])->name('test.checkcoupon'); -Route::get('/test/query', [TestController::class, 'query'])->name('test.query'); -Route::get('/test/destroy', [TestController::class, 'destroy'])->name('test.destroy'); -Route::get('/test/getsign', [TestController::class, 'getSign'])->name('test.getsign'); Route::get('/skyxu', [SkyxuController::class, 'index'])->name('skyxu'); Route::get('/coupon', [CouponController::class, 'index'])->name('coupon'); + +Route::group([ + 'prefix' => 'tools', +], function (Router $router) { + /** + * 小工具 + */ + $router->get('grant', [ToolsController::class, 'grant'])->name('tools.grant'); + $router->get('verify', [ToolsController::class, 'verify'])->name('tools.verify'); + $router->get('query', [ToolsController::class, 'query'])->name('tools.query'); + $router->get('destroy', [ToolsController::class, 'destroy'])->name('tools.destroy'); + $router->get('getsign', [ToolsController::class, 'getSign'])->name('tools.getsign'); +}); +