API Token認證機制 #
API Token申請流程 #
申請流程說明
- 請登入您的SCM供應商作業平台,提出使用APIKey的申請。
- 請詳細閱讀並勾選APIKey使用同意書,送出申請後系統則自動產生APIKey。
- 完成申請後,於SCM供應商作業平台即可查詢到API Key相關資訊。
API Token申請流程 (SCM 申請畫面) #
SCM 申請說明
請於完成申請後,登入SCM供應商作業平台查詢APIKey,您將獲得以下資訊:
- Token:一組唯一識別的代號(如:Supplier_1234),代表申請單位的身份(帳號)。
- ShareSecret:像是使用者密碼,拿這個密碼將資料做加密(Encrypt)及簽章(Signature)。
- Share Secret分成兩個部份:
- Key長度: 32 bytes將byte[32]轉成Base-64格式如下:
- ibNvk6aIHTQ0Ganjk18WlLNi5MMT4c3woZ9y/wWWrmA=
- IV 長度: 16 bytes將byte[16]轉成Base-64格式如下:
- dDsQ94tyr8g9z01HQ8GCeQ==
- Key長度: 32 bytes將byte[32]轉成Base-64格式如下:
- SaltKey:用來增加製作簽章(Signature)時的複雜度與安全性,拿這把Key與Token、TimeStamp (時戳)、CipherText(XML參數加密後的密文)組合後產生簽章(Signature)
- Key長度:32 bytes, 如:S1C1yn72NeW8oBlFojxjSqBkj1TxjwTR
- KeyVersion:Key的版本號,提供定期更換Key的安全性機制,隨著不同時期提供不同的版本號。
API Token認證流程 #
URI採用以下的格式:
- EndPoint: https://tw.scm.yahooapis.com/scmapi/api/{Group}/{Action}
- Group:功能群組,如GdStock、Product、…
- Action:執行動作,如GetQty
- Method: POST / GET / PUT
API Token認證方式 #
何謂認證?
- 認證是對於發送request的一方的身份識別及檢核的一段處理程序。透過認證的處理程序讓接收與發送request的雙方可以基於信任的基礎,讓應該受到保護的資料可以被存取。
主參數 (XML或JSON)加密:
- 將參數的明文(Plain Text)進行AESRijndael256(CBC)加密成密文(Cipher Text)。
產生Timestamp:
- 當下時間 –1970/1/1 00:00:00 取秒數的整數部份
- C#為例:
- (int) (DateTime.Now.ToLocalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds
產生簽章:
- 將Timestamp、Token、Salt Key、Cipher Text字串串接起(注意順序),進行HMAC-SHA512運算。
呼叫API:
- Header分別傳入Token、Signature、Timestamp、Key Version、SupplierID(無順序)Body傳入加密過的參數密文,利用POST呼叫API。
回傳代碼: #
ErrorCode | ErrorMessage |
---|---|
40001 | 時戳過期 |
40002 | 簽章驗證失敗 |
40003 | 身分驗證失敗 |
40004 | 解密失敗 |
40005 | 參數格式錯誤 |
50001 | 時戳header不存在 |
00000 | 成功 |
99999 | 失敗 (含原因) |
API 範例 — Query stock #
Note:
- 請注意,商品編號為YAHOO對於商品(SKU)唯一的編號;並不是[賣場編號]或[供應商料號]
API呼叫格式範例“查詢”Stock資訊
- 範例程式下載點:(C#, JAVA, PHP)
呼叫資訊:
- Request Body需以密文傳遞
- 收到的Response為密文需要解密還原才能得到正確的資訊
Request/Response Sample
POST /scmapi/api/GdStock/GetQty
api-token: Supplier_1234,
api-supplierid: 1234,
content-type: application/json,
accept: application/json,
api-signature: 7DF41438E5F978DDAAED741B81574E9CF70A70F6C04928F56F4470A962D1684DFA5F76DCBB92449DC8A445E670626E30118DAF0E06F76DDAC9CD76676F4130E3,
api-timestamp: 1688377263,
api-keyversion: 3
{
"ProductId": 28675171
}
Q9Wj5OEYMDPZzOUtZm7Pyp/nYy1ZHKPOe1RiqdFmIgM=
Wo59QNghjHFYU/qTLuZf/w==
{
"Qty": 952
}