70 lines
2.3 KiB
PHP
70 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace app\controller\open;
|
|
|
|
use app\support\EnterpriseOpenApiAuthService;
|
|
use app\support\EnterpriseOrderService;
|
|
use support\Request;
|
|
|
|
class OrdersController
|
|
{
|
|
public function create(Request $request)
|
|
{
|
|
try {
|
|
$auth = (new EnterpriseOpenApiAuthService())->authenticate($request);
|
|
} catch (\Throwable $e) {
|
|
return api_error($e->getMessage(), 401);
|
|
}
|
|
|
|
$payload = json_decode($request->rawBody(), true);
|
|
if (!is_array($payload)) {
|
|
return api_error('请求体必须是合法 JSON 对象', 422);
|
|
}
|
|
|
|
try {
|
|
$result = (new EnterpriseOrderService())->createOrder($auth['customer'], $payload, $request);
|
|
} catch (\InvalidArgumentException $e) {
|
|
return api_error($e->getMessage(), 422);
|
|
} catch (\RuntimeException $e) {
|
|
return api_error($e->getMessage(), 409);
|
|
} catch (\Throwable $e) {
|
|
return api_error('订单创建失败', 500, [
|
|
'detail' => $e->getMessage(),
|
|
]);
|
|
}
|
|
|
|
return api_success($result, !empty($result['idempotent']) ? '订单已存在' : '订单已创建');
|
|
}
|
|
|
|
public function detail(Request $request)
|
|
{
|
|
try {
|
|
$auth = (new EnterpriseOpenApiAuthService())->authenticate($request);
|
|
} catch (\Throwable $e) {
|
|
return api_error($e->getMessage(), 401);
|
|
}
|
|
|
|
$externalOrderNo = trim((string)($request->route?->param('external_order_no', '') ?? ''));
|
|
if ($externalOrderNo === '') {
|
|
$externalOrderNo = trim((string)$request->input('external_order_no', ''));
|
|
}
|
|
$orderNo = trim((string)$request->input('order_no', ''));
|
|
|
|
try {
|
|
$order = (new EnterpriseOrderService())->findOrder($auth['customer'], $externalOrderNo, $orderNo);
|
|
} catch (\InvalidArgumentException $e) {
|
|
return api_error($e->getMessage(), 422);
|
|
} catch (\RuntimeException $e) {
|
|
return api_error($e->getMessage(), 404);
|
|
} catch (\Throwable $e) {
|
|
return api_error('订单查询失败', 500, [
|
|
'detail' => $e->getMessage(),
|
|
]);
|
|
}
|
|
|
|
return api_success([
|
|
'order' => $order,
|
|
]);
|
|
}
|
|
}
|