Wixtar Member Transactions Delete
Description
Wixtar 全通路會員中介平台 - 刪除交易 API (DELETE /v1/public/members/transactions)。
用於刪除操作失誤、尚未經過真實退貨流程之交易,並自動回滾其點數與票券副作用,使該交易單號(sale_id)得以重新建立。
業務與運算邏輯
- 5 分鐘黃金期限制:僅限交易建立 5 分鐘內且狀態仍為核准中(未作廢/未還原)之交易可刪除;若超過 5 分鐘或已退貨情境,需改用複合式還原交易 API(
POST /v1/member/wixtar/transactions/reverse)。
- 副作用自動回滾:
- 扣除該筆交易贈送/累積的點數。
- 若交易有折抵票券,會自動將票券執行反核銷恢復狀態(如
status=5)。
- 品牌篩選 (brand_id):未帶或空字串時自動取
token_brand_id 帶入。
Resource
DELETE /v1/member/wixtar/transactions
Authorization
採用 OAuth 2.0 Bearer Token(全通路 Token),並支援以下兩種 Wixtar 認證模式(兩者擇一提供):
* 模式 1 (裝置端自管 Token,推薦):於 Header 帶入 X-Member-Center-Token(由 Wixtar Member Token 取得),此時 X-Client-Id 與 X-Shop-Id 為選填。
* 模式 2 (後端代管 Token,向後相容):未帶入 X-Member-Center-Token 時,必須在 Header 提供 X-Client-Id 與 X-Shop-Id,全通路將自動依後台設定與 Redis 快取代管換發 Token。
認證模式二擇一:若提供 X-Member-Center-Token,則 X-Client-Id 與 X-Shop-Id 為選填;若未提供 X-Member-Center-Token,則 X-Client-Id 與 X-Shop-Id 為必填。
| Name |
Type |
Description |
| X-Member-Center-Token |
string |
(optional) 裝置端自管之 Wixtar Access Token (由 POST /v1/member/wixtar/token 取得)。若有提供則優先以此 Token 轉發 Wixtar |
| X-Client-Id |
string |
(optional/條件必填) POS 機或呼叫端設備代碼。若未提供 X-Member-Center-Token 則為必填 |
| X-Shop-Id |
string |
(optional/條件必填) 門市代碼。若未提供 X-Member-Center-Token 則為必填 |
Request Body Parameters
| Name |
Type |
Description |
| request_id |
string |
冪等識別碼 (UUID 格式) |
| vip_id |
string |
會員編號 (長度 1..20) |
| sale_id |
string |
欲刪除的交易單號 (長度 1..40) |
| brand_id |
string |
(optional) 品牌編號 (未帶時自動取 token_brand_id 或集團範圍) |
Request Example
{
"request_id": "550e8400-e29b-41d4-a716-446655440099",
"vip_id": "CM00000001",
"sale_id": "SALE20260624001",
"brand_id": "24436074"
}
Response Body Parameters
| Name |
Type |
Description |
| status |
integer |
HTTP 狀態碼 (例如: 200) |
| code |
string |
業務回應代碼 (成功為 "000000") |
| message |
string |
回應訊息 (例如: "Success") |
| data |
Data |
主要業務資料內容 |
Response Body Parameters - Data
| Name |
Type |
Description |
| sale_id |
string |
已刪除的交易單號 |
| vip_id |
string |
會員編號 |
| remaining_total_points |
integer |
回滾後可用點數 |
| vouchers |
Vouchers[] |
票券核銷/反核銷結果清單 |
Response Body Parameters - Vouchers
| Name |
Type |
Description |
| tk_no |
string |
票券號碼 |
| status |
string |
反核銷後狀態 |
Response Example - Http Code = 200
{
"status": 200,
"code": "000000",
"message": "Success",
"data": {
"sale_id": "SALE20260624001",
"vip_id": "CM00000001",
"remaining_total_points": 475,
"vouchers": [
{
"tk_no": "TK00000001",
"status": "5"
}
]
}
}
Response Example 錯誤回應 - 400 Pydantic參數驗證(必填欄位缺漏)
{
"status": 200,
"code": "400",
"message": "缺少必填欄位:sale_id(欄位代號:sale_id)",
"data": {
"errors_zh": [
"缺少必填欄位:sale_id(欄位代號:sale_id)"
],
"errors": [
{
"type": "missing",
"loc": [
"body",
"sale_id"
],
"msg": "Field required",
"input": {}
}
]
}
}
Response Example 錯誤回應 - 404 查無對應會員
{
"status": 200,
"code": "404",
"message": "查無對應會員"
}
Response Example 錯誤回應 - 404 交易不存在
{
"status": 200,
"code": "404",
"message": "交易單號 SALE20260624001 不存在"
}
Response Example 錯誤回應 - 400 狀態不可刪除
{
"status": 200,
"code": "400",
"message": "交易單號 SALE20260624001 目前狀態不可刪除"
}
Response Example 錯誤回應 - 400 已超過時間限制
{
"status": 200,
"code": "400",
"message": "交易單號 SALE20260624001 已超過可刪除的時間限制(5 分鐘)"
}
Response Example 錯誤回應 - 400 已有還原紀錄
{
"status": 200,
"code": "400",
"message": "交易單號 SALE20260624001 已有還原紀錄,不可整筆刪除"
}
Response Example 錯誤回應 - 400 票券查無或未透過此交易核銷
{
"status": 200,
"code": "400",
"message": "票券查無或未透過此交易核銷:TK00000001"
}
Response Example 錯誤回應 - 400 票券尚未核銷或已反核銷
{
"status": 200,
"code": "400",
"message": "票券尚未核銷或已反核銷,無法再次反核銷:TK00000001"
}
Response Example 錯誤回應 - 400 會員交易處理中
{
"status": 200,
"code": "400",
"message": "會員交易處理中,請稍後再試"
}
Response Example 錯誤回應 - 500 查詢會員失敗
{
"status": 200,
"code": "500",
"message": "查詢會員失敗"
}
Response Example 錯誤回應 - 500 查詢交易失敗
{
"status": 200,
"code": "500",
"message": "查詢交易失敗"
}
Response Example 錯誤回應 - 500 查詢還原紀錄失敗
{
"status": 200,
"code": "500",
"message": "查詢還原紀錄失敗"
}
Response Example 錯誤回應 - 500 查詢原交易票券失敗
{
"status": 200,
"code": "500",
"message": "查詢原交易票券失敗"
}
Response Example 錯誤回應 - 500 查詢票券失敗
{
"status": 200,
"code": "500",
"message": "查詢票券失敗"
}
Response Example 錯誤回應 - 500 票券反核銷並發競爭
{
"status": 200,
"code": "500",
"message": "票券反核銷失敗,請稍後重試"
}
Response Example 錯誤回應 - 500 刪除交易失敗
{
"status": 200,
"code": "500",
"message": "刪除交易失敗"
}