| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | <?phpnamespace App\Http\Middleware;use App\Consts\SysConsts;use Closure;class CheckSign{    /**     * Handle an incoming request.     * changeLog: 2022-07-13     * - 新版签名不使用device_info参与     * - 为了和已经上架的快应用保持兼容,现在,两种签名方法通过一种就可以认为是签名通过     *     * @param \Illuminate\Http\Request $request     * @param \Closure                 $next     * @return mixed     */    public function handle($request, Closure $next)    {        $key       = 'a!A&AFRWT65Nb3NlklezUiqHyQAA@Z8M';        \Log::info('[CheckSign]请求的request参数:', $request->all());        if($this->oldSignPass($request, $key) || $this->newSignPass($request, $key)) {            return $next($request);        } else {            return response()->error('QAPP_SIGN_ERROR');        }    }    private function oldSignPass($request, $key) {        $params    = $request->except(['_url']);        $timestamp = $request->post('timestamp', 0);        $sign      = $request->post('sign', '');        $backendSign = _sign($params, $key);//         \Log::info('[CheckSign]旧版校验sign:', [//             'front_sign' => $sign,//             'backend_sign' => $backendSign,//             'device_no' => $request->input('device_no', ''),//             'X-Version' => $request->header('X-Version', ''),//             'package' => $request->input('package', ''),//         ]);        if ($timestamp && time() - $timestamp <= (SysConsts::ONE_HOUR_SECONDS * 10) && $sign == $backendSign) {//             \Log::info('[CheckSign]旧版校验通过');            return true;        } else {//             \Log::info('[CheckSign]旧版校验没有通过');            return false;        }    }    private function newSignPass($request, $key) {        $params = $request->except(['_url', 'device_info']);        $timestamp = $request->post('timestamp', 0);        $sign      = $request->post('sign', '');        $backendSign = _sign($params, $key);//         \Log::info('[CheckSign]新版校验sign:', [//             'front_sign' => $sign,//             'backend_sign' => $backendSign,//             'device_no' => $request->input('device_no', ''),//             'X-Version' => $request->header('X-Version', ''),//             'package' => $request->input('package', ''),//         ]);        if ($timestamp && time() - $timestamp <= (SysConsts::ONE_HOUR_SECONDS * 10) && $sign == $backendSign) {//             \Log::info('[CheckSign]新版校验通过');            return true;        } else {//             \Log::info('[CheckSign]新版校验没有通过');            return false;        }    }}
 |