# 會員卡
---
- 常數定義
- [會員卡類型](#會員卡類型)
- [會員卡效期類型](#會員卡效期類型)
- [會員卡狀態](#會員卡狀態)
- 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
}
}
}
```