header('AppId'); $timestamp = $request->header('Timestamp'); $nonce = $request->header('Nonce'); $signature = $request->header('Signature'); // 验证必要参数 if (empty($appId) || empty($timestamp) || empty($nonce) || empty($signature)) { return JsonService::fail('缺少必要的认证参数', [], 401); } // // 验证时间戳(防重放攻击,5分钟内有效) if (abs(time() - $timestamp) > 300) { return JsonService::fail('请求时间戳无效', [], 401); } // 验证应用信息 $appInfo = OpenApiService::getAppInfo($appId); if (empty($appInfo)) { return JsonService::fail('无效的应用ID', [], 401); } if ($appInfo['status'] != 1) { return JsonService::fail('应用已被禁用', [], 401); } // 验证签名 $params = $request->param(); outFileLog($params,'sign','$params'); outFileLog($appInfo['app_secret'],'sign','app_secret'); outFileLog($timestamp,'sign','$timestamp'); outFileLog($nonce,'sign','$nonce'); if (!OpenApiService::verifySignature($params, $appInfo['app_secret'], $timestamp, $nonce, $signature)) { return JsonService::fail('签名验证失败', [], 401); } // // 验证随机数(防重复攻击) if (!OpenApiService::verifyNonce($appId, $nonce, $timestamp)) { return JsonService::fail('重复的请求', [], 401); } // 将应用信息传递给控制器 $request->appInfo = $appInfo; return $next($request); } }