# 目錄 [[_TOC_]] - [ Version ](#Version) - [ 1. 即時核銷票卷 ](#1.-即時核銷票卷) - [ 2. 批次核銷票卷 ](#2.-批次核銷票卷) - [ 3. 取得用戶票券清單 ](#3.-取得用戶票券清單) - [ 4. 新增用戶票券 ](#4.-新增用戶票券) - [ Appendix. 錯誤碼列表 ](#Appendix.-錯誤碼列表) # Version | 版本 | 日期 | 資訊 | | -------- | -------- | -------- | | v1.0.0 | 2022/11/01 | 初版 | | v1.0.1 | 2023/02/03 | **新增用戶票券 API** 回傳值更新 | --- # 1. 即時核銷票卷 ## Requirement - 需提供IP開通白名單才可使用此 api ## API : updateCouponStatus ### * **URL** `/store/api/v1/updateCouponStatus` ### * **Method** `POST` ### * **Headers** ```json "content-type": "application/json" ``` ### **Request Body** #### **Required:** * **廠商代碼** 由遠傳提供 `partner_prefix=[string]` * **廠商核銷序號** `ecoupon_sn_string=[string]` #### **Optional:** * **動作** `action=[string]` redeem: 核銷, recover: 回復票券, 預設redeem **範例** ```json { "partner_prefix": "XIAOMI", "ecoupon_sn_string": "5JQyd6TfqEsJJgPp", "action": "redeem" } ``` ### Response **Required:** * **錯誤碼** `errCode=[string]` * **錯誤訊息** `errMsg=[string]` * **詳細錯誤訊息** `errDetail=[string]` #### 成功範例 ```json { "errCode": "00", "errMsg": "", "errDetail": "" } ``` #### 失敗範例 ```json { "errCode": "101", "errMsg": "Invalid request", "errDetail": "" } ``` # 2. 通用型批次核銷票卷 ## Requirement - 廠商提供IP白名單後,可將每日核銷票卷序號上傳至遠傳提供的SFTP。 ## 核銷資料檔 * **目錄** `SFTP根目錄` * **檔名** `大小寫英文數字組合` * **內容** ``` 5JQyPDOd6TfqEsJJgPp GksnWvvsamufuJXp DWP8CcPXRYkudwTv ``` # 3. 取得用戶票券清單 ## Requirement - 需提供IP開通白名單才可使用此 api - 需申請 partner_prefix ## API : getUserCoupon ### * **URL** `/store/api/v1/getUserCoupon` ### * **Method** `POST` ### * **Headers** ```json "content-type": "application/json" ``` ### Request #### **Required:** * **用戶ID** `user_id=[string]` #### **Optional:** * **廠商代碼** `partner_prefix=[string]` * **票卷核銷狀態** `isDisabled=[boolean]` **範例** ```json { "user_id": "1234567890" "partner_prefix": "XIAOMI" } ``` ### Response **Required:** * **錯誤碼** `errCode=[string]` * **錯誤訊息** `errMsg=[string]` * **詳細錯誤訊息** `errDetail=[string]` * **票卷序號** `ecoupon_sn_string=[string]` * **廠商編碼** `partner_prefix=[string]` * **票卷圖示** `prod_images_ratio1x1=[string]` * **起始日期** `start_date=[string]` * **結束日期** `end_date=[string]` * **用戶手動核銷** `can_be_marked_used_by_user=[boolean]` * **廠商自動核銷** `can_be_marked_used_by_partner=[boolean]` * **票卷名稱** `ecoupon_name=[string]` * **票卷備註** `foot_note=[string]` * **票卷說明** `description=[string]` * **二段條碼隱藏** `barcode_2_display_value_hide=[string]` * **用戶核銷** `status_marked_used_by_user=[boolean]` * **用戶核銷時間** `status_marked_used_by_user_time=[datetime]` * **廠商核銷** `status_marked_used_by_partner=[boolean]` * **廠商核銷時間** `status_marked_used_by_partner_time=[datetime]` * **票卷取得時間** `received_time=[datetime]` * **票卷核銷狀態** `isDisabled=[boolean]` #### 成功範例 ```json { "errCode": "00", "errMsg": "", "errDetail": "", "coupons": [ { "ecoupon_sn_string": "5JQyd6TfqEsJJgPp", "partner_prefix": "XIAOMI", "prod_images_ratio1x1": "https://picdn.gomaji.com/products/o/469/235469/235469_1_9.jpg", "start_date": "2021-01-01", "end_date": "2023-01-01", "can_be_marked_used_by_user": false, "can_be_marked_used_by_partner": true, "ecoupon_name": "小米電風扇兌換卷", "display_label": "兌換券", "foot_note": "此券只能使用一次", "description": "這是測試票券", "barcode_2_display_value_hide": false, "status_marked_used_by_user": false, "status_marked_used_by_partner": false, "status_marked_used_by_user_time": "", "status_marked_used_by_partner_time": "", "received_time": "2022-03-22T10:59:54+08:00", "isDisabled": false }, { "ecoupon_sn_string": "fpNF5VNqmEUu7yat", "partner_prefix": "XIAOMI", "prod_images_ratio1x1": "https://picdn.gomaji.com/products/o/469/235469/235469_1_9.jpg", "start_date": "2021-01-01", "end_date": "2023-01-01", "can_be_marked_used_by_user": false, "can_be_marked_used_by_partner": true, "ecoupon_name": "小米電風扇兌換卷", "display_label": "兌換券", "foot_note": "此券只能使用一次", "description": "這是測試票券", "barcode_2_display_value_hide": false, "status_marked_used_by_user": false, "status_marked_used_by_partner": true, "status_marked_used_by_user_time": "", "status_marked_used_by_partner_time": "2021-12-21T00:04:52+08:00", "received_time": "2022-03-22T10:59:54+08:00", "isDisabled": false } ] } ``` # 4. 新增用戶票券 ## Requirement - 需提供IP開通白名單才可使用此 api - 需申請 partner_prefix - 需申請 partnerApikey ## API : addUserCoupon ### **URL** `/store/api/v1/addUserCoupon` ### **Method** `POST` ### **Headers** ```json "content-type": "application/json", "partner_prefix": "tw_fetnet" "apikey": "9e8a0dd6558896fa23868308f16fd970" ``` - apikey = MD5(moment().format('YYYYMMDD') + partnerApikey) - YYYYMMDD 的時區必須是台灣時區(+8) ### Request Body #### **Required:** * **加密後資料** `encryptedData=[string]` - 加密方式為 AES_CBC,將整個原始 json 加密後放置此欄位 * **用戶ID** `user_id=[string]` * **coupon序號** `ecoupon_sn_string=[string]` * **序號類型** `sn_type=[string]` - valid value: RAW_STRING | BARCODE | BARCODE1_BARCODE2 | QRCODE - If value is 'BARCODE1_BARCODE2', the $ecoupon_sn_string SHOULD be in this format: "11122bwe,123444cde". - If value is "BARCODE" or "QRCODE" or "RAW_STRING", the $ecoupon_sn_string SHOULD be in this format: "11122bwe" * **廠商代碼** `partner_prefix=[string]` * **產品圖檔 1X1** `prod_images_ratio1x1=[string]` - ratio 為 1:1 的圖, * **票券起始日** `start_date=[string]` * **票券截止日** `end_date=[string]` * **票券名稱** `ecoupon_name=[string]` * **顯示標籤** `display_label=[string]` - This field is for this e-coupon displaying (in order) on app. Please be careful, if the value is not valid, then this e-coupon won't be allowed to display on app. - valid value: 兌換券 | 折價券 * **底部顯示** `foot_note=[string]` - The '注意事項' area in app * **描述** `description=[string]` - The description of this e-coupon. It is valid for the value is '' (empty string). * **交易序號** `transationId=[string]` - 賦予此次入劵交易一個 unique string #### **Optional:** * **活動網址** `activity_url=[string]` - The URL which app will go when '前往活動頁' button is clicked. If the value is '' (empty string), then the button won't show. * **批次序號** `batch_sn=[string]` - 同一批序號可以賦予一個 unique string ,例如同一天發的 / 同一系列的 / 同一批生產的,可作為日後查詢分析使用 **範例** ```json { encryptedData: "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" } 解密後: { "user_id": "1234567890", "ecoupons": [ { "ecoupon_sn_string": "eventid_productid_003", "sn_type": "NO_CODE", "partner_prefix": "tw_fetnet", "prod_images_ratio1x1": "https://prodrateplanplatform.blob.core.windows.net/public/product_RPP_Product201021110627750/productPic1.jpeg", "start_date": "2022-07-01", "end_date": "2022-12-31", "ecoupon_name": "10/10活動-快樂水", "display_label": "兌換卷", "foot_note": "申辦本專案合約生效後,申辦者可得:星巴克即享券32杯咖啡組合。商品服務將於次月底前,依申辦時登記個人資訊而配送,若對星巴克即享券使用上有疑問,可洽宜睿之客服電話 (02)6639-1012 或email(ticketxpress-cs-tw@edenred.com)查詢。商品服務將以簡訊通知兌換序號。票券有效期:宜睿智慧即享券產出後六個月。本商品電子兌換憑證係由星巴克提供服務。本商品電子兌換憑證可於指定兌換期限內至限定星巴克門市兌換,除部份公告不適用門市外,恕不得更換現金或其他商品,禁止轉讓、轉售與退換貨,不適用於外送外賣及預訂服務。公告不適用門市列表連結:https://www.edenred.com.tw/STARBUCKS/store.html折扣、優惠、兌換星禮程回饋與優惠、各行銷活動恕不合併使用,兌換品項依各門市現貨為準。若有憑證兌換問題,可撥打服務專線02-66391012。本商品電子兌換憑證每次交易可兌換5張。若於兌換前查詢或取消使用,序號將被鎖定10分鐘,請於10分鐘之後再進行兌換。本商品電子兌換憑證可兌換券上所載之指定商品 ,兌換時不開立發票。本商品電子兌換憑證僅限兌換一次,不得重複使用,因商品電子兌換憑證為不記名,任何人持有皆可兌換,請自行妥善保管,如遭他人盜用,不再補發。本商品電子兌換憑證,請勿擅自偽造、變造以免受罰。", "activity_url": "", "description": "活動當天,請由現場人員進行核銷後才可取水。", "batch_sn":"auto-dispatcher-xx01", "transationId": "20221027XXXXX" } ] } ``` encryptedData = CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(apiKey),{ "iv": CryptoJS.enc.Utf8.parse(apiKey), "mode": CryptoJS.mode.CBC, "padding": CryptoJS.pad.Pkcs7 }).toString(); ### 失敗範例 ```json { "errCode": "101", "errMsg": "Invalid request", "errDetail": "" } ``` --- # Appendix. 錯誤碼列表 | errCode | errMsg | errDetail | | -------- | -------- | -------- | | 00 | | | | 101 | Invalid request | | | 102 | Internal server error | | | 124 | Serial number not found | | | 104 | Duplicate coupon prefix and sn | | | 105 | Wrong parameter | |