erp-backend/app/Http/Controllers/ShopAuthController.php
2026-04-01 17:07:04 +08:00

373 lines
11 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Requests\ShopAuthRequest;
use App\Models\ShopAuth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;
class ShopAuthController extends Controller
{
/**
* 店铺授权列表
*/
public function index(Request $request)
{
$query = ShopAuth::query()->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);
}
}
}