373 lines
11 KiB
PHP
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);
|
|
}
|
|
}
|
|
} |