---
# System prepended metadata

title: 會員卡

---

# 會員卡

---
- 常數定義
  - [會員卡類型](#會員卡類型)
  - [會員卡效期類型](#會員卡效期類型)
  - [會員卡狀態](#會員卡狀態)
- API 清單
  - 會員卡管理[WEB]
    - [會員卡管理列表](#會員卡管理列表)
    - [取得會員卡管理明細](#取得會員卡管理明細)
    - [取得上傳網址](#取得上傳網址)
    - [新增會員卡](#新增會員卡)
    - [編輯會員卡](#編輯會員卡)
    - [編輯會員卡狀態](#編輯會員卡狀態)
    - [刪除會員卡](#刪除會員卡)
  - App端
    - [取得會員卡列表](#取得會員卡列表)
    - [取得我的會員卡明細](#取得我的會員卡明細)
    - [購買會員卡](#購買會員卡)
---


## 常數定義
### 會員卡類型
 欄位 | 型態  | 說明  
 ---|---|---
 levelType | string | 會員卡類型, NORMAL: 一般會員(seq=1), SILVER: 銀卡會員(seq=2), GOLD:金卡會員(seq=3)

### 會員卡效期類型
 欄位 | 型態  | 說明  
 ---|---|---
 periodType | string | 會員卡效期類型, YEAR: 年, MONTH: 月

### 會員卡狀態
 欄位 | 型態  | 說明  
 ---|---|---
 status | string | 會員卡狀態, NONE: 未啟用, ON:已啟用, OFF:停用

---

# API 清單
## 會員卡管理[WEB]

### 會員卡管理列表
```url
POST /member-card-mgmt/list
```

#### Request-會員卡管理列表
##### Request-會員卡管理列表-query (查詢條件json)
 欄位 | 型態  | 必填 | 長度限制 | 預設 | 說明  
 ---|---|---|---|---|---
 levelType | string | | 10 | | 會員卡類型, 未填則表示查詢全部, 參閱 [會員卡類型](#會員卡類型)
 startDate | string | | 10 | | 啟用期間起始日期, YYYY-MM-DD
 endDate | string | | 10 | | 啟用期間結束日期, YYYY-MM-DD
 status | string | | 10 | | 會員卡狀態, 未填則表示查詢全部, 參閱 [會員卡狀態](#會員卡狀態)
 
##### Request-會員卡管理列表-pagination (分頁json)
 欄位 | 型態  | 必填 | 預設 | 說明
 ---|---|---|---|---
 current | int | | 1 | 當前頁數 
 pageSize | int | | 10 | 每頁結果數量，-1 為顯示所有
 
##### Request-會員卡管理列表-sorter (排序json) 
 欄位 | 型態  | 必填 | 預設 | 說明
 ---|---|---|---|--- 
 field | string | | updateTime | 排序欄位,可排序欄位有 levelType, price, period, periodType, discount, isHot, upgradePoints, onDateTime, offDateTime, memberCount, status, updateTime
 order | string | | desc | 升序或降序 

```javascript
{
    "query": {
        "levelType": null,
        "startDate": null,
        "endDate": null,
        "status": null
    } ,
    "pagination": {
        "current": 1,
        "pageSize": 10
    }, 
    "sorter": {
        "field": "updateTime",
        "order": "desc"
    }
}
```

#### Response-會員卡管理列表
 欄位 | 型態 | 說明 
 ---  | --- | ---
 id | string | 會員卡id
 levelType | string | 會員卡類型, 參閱 [會員卡類型](#會員卡類型)
 isHot | boolean | 熱門選項 
 price | decimal | 售價
 period | int | 會員卡效期
 periodType | string | 會員卡效期類型, 參閱 [會員卡效期類型](#會員卡效期類型)
 thumbnailUrl | string | 縮圖url
 discount | decimal | 會員優惠折扣
 upgradePoints | int | 升等贈點
 onDateTime | timestamp | 最近一筆啟用時間
 offDateTime | timestamp | 最近一筆停用時間
 memberCount | int | 會員數量
 status | string | 會員卡狀態, 參閱 [會員卡狀態](#會員卡狀態)
 updateTime | timestamp | 更新日期時間

```javascript
{
    "httpCode": 200,
    "result": {
        "data": [
            {
                "thumbnailUrl": "http://content-service/swift/v1/member_card/thumbnail/08deac5e-c1e6-4c54-b45c-7f54163186cf.png",
                "id": "1c4ff6b4-afe6-4977-9131-1f1b809bd862",
                "levelType": "NORMAL",
                "isHot": false,
                "price": 0,
                "period": 1,
                "periodType": "YEAR",
                "discount": 0,
                "upgradePoints": 0,
                "status": "ON",
                "updateTime": 1673578874366,
                "onDatetime": 1673578874366,
                "offDateTime": 1673578846985,
                "memberCount": 354
            },
            ...
        ],
        "pagination": {
            "current": 1,
            "pageSize": 10
        },
        "sorter": {
            "field": "updateTime",
            "order": "desc"
        }
    }
}
```

### 取得會員卡管理明細
```url
POST /member-card-mgmt/info
```

#### Request-取得會員卡管理明細
 欄位 | 型態  | 必填 | 長度限制 | 預設 | 說明  
 ---|---|---|---|---|---
 id | string | Y | 36 | | 會員卡id
 
```javascript
{
    "id": "1c4ff6b4-afe6-4977-9131-1f1b809bd862"
}
```

#### Response-取得會員卡管理明細
 欄位 | 型態 | 說明 
 ---  | --- | ---
 id | string | 會員卡id
 levelType | string | 會員卡類型, 參閱 [會員卡類型](#會員卡類型)
 isHot | boolean | 熱門選項 
 price | decimal | 售價
 period | int | 會員卡效期
 periodType | string | 會員卡效期類型, 參閱 [會員卡效期類型](#會員卡效期類型)
 thumbnailUrl | string | 縮圖url
 discount | decimal | 會員優惠折扣
 contentZh | string | 內容描述(中文)
 contentEn | string | 內容描述(英文)
 upgradePoints | int | 升等贈點
 status | string | 會員卡狀態, 參閱 [會員卡狀態](#會員卡狀態)
 createTime | timestamp | 建立日期時間
 updateTime | timestamp | 更新日期時間
 historyList | json array | 啟用停用json array

##### Response-取得會員卡管理明細-historyList(json)
 欄位 | 型態 | 說明 
 ---  | --- | ---
 memberCardId | string | 會員卡id
 status | string | 會員卡狀態, 參閱 [會員卡狀態](#會員卡狀態)
 dateTime | timestamp | 啟用/停用 時間

```javascript
{
    "httpCode": 200,
    "result": {
        "data": {
            "thumbnailUrl": "http://content-service/swift/v1/member_card/thumbnail/08deac5e-c1e6-4c54-b45c-7f54163186cf.png",
            "id": "1c4ff6b4-afe6-4977-9131-1f1b809bd862",
            "levelType": "NORMAL",
            "isHot": false,
            "price": 0,
            "period": 1,
            "periodType": "YEAR",
            "discount": 0,
            "contentZh": "．生理量測/步行/飲食健康紀錄\n．健康分析\n．衛教資訊\n．參與線上活動",
            "contentEn": "． Physiological measurement/walking/diet health records\n． Health analysis\n． Health education information\n． Online activities",
            "upgradePoints": 0,
            "status": "ON",
            "createTime": 1673578295531,
            "updateTime": 1673578874366,
            "historyList": [
                {
                    "memberCardId": "1c4ff6b4-afe6-4977-9131-1f1b809bd862",
                    "status": "ON",
                    "dateTime": 1673578874366
                },
                ...
            ]
        }
    }
}
```

### 取得上傳網址
```url
POST /member-card-mgmt/get-upload-url
```

*  新增/編輯會員卡時用來上傳縮圖

#### Request-取得上傳網址
 欄位 | 型態  | 必填 | 預設 | 說明 
 ---|---|---|---|---
 isMultipart | boolean | Y | false | 是否使用分段上傳
 isThumbnail | boolean | Y | false | 上傳的是否為縮圖
 fileName    | String | Y | | 檔名，不包含副檔名，限制最多50字
 fileType    | String | Y | | 副檔名, 限制最多10字
 totalPart   | int    | **N** (isMultipart=false)<br>**Y** (isMultipart=true) | | 總分塊數量，不可小於2
 parts       | Array [...part] | **N** (isMultipart=false)<br>**Y** (isMultipart=true) | | part 資訊 

##### Request-取得上傳網址-part(Object)
 欄位 | 型態  | 必填 | 預設 | 說明 
 ---|---|---|---|---
 chunkSize | int | Y | | 該 chunk 的大小, bytes
 md5 | string | Y | | 該 part 的 md5
 part | int | Y | | part number, 第幾塊 chunk

```javascript
// 單檔
{
    isMultipart: false,
    fileName: member_card_test-2,
    fileType: png,
    totalPart: null,
    parts: [
    ],
    isThumbnail: true
}

// 分塊上傳
{
    isMultipart: true,
    isThumbnail: false,
    fileName: giphy (7),
    fileType: mp4,
    totalPart: 2,
    parts: [
    	{
    		chunkSize: 5242880,
    		md5: 5AACA89868CD486D81192221CF9F9415,
    		part: 1
    	},
    	{
    		chunkSize: 3145728,
    		md5: 5AACA89868CD486D81192221CF9F9415,
    		part: 2
    	}
    ]
}
```

### Response-取得上傳網址
#### Response-取得上傳網址-data
 欄位 | 型態 | 說明 
 ---  | --- | ---
 objectKey | string | storage 中的 objectKey, **unique** 
 uploadId | string | 識別該次上傳的 uploadId 
 fileName | string | 名稱 
 fileType | string | 副檔名 
 url | string | 單檔上傳的時候，才會回傳該 url, 時效 3600 秒
 parts | [...part] | multipart上傳各part的url

#### Response-取得上傳網址-part
 欄位 | 型態 | 說明 
 ---  | --- | ---
 chunkSize | int | 該 chunk 的大小, bytes
 md5 | string | 該 part 的 md5
 part | int | part number, 第幾塊 chunk
 url | string | 可上傳的 url, 時效 3600 秒

```javascript
// HttpStatus:422, 上傳的檔案類型不允許
{
    errorMsg: SERVICE_ERROR.UPLOAD_FILE_TYPE_NOT_ALLOWED,
    httpCode: 422
}

// HttpStatus: 200
// 單檔
{
    httpCode: 200,
    result: {
        data: {
            objectKey: member_card/thumbnail/56ca1cfc-4bcb-4a0a-b079-fd08a0e75a37.png,
            uploadId: fb483648-25d0-4137-bb49-85c17842a95b,
            fileName: member_card_test-2,
            fileType: png,
            url: http://swift-storage/member_card/thumbnail/56ca1cfc-4bcb-4a0a-b079-fd08a0e75a37.png
        }
    }
}
// 分塊上傳
{
    httpCode: 200,
    result: {
        data: {
            objectKey: event/f76adf26-1e22-4b18-980d-b9a68efc5171.mp4,
            uploadId: 53fde368-43d9-455f-a610-62091fc30be6,
            fileName: giphy (7),
            fileType: mp4,
            parts: [
                {
                    chunkSize: 5242880,
                    md5: 5AACA89868CD486D81192221CF9F9415,
                    part: 1,
                    url: http://192.168.100.239:12345/v1/AUTH_test/kmuh_segments/event%2Ff76adf26-1e22-4b18-980d-b9a68efc5171.mp4%2F1?temp_url_sig=796c52b00f75b62be658533b2fadbc7f14381e36&temp_url_expires=1554263771
                },
                {
                    chunkSize: 3145728,
                    md5: 5AACA89868CD486D81192221CF9F9415,
                    part: 2,
                    url: http://192.168.100.239:12345/v1/AUTH_test/kmuh_segments/event%2Ff76adf26-1e22-4b18-980d-b9a68efc5171.mp4%2F2?temp_url_sig=ad71de81dfbcd94bce4a091f2630c6f1373ff3cd&temp_url_expires=1554263771
                }
            ]
        }
    }
}
```

### 新增會員卡
```url
POST /member-card-mgmt/add
```

* 目前會員卡只能透過複製現有的會員卡來新增
* 新增的會員卡狀態為NONE: 未啟用

#### Request-新增會員卡
 欄位 | 型態  | 必填 | 長度限制 | 預設 | 說明  
 ---|---|---|---|---|---
 levelType | string | Y  | 10 |  | 會員卡類型, 參閱 [會員卡類型](#會員卡類型), 不可由前端選擇變更
 isHot | boolean | Y | | | 熱門選項
 price | decimal | Y | | | 會員卡售價
 period | int | Y | | | 會員卡效期, 需 > 0
 periodType | string | Y | 10 | | 會員卡效期類型, 參閱 [會員卡效期類型](#會員卡效期類型)
 discount | decimal | Y | | | 會員購物優惠折扣(%)
 contentZh | string |  | 1000 | | 內容描述(中文), 限制最多1000字
 contentEn | string |  | 1000 | | 內容描述(英文), 限制最多1000字
 upgradePoints | int | Y | | | 升等優惠贈點, 0表示無贈點
 thumbnailObjectKey | string | Y | 500 | | 縮圖objectKey, 先取得縮圖上傳網址並上傳成功，取其 objectKey。
 isThumbnailMultipart | boolean | N | | | 縮圖上傳時是否分塊上傳，預設為 false
 thumbnailTotalPart | int | **N** (isThumbnailMultipart=false)<br>**Y** (isThumbnailMultipart=true) | | | 縮圖上傳的總分塊數量，不可小於2
 thumbnailUploadId | string | **N** (isThumbnailMultipart=false)<br>**Y** (isThumbnailMultipart=true) | | | 從 /member-card-mgmt/get-upload-url 取得的 uploadId
 
```javascript
{
    "levelType": "NORMAL",
    "thumbnailObjectKey": "member_card/thumbnail/08deac5e-c1e6-4c54-b45c-7f54163186cf.png",
    "isHot": false,
    "price": 0,
    "period": 1,
    "periodType": "YEAR",
    "discount": 0,
    "contentZh": "．生理量測/步行/飲食健康紀錄\n．健康分析\n．衛教資訊\n．參與線上活動",
    "contentEn": "． Physiological measurement/walking/diet health records\n． Health analysis\n． Health education information\n． Online activities",
    "upgradePoints": 0,
    "isThumbnailMultipart":false,
    "thumbnailTotalPart": null,
    "thumbnailUploadId": null
}
```

#### Error-新增會員卡
 httpCode | 錯誤碼 | 說明
 --- | --- | ---
 400 | API_ERROR.ARGUMENT_ERROR | 輸入參數錯誤, 可參閱 errorDesc

#### Response-新增會員卡
 欄位 | 型態 | 說明 
 ---  | --- | ---
 id | string | 會員卡id
 levelType | string | 會員卡類型, 參閱 [會員卡類型](#會員卡類型)
 isHot | boolean | 熱門選項 
 price | decimal | 售價
 period | int | 會員卡效期
 periodType | string | 會員卡效期類型, 參閱 [會員卡效期類型](#會員卡效期類型)
 thumbnailUrl | string | 縮圖url
 discount | decimal | 會員優惠折扣
 contentZh | string | 內容描述(中文)
 contentEn | string | 內容描述(英文)
 upgradePoints | int | 升等贈點
 status | string | 會員卡狀態, 參閱 [會員卡狀態](#會員卡狀態)
 creator | string | 建立者 account id
 updater | string | 更新者 account id
 createTime | timestamp | 建立日期時間
 updateTime | timestamp | 更新日期時間

```javascript
{
    "httpCode": 200,
    "result": {
        "data": {
            "id": "78df2be7-974c-4441-9f52-82f5a11fc27c",
            "levelType": "NORMAL",
            "thumbnailObjectKey": "member_card/thumbnail/08deac5e-c1e6-4c54-b45c-7f54163186cf.png",
            "isHot": false,
            "price": 0,
            "period": 1,
            "periodType": "YEAR",
            "discount": 0,
            "contentZh": "．生理量測/步行/飲食健康紀錄\n．健康分析\n．衛教資訊\n．參與線上活動",
            "contentEn": "． Physiological measurement/walking/diet health records\n． Health analysis\n． Health education information\n． Online activities",
            "upgradePoints": 0,
            "status": "NONE",
            "createTime": 1673578593509,
            "updateTime": 1673578593509,
            "creator": "a1131b35-dab0-4593-899b-9485356e02d4",
            "updater": "a1131b35-dab0-4593-899b-9485356e02d4"
        }
    }
}
```

### 編輯會員卡
```url
POST /member-card-mgmt/update
```

* 編輯會員卡, 不會更新目前狀態

#### Request-編輯會員卡
 欄位 | 型態  | 必填 | 長度限制 | 預設 | 說明  
 ---|---|---|---|---|---
 id | string | Y | 36 | | 會員卡id
 levelType | string | Y  | 10 |  | 會員卡類型, 參閱 [會員卡類型](#會員卡類型), 不可由前端選擇變更
 isHot | boolean | Y | | | 熱門選項
 price | decimal | Y | | | 會員卡售價
 period | int | Y | | | 會員卡效期, 需 > 0
 periodType | string | Y | 10 | | 會員卡效期類型, 參閱 [會員卡效期類型](#會員卡效期類型)
 discount | decimal | Y | | | 會員購物優惠折扣(%)
 contentZh | string |  | 1000 | | 內容描述(中文), 限制最多1000字
 contentEn | string |  | 1000 | | 內容描述(英文), 限制最多1000字
 upgradePoints | int | Y | | | 升等優惠贈點, 0表示無贈點
 thumbnailObjectKey | string | Y | 500 | | 縮圖objectKey, 先取得縮圖上傳網址並上傳成功，取其 objectKey。
 isThumbnailMultipart | boolean | N | | | 縮圖上傳時是否分塊上傳，預設為 false
 thumbnailTotalPart | int | **N** (isThumbnailMultipart=false)<br>**Y** (isThumbnailMultipart=true) | | | 縮圖上傳的總分塊數量，不可小於2
 thumbnailUploadId | string | **N** (isThumbnailMultipart=false)<br>**Y** (isThumbnailMultipart=true) | | | 從 /member-card-mgmt/get-upload-url 取得的 uploadId

```javascript
{
    "id": "1c4ff6b4-afe6-4977-9131-1f1b809bd862",
    "levelType": "NORMAL",
    "thumbnailObjectKey": "member_card/thumbnail/08deac5e-c1e6-4c54-b45c-7f54163186cf.png",
    "isHot": false,
    "price": 0,
    "period": 1,
    "periodType": "YEAR",
    "discount": 0,
    "contentZh": "．生理量測/步行/飲食健康紀錄\n．健康分析\n．衛教資訊\n．參與線上活動",
    "contentEn": "． Physiological measurement/walking/diet health records\n． Health analysis\n． Health education information\n． Online activities",
    "upgradePoints": 0,
    "isThumbnailMultipart":false,
    "thumbnailTotalPart": null,
    "thumbnailUploadId": null
}
```

#### Error-編輯會員卡
 httpCode | 錯誤碼 | 說明
 --- | --- | ---
 400 | API_ERROR.NOT_EXIST | 無此筆資料
 400 | API_ERROR.ARGUMENT_ERROR | 輸入參數錯誤, 可參閱 errorDesc

#### Response-編輯會員卡
 欄位 | 型態 | 說明 
 ---  | --- | ---
 id | string | 會員卡id
 levelType | string | 會員卡類型, 參閱 [會員卡類型](#會員卡類型)
 isHot | boolean | 熱門選項 
 price | decimal | 售價
 period | int | 會員卡效期
 periodType | string | 會員卡效期類型, 參閱 [會員卡效期類型](#會員卡效期類型)
 thumbnailUrl | string | 縮圖url
 discount | decimal | 會員優惠折扣
 contentZh | string | 內容描述(中文)
 contentEn | string | 內容描述(英文)
 upgradePoints | int | 升等贈點
 status | string | 會員卡狀態, 參閱 [會員卡狀態](#會員卡狀態)
 creator | string | 建立者 account id
 updater | string | 更新者 account id
 createTime | timestamp | 建立日期時間
 updateTime | timestamp | 更新日期時間

```javascript
{
    "httpCode": 200,
    "result": {
        "data": {
            "id": "1c4ff6b4-afe6-4977-9131-1f1b809bd862",
            "levelType": "NORMAL",
            "thumbnailObjectKey": "member_card/thumbnail/08deac5e-c1e6-4c54-b45c-7f54163186cf.png",
            "isHot": false,
            "price": 0,
            "period": 1,
            "periodType": "YEAR",
            "discount": 0,
            "contentZh": "．生理量測/步行/飲食健康紀錄\n．健康分析\n．衛教資訊\n．參與線上活動",
            "contentEn": "． Physiological measurement/walking/diet health records\n． Health analysis\n． Health education information\n． Online activities",
            "upgradePoints": 0,
            "status": "ON",
            "createTime": 1673578295531,
            "updateTime": 1673578512913,
            "updater": "a1131b35-dab0-4593-899b-9485356e02d4"
        }
    }
}
```

### 編輯會員卡狀態
```url
POST /member-card-mgmt/update-status
```

* 同一會員卡類型, 需至少有一個為啟用
* 啟用會員卡時, 會將同類型已啟用會員卡變更為停用

#### Request-編輯會員卡狀態
 欄位 | 型態  | 必填 | 長度限制 | 預設 | 說明  
 ---|---|---|---|---|---
 id | string | Y | 36 | | 會員卡id
 status | string | Y | 10 | | 會員卡狀態, 參閱 [會員卡狀態](#會員卡狀態)

```javascript
{
    "id": "1c4ff6b4-afe6-4977-9131-1f1b809bd862",
    "status": "ON"
}
```

#### Error-編輯會員卡狀態
 httpCode | 錯誤碼 | 說明
 --- | --- | ---
 400 | API_ERROR.NOT_EXIST | 無此筆資料
 400 | API_ERROR.ARGUMENT_ERROR | 輸入參數錯誤, 可參閱 errorDesc
 422 | SERVICE_ERROR.MEMBER_CARD_MGMT_UPDATE_STATUS_NOT_ALLOWED | 不允許變更會員卡狀態
 422 | SERVICE_ERROR.MEMBER_CARD_MGMT_UPDATE_STATUS_OFF_NOT_ALLOWED | 停用會員卡時,同類型會員卡至少需有一張為ON

#### Response-編輯會員卡狀態
 欄位 | 型態 | 說明 
 ---  | --- | ---
 id | string | 會員卡id
 levelType | string | 會員卡類型, 參閱 [會員卡類型](#會員卡類型)
 isHot | boolean | 熱門選項 
 price | decimal | 售價
 period | int | 會員卡效期
 periodType | string | 會員卡效期類型, 參閱 [會員卡效期類型](#會員卡效期類型)
 thumbnailUrl | string | 縮圖url
 discount | decimal | 會員優惠折扣
 contentZh | string | 內容描述(中文)
 contentEn | string | 內容描述(英文)
 upgradePoints | int | 升等贈點
 status | string | 會員卡狀態, 參閱 [會員卡狀態](#會員卡狀態)
 creator | string | 建立者 account id
 updater | string | 更新者 account id
 createTime | timestamp | 建立日期時間
 updateTime | timestamp | 更新日期時間

```javascript
{
    "httpCode": 200,
    "result": {
        "data": {
            "id": "1c4ff6b4-afe6-4977-9131-1f1b809bd862",
            "levelType": "NORMAL",
            "thumbnailObjectKey": "member_card/thumbnail/08deac5e-c1e6-4c54-b45c-7f54163186cf.png",
            "isHot": false,
            "price": 0,
            "period": 1,
            "periodType": "YEAR",
            "discount": 0,
            "contentZh": "．生理量測/步行/飲食健康紀錄\n．健康分析\n．衛教資訊\n．參與線上活動",
            "contentEn": "． Physiological measurement/walking/diet health records\n． Health analysis\n． Health education information\n． Online activities",
            "upgradePoints": 0,
            "status": "ON",
            "createTime": 1673578295531,
            "updateTime": 1673578874366,
            "updater": "a1131b35-dab0-4593-899b-9485356e02d4"
        }
    }
}
```

### 刪除會員卡
```url
POST /member-card-mgmt/delete
```

* 只允許刪除未啟用/已停用會員卡, 且無會員數量的會員卡

#### Request-刪除會員卡
 欄位 | 型態  | 必填 | 長度限制 | 預設 | 說明  
 ---|---|---|---|---|---
 id | string | Y | 36 | | 會員卡id

```javascript
{
    "id": "b7d03fb8-5cd5-4d99-8ef0-e199d3a1e8ad"
}
```

#### Error-刪除會員卡
 httpCode | 錯誤碼 | 說明
 --- | --- | ---
 400 | API_ERROR.NOT_EXIST | 無此筆資料
 422 | SERVICE_ERROR.MEMBER_CARD_MGMT_DELETE_NOT_ALLOWED_STATUS_ON | 不允許刪除已啟用會員卡
 422 | SERVICE_ERROR.MEMBER_CARD_MGMT_DELETE_NOT_ALLOWED_HAD_MEMBERS | 不允許刪除會員卡,已有會員

#### Response-刪除會員卡
 欄位 | 型態 | 說明 
 ---  | --- | ---
 count | int | 刪除筆數, > 0 表示成功刪除

```javascript
{
    httpCode: 200,
    result: {
        data: {
            count: 1
        }
    }
}
```


## App端

### 取得會員卡列表
```url
POST /member-card/list-available
```

#### Request-取得會員卡列表
 欄位 | 型態  | 必填 | 長度限制 | 預設 | 說明  
 ---|---|---|---|---|---

```javascript
```

#### Response-取得會員卡列表
 欄位 | 型態 | 說明 
 ---  | --- | ---
 id | string | 會員卡id
 levelType | string | 會員卡類型, 參閱 [會員卡類型](#會員卡類型)
 levelSeq | int | 會員卡類型序號, 參閱 [會員卡類型](#會員卡類型)
 isHot | boolean | 熱門選項 
 price | decimal | 售價
 period | int | 會員卡效期
 periodType | string | 會員卡效期類型, 參閱 [會員卡效期類型](#會員卡效期類型)
 thumbnailUrl | string | 縮圖url
 discount | decimal | 會員優惠折扣
 contentZh | string | 內容描述(中文)
 contentEn | string | 內容描述(英文)
 upgradePoints | int | 升等贈點
 status | string | 會員卡狀態, 參閱 [會員卡狀態](#會員卡狀態)
 updateTime | timestamp | 更新日期時間

```javascript
{
    "httpCode": 200,
    "result": {
        "data": [
            {
                "thumbnailUrl": "http://content-service/swift/v1/member_card/thumbnail/08deac5e-c1e6-4c54-b45c-7f54163186cf.png",
                "id": "1c4ff6b4-afe6-4977-9131-1f1b809bd862",
                "levelType": "NORMAL",
                "levelSeq": 1,
                "isHot": false,
                "price": 0,
                "period": 1,
                "periodType": "YEAR",
                "discount": 0,
                "contentZh": "．生理量測/步行/飲食健康紀錄\n．健康分析\n．衛教資訊\n．參與線上活動",
                "contentEn": "． Physiological measurement/walking/diet health records\n． Health analysis\n． Health education information\n． Online activities",
                "upgradePoints": 0,
                "status": "ON",
                "updateTime": 1673578874366
            },
            ...
        ]
    }
}
```

### 取得我的會員卡明細
```url
POST /member-card/my-card-info
```

#### Request-取得我的會員卡明細
 欄位 | 型態  | 必填 | 長度限制 | 預設 | 說明  
 ---|---|---|---|---|---
 
 
```javascript
```

#### Response-取得我的會員卡明細
 欄位 | 型態 | 說明 
 ---  | --- | ---
 id | string | 會員卡id
 levelType | string | 會員卡類型, 參閱 [會員卡類型](#會員卡類型)
 levelSeq | int | 會員卡類型序號, 參閱 [會員卡類型](#會員卡類型)
 isHot | boolean | 熱門選項 
 price | decimal | 售價
 period | int | 會員卡效期
 periodType | string | 會員卡效期類型, 參閱 [會員卡效期類型](#會員卡效期類型)
 thumbnailUrl | string | 縮圖url
 discount | decimal | 會員優惠折扣
 contentZh | string | 內容描述(中文)
 contentEn | string | 內容描述(英文)
 upgradePoints | int | 升等贈點
 status | string | 會員卡狀態, 參閱 [會員卡狀態](#會員卡狀態)
 createTime | timestamp | 建立日期時間
 updateTime | timestamp | 更新日期時間
 activeTime | timestamp | 會員效期啟始時間
 expiredTime | timestamp | 會員效期到期時間
 latestPurchaseInfo | json | 最近一筆的會員卡購買記錄json

##### Response-取得我的會員卡明細-最近一筆的會員卡購買記錄json
 欄位 | 型態 | 說明 
 ---  | --- | ---
 id | string | 會員卡歷史記錄id
 memberCardPurchaseId | string | 會員卡購買記錄id
 period | int | 會員卡效期
 periodType | string | 會員卡效期類型, 參閱 [會員卡效期類型](#會員卡效期類型)
 upgradePoints | int | 升等贈點
 activeTime | timestamp | 會員效期啟始時間
 expiredTime | timestamp | 會員效期到期時間
 orderType | string | 訂單類型, 此處會是MEMBER_LEVEL: 會員卡
 orderNo | string | 訂單號碼 
 totalAmount | int | 付款金額
 paymentType | string | 付款類型, 此處會是ONETIME: 信用卡一次付清
 paymentTime | timestamp | 付款完成日期
 orderStatus | string | 訂單狀態, NONE:尚未付款, PROCESSING:付款處理中, COMPLETED:付款成功, FAILED:付款失敗


```javascript
{
    "httpCode": 200,
    "result": {
        "data": {
            "id": "283634a5-aee8-499f-a4cb-7cb27a8048e9",
            "levelType": "SILVER",
            "levelSeq": 2,
            "isHot": false,
            "price": 1000,
            "period": 1,
            "periodType": "YEAR",
            "discount": 5,
            "contentZh": "．健康購物享優惠價\r\n．生理量測/步行/飲食健康紀錄\r\n．健康分析\r\n．衛教資訊\r\n．參與線上活動",
            "contentEn": "． Enjoy discounted prices for healthy shopping\r\n． Physiological measurement/walking/diet health records\r\n． Health analysis\r\n． Health education information\r\n． Online activities",
            "upgradePoints": 100,
            "status": "ON",
            "updateTime": 1673578295531,
            "activeTime": 1674092963281,
            "expiredTime": 1705679999999,
            "latestPurchaseInfo": {
                "id": "d3fb763d-ff1e-4351-bd38-69bfe8c48f0c",
                "memberCardPurchaseId": "e6e87252-c14c-425e-81c2-049cf5ec4fd0",
                "memberCardId": "283634a5-aee8-499f-a4cb-7cb27a8048e9",
                "period": 1,
                "periodType": "YEAR",
                "activeTime": 1674092963281,
                "expiredTime": 1705679999999,
                "upgradePoints": 100,
                "orderType": "MEMBER_LEVEL",
                "orderNo": "ML2301180001",
                "paymentTime": 1674028877594,
                "orderStatus": "COMPLETED",
                "paymentType": "ONETIME",
                "totalAmount": 0,
                "isPaid": true
            }
        }
    }
}
```

### 購買會員卡
```url
POST /member-card/purchase
```

* App端點擊購買/續約後, 呼叫此API, API會回傳訂單info
* Android端呼叫綠界SDK執行付款流程, iOS則執行WebView執行付款流程
* 付款完成後才會套用購買的會員卡等級
* 不可降級購買, 可使用levelSeq來判別

#### Request-購買會員卡
 欄位 | 型態  | 必填 | 長度限制 | 預設 | 說明  
 ---|---|---|---|---|---
 memberCardId | string | Y  | 36 |  | 購買/續約的會員卡id
 invoiceType | string | Y  | 10 |  | 發票類型. PERSONAL: 個人 DONATION: 捐贈 COMPANY: 企業
 loveCode | string | N  | 7 |  | 捐贈碼, invoiceType=DONATION時必填
 carrierNum | string | N  | 8 |  | 載具編號, invoiceType=PERSONAL時選填
 customerIdentifier | string | N  | 8 |  | 統編, invoiceType=COMPANY時必填
 customerName | string | N  | 60 |  | 公司名稱, invoiceType=COMPANY時必填
 customerAddr | string | N  | 100 |  | 發票寄送地址, invoiceType=COMPANY時必填
 customerPhone | string | N  | 20 |  | 客戶電話, customerEmail為空時必填
 customerEmail | string | N  | 80 |  | 客戶電子信箱, customerPhone為空時必填
 
 
```javascript
{
    "memberCardId": "1c4ff6b4-afe6-4977-9131-1f1b809bd862",
    "invoiceType": "PERSONAL",
    "customerPhone": "0987654321"
}
```

#### Error-購買會員卡
 httpCode | 錯誤碼 | 說明
 --- | --- | ---
 400 | API_ERROR.NOT_EXIST | 無此筆資料
 400 | API_ERROR.ARGUMENT_ERROR | 輸入參數錯誤, 可參閱 errorDesc
 422 | SERVICE_ERROR.MEMBER_CARD_PURCHASE_NOT_ALLOWED_NOT_ON_STATUS | 不允許購買會員卡, 會員卡非啟用狀態
 422 | SERVICE_ERROR.MEMBER_CARD_PURCHASE_NOT_ALLOWED_DOWN_LEVEL | 不允許降級購買會員卡
 422 | SERVICE_ERROR.INVOICE_LOVE_CODE_ERROR | 發票資訊-捐贈碼錯誤
 422 | SERVICE_ERROR.INVOICE_BAR_CODE_ERROR | 發票資訊-手機載具錯誤
 422 | SERVICE_ERROR.INVOICE_COMPANY_IDENTIFIER_INFO_ERROR | 發票資訊-統編資訊錯誤
 422 | SERVICE_ERROR.INVOICE_CUSTOMER_PHONE_EMAIL_NOT_FOUND | 發票資訊-客戶信箱或電話未填
 

#### Response-購買會員卡
 欄位 | 型態 | 說明 
 ---  | --- | ---
 id | string | 訂單id
 orderType | string | 訂單類型, 此處會是MEMBER_LEVEL: 會員卡
 orderNo | string | 訂單號碼 
 totalAmount | int | 付款金額
 paymentType | string | 付款類型, 此處會是ONETIME: 信用卡一次付清
 issueDate | timestamp | 訂單建立日期
 orderTime | timestamp | 訂單建立日期時間
 orderStatus | string | 訂單狀態, NONE:尚未付款, PROCESSING:付款處理中, COMPLETED:付款成功, FAILED:付款失敗 
 target | string | 訂單所對應的會員卡購買記錄id
 householdMemberId | string | householdMemberId
 itemName | string | 訂單購買項目名稱
 createTime | timestamp | 建立日期時間
 updateTime | timestamp | 更新日期時間

```javascript
{
    "httpCode": 200,
    "result": {
        "data": {
            "id": "4b040353-2162-4f69-8620-e563403eb708",
            "orderType": "MEMBER_LEVEL",
            "orderNo": "ML2301180001",
            "totalAmount": 0,
            "paymentType": "ONETIME",
            "issueDate": 1673971200000,
            "orderTime": 1674028877594,
            "orderStatus": "NONE",
            "target": "e6e87252-c14c-425e-81c2-049cf5ec4fd0",
            "householdMemberId": "150b53f5-7126-4900-9fb0-87a08b45e06b",
            "itemName": "一般會員",
            "updateTime": 1674028877590,
            "createTime": 1674028877590
        }
    }
}
```
