Wixtar Member QRCode
Description
Wixtar 全通路會員中介平台 - 取得會員動態 QRCode API。提供外部平台透過全通路 API 中介層發送請求至 Wixtar 會員平台 (GET /v1/public/members/qrcode)。依會員編號 (vip_id) 產生相容舊系統 VipVirtualCard.dll (AES-128-CBC + PKCS7) 之動態加密 Base64 字串,供前端展示 QR Code 圖片,以利 POS 或 Kiosk 掃碼辨識會員身分。同一分鐘內多次呼叫回傳相同內容,下一分鐘動態更新。
Resource
GET /v1/member/wixtar/qrcode
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。
Request Headers
認證模式二擇一:若提供
X-Member-Center-Token,則X-Client-Id與X-Shop-Id為選填;若未提供X-Member-Center-Token,則X-Client-Id與X-Shop-Id為必填。
| Name | Type | Description |
|---|---|---|
| Authorization | string | (required) Bearer <omniplatform_token> |
| 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 Query Parameters
| Name | Type | Description |
|---|---|---|
| vip_id | string | (required) 會員編號 (1 .. 20 字元) |
| expire_minutes | integer | (optional) QRCode 有效分鐘數 (整數 > 0,未帶預設為 5) |
| brand_id | string | (optional) 品牌編號 (未帶自動取 Token 的 brand_id) |
Request Example
GET /v1/member/wixtar/qrcode?vip_id=CM00000001&expire_minutes=5 HTTP/1.1
Host: api.example.com
Authorization: Bearer <omniplatform_token>
X-Member-Center-Token: <access_token>
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 |
|---|---|---|
| qrcode | string | 加密後 QRCode 內容(Base64),供前端/掃碼機直接產生 QR 圖像;加密邏輯沿用舊系統 VipVirtualCard.dll(AES-128-CBC + PKCS7,固定金鑰/IV);內容埋入到期時間,同一分鐘內重複呼叫會回傳相同內容 |
| expire_minutes | integer | 本次 QRCode 實際套用的有效分鐘數(未帶 expire_minutes 時為預設值 5) |
| expire_at | string | QRCode 到期時間(YYYY-MM-DD HH:mm:ss) |
Response Example - Http Code = 200
{
"status": 200,
"code": "000000",
"message": "Success",
"data": {
"qrcode": "3LCibRwfVXGXkPELcvQYvTRRJj5KeipngPt1T821kzk=",
"expire_minutes": 5,
"expire_at": "2026-06-04 15:35:00"
}
}
Response Example 錯誤回應 - 400 Pydantic參數驗證(必填欄位缺漏)
{
"status": 200,
"code": "400",
"message": "缺少必填欄位:vip_id(欄位代號:vip_id)",
"data": {
"errors_zh": [
"缺少必填欄位:vip_id(欄位代號:vip_id)"
],
"errors": [
{
"type": "missing",
"loc": [
"query",
"vip_id"
],
"msg": "Field required",
"input": {}
}
]
}
}
Response Example 錯誤回應 - 400 Pydantic參數驗證(expire_minutes非正整數)
{
"status": 200,
"code": "400",
"message": "expire_minutes 應大於 0(欄位代號:expire_minutes)",
"data": {
"errors_zh": [
"expire_minutes 應大於 0(欄位代號:expire_minutes)"
],
"errors": [
{
"type": "greater_than",
"loc": [
"query",
"expire_minutes"
],
"msg": "Input should be greater than 0",
"input": "0"
}
]
}
}
Response Example 錯誤回應 - 404 查無對應會員
{
"status": 200,
"code": "404",
"message": "查無對應會員"
}
Response Example 錯誤回應 - 500 QRCode產生失敗
{
"status": 200,
"code": "500",
"message": "QRCode 產生失敗"
}