AiPool 點數系統 API 驗證方式開發手冊
來源文件:
點數系統(Aipool)_API 驗證方式_公版.docx。本文已將示例密鑰、手機號、長 ID 等公開發布不需要的值改為占位符。
變更紀錄
| 版本號 | 作者 | 修訂內容 | 發布日期 |
|---|---|---|---|
| 1.0 | 朱春雷 | 初稿,提供點數相關API初步定義 | 2023-02-19 |
| 1.1 | 朱春雷 | 調整請求參數定義 | 2023-02-21 |
| 1.2 | 朱春雷 | 加入webhook定義 | 2023-02-26 |
| 1.3 | 朱春雷 | 加入api呼叫限制說明 | 2023-02-27 |
| 1.4 | 朱春雷 | 調整點數概念,調整API | 2023-03-07 |
| 1.5 | 朱春雷 | 補上回應參數名稱的屬性說明 | 2023-03-14 |
| 1.6 | 朱春雷 | 調整並加入預計支援的API | 2023-03-16 |
| 1.7 | 朱春雷 | 調整ID規則 單一企業:OpenID 點鑽:AccountID | 2023-03-18 |
| 1.8 | 朱春雷 | 新增變更使用者身份、發送優惠券,查詢帳號、使用者點數總覽,使用者企業列表等API | 2023-03-20 |
| 1.9 | 朱春雷 | 調整範圍查詢店家API,支持圓形查詢與矩形查詢 | 2023-03-30 |
| 1.10 | 朱春雷 | 調整API定義,舊URL規則能可沿用(2023年底失效) 新增激勵賺相關API 新增查詢客戶身分的店家列表API 新增查詢點鑽企業下消費明細API 核對請求參數與返回參數定義 調整範圍查詢僅返回商家列表 新增點數核銷 API 新增點數類型概述說明 | 2023-04-18 |
| 1.11 | 朱春雷 | 新增點數核銷 API 新增兌換激勵賺API | 2023-04-19 |
| 1.12 | 朱春雷 | 調整企業API 策略廠商API使用範圍定義 | 2023-04-26 |
| 1.13 | 朱春雷 | 根據商圈以及集團相關,調整API說明 | 2023-05-18 |
| 1.14 | 朱春雷 | 新增企業用API 查詢用戶關聯 商圈列表 用戶點數總覽 企業生成累點連結(URL) 核銷點數 核銷賺+點 指定核銷 查詢交易紀錄 新增策略整合API 新增UUPON專用API 會員基本訊息API 查詢UUPON消費明細 創建特約店 查詢企業剩餘可用點數 | 2023-05-23 |
| 1.15 | 洪惟信 | 新增企業API 帳號唯一碼查詢 | 2024-04-15 |
| 1.16 | 洪惟信 | 調整帳號唯一碼查詢 | 2024-04-23 |
| 1.16.1 | 洪惟信 | 調整錯誤訊息 | 2024-05-06 |
| 1.16.2 | 許意研 | 新增查詢未生效UUPON點數明細 | 2025-01-15 |
API 驗證方式
概述
點數系統提供API的方式,允許外部系統透過呼叫API方式進行系統整合,本章節主要是說明API呼叫的方式與驗證簽名方式。
呼叫API是需要申請點數平台的租戶,目前僅限由管理員協助創建租戶帳號,取得帳號後,登入點數平台管理後台,選擇自己擁有的企業,到我的應用,建立新的應用。
應用分成四大類:
- 企業應用:單一企業下可以調用的API,包含點數(賺)操作、帳號匯入、點數總覽、點數明細等
- 授權應用:可授權自己的企業API,給予其他平台呼叫
- WebHook 應用:可設定那些指定操作,由系統主動發出WebHook訊息
- 策略合作應用:策略夥伴用的API,比如點點全球,一般企業不會使用到
API 驗證標準原則
連結方式:HTTPS
Method: POST
資料格式:JSON字串
字元編碼:UTF-8
簽名格式:AILE(空一格)AppId:Signature
AILE:固定
AppId:透過點數後台建立的應用APP ID
Signature:加密字串
Base64(HMAC-SHA256(appid+nonce+MD5(requestBody), SecretKey))
nonce:隨機字串,可以使用timestamp
requestBody:請求參數,Array轉成JSON字串,範例:
Array ([userIdType] => 2, [id] => USER_ID_PLACEHOLDER) => JSON 字串
{"userIdType":2,"id":"USER_ID_PLACEHOLDER"}
企業應用資訊(請找業務申請):
應用Id:
秘鑰:
企業ID:
企業編號:
可發行企業點數:點
可發行UUPON點數:點
JavaScript 範例
var hmacPrefix = "AILE"; // 簽名起始字串
var AppId = "APP_ID_PLACEHOLDER"; // appid (點數管理後台取得)
var APIKey = "<APP_KEY>"; // app SecretKey (點數管理後台取得)
var nonce = new Date().getTime(); // 創建隨機值
var requestContentBase64String = "";
var bodyObj = JSON.parse(pm.request.body.toString());
var bodyString = JSON.stringify(bodyObj); //產生要發送的request body字串,並經過了JSON格式化去空格
if (bodyString) {
var md5 = CryptoJS.MD5(bodyString); // 對request body的內容進行MD5加密
requestContentBase64String = md5.toString();
}
var signatureRawData = AppId + nonce + requestContentBase64String; // 將簽名的內容組合
var signature = CryptoJS.enc.Utf8.parse(signatureRawData); //轉換UTF-8格式
var signatureBytes = CryptoJS.HmacSHA256(signature,APIKey); // HmacSHA256加密
var requestSignatureBase64String = CryptoJS.enc.Base64.stringify(signatureBytes); //Base64加密
var hmacKey = hmacPrefix + " " + AppId + ":" + requestSignatureBase64String; // 最終Authorization
// 設置header
pm.request.headers.add({
key: "nonce",
value: nonce
});
pm.request.headers.add({
key: "Authorization",
value: hmacKey
});
// 因body為json,MD5加密的時候已經去除空格,所以確保發送的內容和簽名的body內容一致,需重新設置了body的資料
pm.request.body.raw = bodyString