POST /api/payments
{
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : 100.0,
"currency" : "USD"
}
{
"id" : "pay_41238087a19a",
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : 100.0,
"currency" : "USD",
"status" : "COMPLETED",
"createdAt" : "2026-05-13T07:36:48.523964Z",
"updatedAt" : "2026-05-13T07:36:48.523964Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
id | non-null | pay_41238087a19a | ✅ |
merchantId | merchant-001 | merchant-001 | ✅ |
customerId | customer-abc | customer-abc | ✅ |
amount | 100.0 | 100.0 | ✅ |
currency | USD | USD | ✅ |
status | COMPLETED | COMPLETED | ✅ |
createdAt | non-null | 2026-05-13T07:36:48.523964Z | ✅ |
updatedAt | non-null | 2026-05-13T07:36:48.523964Z | ✅ |
POST /api/payments
{
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : 128.5,
"currency" : "CNY",
"description" : "Order #ORD-20260430-001"
}
{
"id" : "pay_84dca0a4e8cb",
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : 128.5,
"currency" : "CNY",
"status" : "COMPLETED",
"description" : "Order #ORD-20260430-001",
"createdAt" : "2026-05-13T07:36:48.567792Z",
"updatedAt" : "2026-05-13T07:36:48.567792Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
id | non-null | pay_84dca0a4e8cb | ✅ |
merchantId | merchant-001 | merchant-001 | ✅ |
customerId | customer-abc | customer-abc | ✅ |
amount | 128.5 | 128.5 | ✅ |
currency | CNY | CNY | ✅ |
status | COMPLETED | COMPLETED | ✅ |
description | Order #ORD-20260430-001 | Order #ORD-20260430-001 | ✅ |
createdAt | non-null | 2026-05-13T07:36:48.567792Z | ✅ |
updatedAt | non-null | 2026-05-13T07:36:48.567792Z | ✅ |
POST /api/payments
{
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : 0.01,
"currency" : "USD"
}
{
"id" : "pay_790dd7840287",
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : 0.01,
"currency" : "USD",
"status" : "COMPLETED",
"createdAt" : "2026-05-13T07:36:48.571750Z",
"updatedAt" : "2026-05-13T07:36:48.571750Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
id | non-null | pay_790dd7840287 | ✅ |
amount | 0.01 | 0.01 | ✅ |
status | COMPLETED | COMPLETED | ✅ |
createdAt | non-null | 2026-05-13T07:36:48.571750Z | ✅ |
updatedAt | non-null | 2026-05-13T07:36:48.571750Z | ✅ |
POST /api/payments
{
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : 999999.99,
"currency" : "USD"
}
{
"id" : "pay_9da816a1bf49",
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : 999999.99,
"currency" : "USD",
"status" : "COMPLETED",
"createdAt" : "2026-05-13T07:36:48.575328Z",
"updatedAt" : "2026-05-13T07:36:48.575328Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
id | non-null | pay_9da816a1bf49 | ✅ |
amount | 999999.99 | 999999.99 | ✅ |
status | COMPLETED | COMPLETED | ✅ |
createdAt | non-null | 2026-05-13T07:36:48.575328Z | ✅ |
updatedAt | non-null | 2026-05-13T07:36:48.575328Z | ✅ |
POST /api/payments
{
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : 0.0,
"currency" : "USD"
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "amount",
"message" : "必须大于或等于0.01"
} ],
"timestamp" : "2026-05-13T07:36:48.652910Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
status | 400 | 400 | ✅ |
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
POST /api/payments
{
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : 1000000.0,
"currency" : "USD"
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "amount",
"message" : "数字的值超出了允许范围(只允许在6位整数和2位小数范围内)"
}, {
"field" : "amount",
"message" : "必须小于或等于999999.99"
} ],
"timestamp" : "2026-05-13T07:36:48.665478Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
status | 400 | 400 | ✅ |
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
POST /api/payments
{
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : 100.0,
"currency" : "us"
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "currency",
"message" : "must be a 3-letter ISO 4217 currency code"
} ],
"timestamp" : "2026-05-13T07:36:48.670388Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
status | 400 | 400 | ✅ |
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
POST /api/payments
{
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"currency" : "USD"
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "amount",
"message" : "不能为null"
} ],
"timestamp" : "2026-05-13T07:36:48.675827Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
status | 400 | 400 | ✅ |
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
POST /api/payments
{
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : 100.0
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "currency",
"message" : "不能为空"
} ],
"timestamp" : "2026-05-13T07:36:48.681590Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
status | 400 | 400 | ✅ |
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
POST /api/payments
{
"customerId" : "customer-abc",
"amount" : 100.0,
"currency" : "USD"
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "merchantId",
"message" : "不能为空"
} ],
"timestamp" : "2026-05-13T07:36:48.686895Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
status | 400 | 400 | ✅ |
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
POST /api/payments
{
"merchantId" : "merchant-001",
"amount" : 100.0,
"currency" : "USD"
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "customerId",
"message" : "不能为空"
} ],
"timestamp" : "2026-05-13T07:36:48.692034Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
status | 400 | 400 | ✅ |
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
POST /api/payments
{
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : "one-hundred",
"currency" : "USD"
}
{
"timestamp" : "2026-05-13T07:36:48.714+00:00",
"status" : 400,
"error" : "Bad Request",
"path" : "/api/payments"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
status | 400 | 400 | ✅ |
code | VALIDATION_ERROR | null | ❌ |
POST /api/payments
{
"merchantId" : "m123456789012345678901234567890123456789012345678901234567890abcde",
"customerId" : "customer-abc",
"amount" : 100.0,
"currency" : "USD"
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "merchantId",
"message" : "个数必须在0和64之间"
} ],
"timestamp" : "2026-05-13T07:36:48.724575Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
status | 400 | 400 | ✅ |
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
POST /api/payments
{
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : 100.0,
"currency" : "USD",
"description" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "description",
"message" : "个数必须在0和255之间"
} ],
"timestamp" : "2026-05-13T07:36:48.730698Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
id | non-null | null | ❌ |
status | COMPLETED | 400 | ❌ |
createdAt | non-null | null | ❌ |
updatedAt | non-null | null | ❌ |
POST /api/payments
{
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : -50.0,
"currency" : "USD"
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "amount",
"message" : "必须大于或等于0.01"
} ],
"timestamp" : "2026-05-13T07:36:48.736350Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
status | 400 | 400 | ✅ |
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
POST /api/payments
{
"merchantId" : "merchant-001",
"customerId" : "customer-abc",
"amount" : 100.0,
"currency" : "840"
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "currency",
"message" : "must be a 3-letter ISO 4217 currency code"
} ],
"timestamp" : "2026-05-13T07:36:48.740878Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
status | 400 | 400 | ✅ |
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
POST /api/payments
{ }
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "amount",
"message" : "不能为null"
}, {
"field" : "currency",
"message" : "不能为空"
}, {
"field" : "customerId",
"message" : "不能为空"
}, {
"field" : "merchantId",
"message" : "不能为空"
} ],
"timestamp" : "2026-05-13T07:36:48.745979Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
status | 400 | 400 | ✅ |
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
GET /api/payments/pay_5e57c904619b
{
"id" : "pay_5e57c904619b",
"merchantId" : "setup-merchant",
"customerId" : "setup-customer",
"amount" : 100.0,
"currency" : "USD",
"status" : "COMPLETED",
"createdAt" : "2026-05-13T07:36:48.751690Z",
"updatedAt" : "2026-05-13T07:36:48.751690Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
createdAt | non-null | 2026-05-13T07:36:48.751690Z | ✅ |
amount | non-null | 100.0 | ✅ |
merchantId | non-null | setup-merchant | ✅ |
customerId | non-null | setup-customer | ✅ |
currency | non-null | USD | ✅ |
id | non-null | pay_5e57c904619b | ✅ |
status | COMPLETED | COMPLETED | ✅ |
updatedAt | non-null | 2026-05-13T07:36:48.751690Z | ✅ |
GET /api/payments/non-existent-id
{
"status" : 404,
"code" : "PAYMENT_NOT_FOUND",
"message" : "Payment not found: non-existent-id",
"timestamp" : "2026-05-13T07:36:48.762403Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
timestamp | non-null | 2026-05-13T07:36:48.762403Z | ✅ |
GET /api/payments/pay_30adbb18bfba
{
"id" : "pay_30adbb18bfba",
"merchantId" : "setup-merchant",
"customerId" : "setup-customer",
"amount" : 100.0,
"currency" : "USD",
"status" : "COMPLETED",
"createdAt" : "2026-05-13T07:36:48.766558Z",
"updatedAt" : "2026-05-13T07:36:48.766558Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
createdAt | non-null | 2026-05-13T07:36:48.766558Z | ✅ |
amount | non-null | 100.0 | ✅ |
merchantId | non-null | setup-merchant | ✅ |
customerId | non-null | setup-customer | ✅ |
description | non-null | null | ❌ |
currency | non-null | USD | ✅ |
id | non-null | pay_30adbb18bfba | ✅ |
status | COMPLETED | COMPLETED | ✅ |
updatedAt | non-null | 2026-05-13T07:36:48.766558Z | ✅ |
GET /api/payments/does-not-exist
{
"status" : 404,
"code" : "PAYMENT_NOT_FOUND",
"message" : "Payment not found: does-not-exist",
"timestamp" : "2026-05-13T07:36:48.772201Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
timestamp | non-null | 2026-05-13T07:36:48.772201Z | ✅ |
GET /api/payments/pay_9ed6913def1c
{
"id" : "pay_9ed6913def1c",
"merchantId" : "setup-merchant",
"customerId" : "setup-customer",
"amount" : 100.0,
"currency" : "USD",
"status" : "COMPLETED",
"createdAt" : "2026-05-13T07:36:48.775674Z",
"updatedAt" : "2026-05-13T07:36:48.775674Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
createdAt | non-null | 2026-05-13T07:36:48.775674Z | ✅ |
id | non-null | pay_9ed6913def1c | ✅ |
status | COMPLETED | COMPLETED | ✅ |
updatedAt | non-null | 2026-05-13T07:36:48.775674Z | ✅ |
POST /api/payments/pay_f8ba911e19b3/refund
{
"reason" : "Customer requested cancellation"
}
{
"id" : "pay_f8ba911e19b3",
"merchantId" : "setup-merchant",
"customerId" : "setup-customer",
"amount" : 100.0,
"currency" : "USD",
"status" : "REFUNDED",
"refundReason" : "Customer requested cancellation",
"createdAt" : "2026-05-13T07:36:48.782441Z",
"updatedAt" : "2026-05-13T07:36:48.790935Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
createdAt | non-null | 2026-05-13T07:36:48.782441Z | ✅ |
refundReason | Customer requested cancellation | Customer requested cancellation | ✅ |
id | non-null | pay_f8ba911e19b3 | ✅ |
status | REFUNDED | REFUNDED | ✅ |
updatedAt | non-null | 2026-05-13T07:36:48.790935Z | ✅ |
POST /api/payments/pay_38c00e902331/refund
{
"reason" : "Partial cancellation requested",
"amount" : 10.0
}
{
"id" : "pay_38c00e902331",
"merchantId" : "setup-merchant",
"customerId" : "setup-customer",
"amount" : 100.0,
"currency" : "USD",
"status" : "PARTIALLY_REFUNDED",
"refundReason" : "Partial cancellation requested",
"createdAt" : "2026-05-13T07:36:48.794695Z",
"updatedAt" : "2026-05-13T07:36:48.798610Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
createdAt | non-null | 2026-05-13T07:36:48.794695Z | ✅ |
refundReason | Partial cancellation requested | Partial cancellation requested | ✅ |
id | non-null | pay_38c00e902331 | ✅ |
status | PARTIALLY_REFUNDED | PARTIALLY_REFUNDED | ✅ |
updatedAt | non-null | 2026-05-13T07:36:48.798610Z | ✅ |
POST /api/payments/pay_0fbb9157f12e/refund
{
"reason" : "Attempting duplicate refund"
}
{
"id" : "pay_0fbb9157f12e",
"merchantId" : "setup-merchant",
"customerId" : "setup-customer",
"amount" : 100.0,
"currency" : "USD",
"status" : "REFUNDED",
"refundReason" : "Attempting duplicate refund",
"createdAt" : "2026-05-13T07:36:48.802123Z",
"updatedAt" : "2026-05-13T07:36:48.805491Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
code | non-null | null | ❌ |
message | non-null | null | ❌ |
status | 400 | REFUNDED | ❌ |
POST /api/payments/non-existent-id/refund
{
"reason" : "Customer requested cancellation"
}
{
"status" : 404,
"code" : "PAYMENT_NOT_FOUND",
"message" : "Payment not found: non-existent-id",
"timestamp" : "2026-05-13T07:36:48.808860Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
code | non-null | PAYMENT_NOT_FOUND | ✅ |
message | non-null | Payment not found: non-existent-id | ✅ |
POST /api/payments/pay_002d9dfc4539/refund
{
"amount" : 10.0
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "reason",
"message" : "不能为空"
} ],
"timestamp" : "2026-05-13T07:36:48.816710Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
message | non-null | Request validation failed | ✅ |
status | 400 | 400 | ✅ |
POST /api/payments/pay_4a97db5d5bda/refund
{
"reason" : "Minimum refund test",
"amount" : 0.01
}
{
"id" : "pay_4a97db5d5bda",
"merchantId" : "setup-merchant",
"customerId" : "setup-customer",
"amount" : 100.0,
"currency" : "USD",
"status" : "PARTIALLY_REFUNDED",
"refundReason" : "Minimum refund test",
"createdAt" : "2026-05-13T07:36:48.819700Z",
"updatedAt" : "2026-05-13T07:36:48.822834Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
createdAt | non-null | 2026-05-13T07:36:48.819700Z | ✅ |
refundReason | Minimum refund test | Minimum refund test | ✅ |
id | non-null | pay_4a97db5d5bda | ✅ |
status | PARTIALLY_REFUNDED | PARTIALLY_REFUNDED | ✅ |
updatedAt | non-null | 2026-05-13T07:36:48.822834Z | ✅ |
POST /api/payments/pay_f8b4842bdfdb/refund
{
"reason" : "Zero amount refund attempt",
"amount" : 0.0
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "amount",
"message" : "必须大于或等于0.01"
} ],
"timestamp" : "2026-05-13T07:36:48.830232Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
message | non-null | Request validation failed | ✅ |
errors | non-null | [{field=amount, message=必须大于或等于0.01}] | ✅ |
status | 400 | 400 | ✅ |
POST /api/payments/pay_c014aa1239b8/refund
{
"reason" : "Negative amount test",
"amount" : -50.0
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "amount",
"message" : "必须大于或等于0.01"
} ],
"timestamp" : "2026-05-13T07:36:48.837390Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
message | non-null | Request validation failed | ✅ |
status | 400 | 400 | ✅ |
POST /api/payments/pay_cc9e457dacab/refund
{
"reason" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"amount" : 10.0
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "reason",
"message" : "个数必须在0和255之间"
} ],
"timestamp" : "2026-05-13T07:36:48.843855Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
createdAt | non-null | null | ❌ |
refundReason | non-null | null | ❌ |
id | non-null | null | ❌ |
status | PARTIALLY_REFUNDED | 400 | ❌ |
updatedAt | non-null | null | ❌ |
POST /api/payments/pay_f5bb137d9139/refund
{
"reason" : "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"amount" : 10.0
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "reason",
"message" : "个数必须在0和255之间"
} ],
"timestamp" : "2026-05-13T07:36:48.851759Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
message | non-null | Request validation failed | ✅ |
status | 400 | 400 | ✅ |
POST /api/payments/pay_13307d6c4c1a/refund
{
"reason" : "Wrong type for amount",
"amount" : "fifty"
}
{
"timestamp" : "2026-05-13T07:36:48.859+00:00",
"status" : 400,
"error" : "Bad Request",
"path" : "/api/payments/pay_13307d6c4c1a/refund"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
code | VALIDATION_ERROR | null | ❌ |
message | non-null | null | ❌ |
status | 400 | 400 | ✅ |
POST /api/payments/pay_a88b6a8baed8/refund
{
"reason" : "",
"amount" : 10.0
}
{
"status" : 400,
"code" : "VALIDATION_ERROR",
"message" : "Request validation failed",
"errors" : [ {
"field" : "reason",
"message" : "不能为空"
} ],
"timestamp" : "2026-05-13T07:36:48.866183Z"
}
| Field | Expected | Actual | Status |
|---|---|---|---|
code | VALIDATION_ERROR | VALIDATION_ERROR | ✅ |
message | non-null | Request validation failed | ✅ |
status | 400 | 400 | ✅ |