erp-backend/Modules/Ecommerce/Http/Controllers/OrderController.php
2026-04-01 17:07:04 +08:00

112 lines
3.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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
]);
}
}