orderBy('created_at', 'desc'); // 筛选条件 if ($request->filled('platform')) { $query->where('platform', $request->platform); } if ($request->filled('shop_name')) { $query->where('shop_name', 'like', "%{$request->shop_name}%"); } if ($request->filled('status')) { $query->where('status', $request->status); } $perPage = $request->input('limit', 10); $shops = $query->paginate($perPage); return response()->json([ 'code' => 200, 'data' => [ 'list' => $shops->items(), 'total' => $shops->total(), 'current_page' => $shops->currentPage(), 'last_page' => $shops->lastPage(), ], 'message' => 'success' ]); } /** * 店铺授权详情 */ public function show(string $id) { $shop = ShopAuth::find($id); if (!$shop) { return response()->json([ 'code' => 404, 'message' => '店铺不存在' ], 404); } return response()->json([ 'code' => 200, 'data' => $shop, 'message' => 'success' ]); } /** * 创建店铺授权 */ public function store(ShopAuthRequest $request) { try { DB::beginTransaction(); $shop = ShopAuth::create([ 'platform' => $request->platform, 'shop_name' => $request->shop_name, 'app_key' => $request->app_key, 'app_secret' => $request->app_secret, 'session_key' => $request->session_key, 'access_token' => $request->access_token, 'refresh_token' => $request->refresh_token, 'expires_at' => $request->expires_at, 'status' => 'active', 'remark' => $request->remark, ]); DB::commit(); return response()->json([ 'code' => 200, 'data' => $shop, 'message' => '店铺授权创建成功' ]); } catch (\Exception $e) { DB::rollBack(); return response()->json([ 'code' => 500, 'message' => '创建失败: ' . $e->getMessage() ], 500); } } /** * 更新店铺授权 */ public function update(ShopAuthRequest $request, string $id) { $shop = ShopAuth::find($id); if (!$shop) { return response()->json([ 'code' => 404, 'message' => '店铺不存在' ], 404); } try { DB::beginTransaction(); $shop->update([ 'shop_name' => $request->shop_name ?? $shop->shop_name, 'app_key' => $request->app_key ?? $shop->app_key, 'app_secret' => $request->app_secret ?? $shop->app_secret, 'session_key' => $request->session_key ?? $shop->session_key, 'access_token' => $request->access_token ?? $shop->access_token, 'refresh_token' => $request->refresh_token ?? $shop->refresh_token, 'expires_at' => $request->expires_at ?? $shop->expires_at, 'remark' => $request->remark ?? $shop->remark, ]); DB::commit(); return response()->json([ 'code' => 200, 'data' => $shop, 'message' => '店铺授权更新成功' ]); } catch (\Exception $e) { DB::rollBack(); return response()->json([ 'code' => 500, 'message' => '更新失败: ' . $e->getMessage() ], 500); } } /** * 删除店铺授权 */ public function destroy(string $id) { $shop = ShopAuth::find($id); if (!$shop) { return response()->json([ 'code' => 404, 'message' => '店铺不存在' ], 404); } try { $shop->delete(); return response()->json([ 'code' => 200, 'message' => '店铺授权删除成功' ]); } catch (\Exception $e) { return response()->json([ 'code' => 500, 'message' => '删除失败: ' . $e->getMessage() ], 500); } } /** * 刷新Token */ public function refreshToken(string $id) { $shop = ShopAuth::find($id); if (!$shop) { return response()->json([ 'code' => 404, 'message' => '店铺不存在' ], 404); } // TODO: 根据平台调用不同的API刷新Token // 这里模拟刷新过程 try { DB::beginTransaction(); $newToken = 'NEW_' . Str::random(32); $newRefreshToken = 'NEW_REFRESH_' . Str::random(32); $shop->update([ 'access_token' => $newToken, 'refresh_token' => $newRefreshToken, 'expires_at' => now()->addDays(30), ]); DB::commit(); return response()->json([ 'code' => 200, 'data' => [ 'access_token' => $newToken, 'refresh_token' => $newRefreshToken, 'expires_at' => $shop->expires_at, ], 'message' => 'Token刷新成功' ]); } catch (\Exception $e) { DB::rollBack(); return response()->json([ 'code' => 500, 'message' => '刷新失败: ' . $e->getMessage() ], 500); } } /** * 测试连接 */ public function testConnection(string $id) { $shop = ShopAuth::find($id); if (!$shop) { return response()->json([ 'code' => 404, 'message' => '店铺不存在' ], 404); } // TODO: 根据平台调用不同的API测试连接 // 这里模拟测试过程 try { // 模拟API调用 $response = Http::timeout(10) ->withHeaders([ 'Authorization' => 'Bearer ' . $shop->access_token, ]) ->get('https://api.example.com/test'); if ($response->successful()) { return response()->json([ 'code' => 200, 'data' => [ 'connected' => true, 'response_time' => rand(100, 500) . 'ms', 'platform_status' => 'online', ], 'message' => '连接测试成功' ]); } else { return response()->json([ 'code' => 400, 'data' => [ 'connected' => false, 'error' => 'API返回错误', 'status_code' => $response->status(), ], 'message' => '连接测试失败' ]); } } catch (\Exception $e) { return response()->json([ 'code' => 500, 'data' => [ 'connected' => false, 'error' => $e->getMessage(), ], 'message' => '连接测试异常' ], 500); } } /** * 获取平台列表 */ public function getPlatforms() { $platforms = [ ['value' => 'taobao', 'label' => '淘宝', 'icon' => 'taobao'], ['value' => 'tmall', 'label' => '天猫', 'icon' => 'tmall'], ['value' => 'jd', 'label' => '京东', 'icon' => 'jd'], ['value' => 'pdd', 'label' => '拼多多', 'icon' => 'pdd'], ['value' => 'douyin', 'label' => '抖音', 'icon' => 'douyin'], ['value' => 'kuaishou', 'label' => '快手', 'icon' => 'kuaishou'], ['value' => 'weidian', 'label' => '微店', 'icon' => 'weidian'], ['value' => 'youzan', 'label' => '有赞', 'icon' => 'youzan'], ]; return response()->json([ 'code' => 200, 'data' => $platforms, 'message' => 'success' ]); } /** * 批量操作 */ public function batchOperation(Request $request) { $request->validate([ 'shop_ids' => 'required|array|min:1', 'shop_ids.*' => 'integer|exists:shop_auths,id', 'action' => 'required|in:enable,disable,refresh_token,test_connection', ]); $successCount = 0; $failedShops = []; try { DB::beginTransaction(); foreach ($request->shop_ids as $shopId) { $shop = ShopAuth::find($shopId); if (!$shop) { $failedShops[] = ['id' => $shopId, 'reason' => '店铺不存在']; continue; } switch ($request->action) { case 'enable': $shop->update(['status' => 'active']); break; case 'disable': $shop->update(['status' => 'inactive']); break; case 'refresh_token': // 模拟刷新Token $shop->update([ 'access_token' => 'REFRESHED_' . Str::random(32), 'expires_at' => now()->addDays(30), ]); break; case 'test_connection': // 这里只是标记,实际测试在单独的方法中 break; } $successCount++; } DB::commit(); return response()->json([ 'code' => 200, 'data' => [ 'success_count' => $successCount, 'failed_shops' => $failedShops, ], 'message' => "批量操作成功,成功 {$successCount} 个" ]); } catch (\Exception $e) { DB::rollBack(); return response()->json([ 'code' => 500, 'message' => '批量操作失败: ' . $e->getMessage() ], 500); } } }