112 lines
3.3 KiB
PHP
112 lines
3.3 KiB
PHP
<?php
|
||
namespace Modules\Ecommerce\Http\Controllers;
|
||
|
||
use App\Http\Controllers\Controller;
|
||
use Illuminate\Http\Request;
|
||
use Modules\Ecommerce\Entities\Order;
|
||
use Modules\Ecommerce\Services\TaobaoService;
|
||
use Illuminate\Support\Facades\Validator;
|
||
|
||
class OrderController extends Controller
|
||
{
|
||
/**
|
||
* 获取本地订单列表
|
||
*/
|
||
public function index(Request $request)
|
||
{
|
||
$orders = Order::latest()->paginate(20);
|
||
return response()->json([
|
||
'code' => 200,
|
||
'message' => 'success',
|
||
'data' => $orders
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* 从淘宝同步订单
|
||
*/
|
||
public function syncFromTaobao(Request $request)
|
||
{
|
||
// 验证请求参数
|
||
$validator = Validator::make($request->all(), [
|
||
'start_time' => 'required|date',
|
||
'end_time' => 'required|date|after:start_time',
|
||
]);
|
||
|
||
if ($validator->fails()) {
|
||
return response()->json([
|
||
'code' => 422,
|
||
'message' => '参数错误',
|
||
'errors' => $validator->errors()
|
||
], 422);
|
||
}
|
||
|
||
// 从配置中获取淘宝凭证(也可以在.env中配置)
|
||
$appKey = config('services.taobao.app_key');
|
||
$appSecret = config('services.taobao.app_secret');
|
||
$accessToken = config('services.taobao.access_token');
|
||
|
||
if (!$appKey || !$appSecret || !$accessToken) {
|
||
return response()->json([
|
||
'code' => 500,
|
||
'message' => '淘宝API凭证未配置'
|
||
], 500);
|
||
}
|
||
|
||
try {
|
||
$service = new TaobaoService($appKey, $appSecret, $accessToken);
|
||
$response = $service->fetchOrders($request->start_time, $request->end_time);
|
||
|
||
// 解析淘宝返回的数据(根据实际返回结构调整)
|
||
$trades = $response['trades_sold_get_response']['trades']['trade'] ?? [];
|
||
|
||
$syncedCount = 0;
|
||
foreach ($trades as $trade) {
|
||
// 检查订单是否已存在,避免重复
|
||
$order = Order::updateOrCreate(
|
||
['platform_order_id' => $trade['tid']],
|
||
[
|
||
'platform' => 'taobao',
|
||
'total_amount' => $trade['payment'],
|
||
'status' => $trade['status'],
|
||
'raw_data' => $trade, // 保存原始数据
|
||
]
|
||
);
|
||
$syncedCount++;
|
||
}
|
||
|
||
return response()->json([
|
||
'code' => 200,
|
||
'message' => '同步完成',
|
||
'data' => [
|
||
'synced_count' => $syncedCount
|
||
]
|
||
]);
|
||
} catch (\Exception $e) {
|
||
return response()->json([
|
||
'code' => 500,
|
||
'message' => '同步失败:' . $e->getMessage()
|
||
], 500);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取单个订单详情
|
||
*/
|
||
public function show($id)
|
||
{
|
||
$order = Order::find($id);
|
||
if (!$order) {
|
||
return response()->json([
|
||
'code' => 404,
|
||
'message' => '订单不存在'
|
||
], 404);
|
||
}
|
||
|
||
return response()->json([
|
||
'code' => 200,
|
||
'message' => 'success',
|
||
'data' => $order
|
||
]);
|
||
}
|
||
} |