API Token認證機制

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==
  • SaltKey:用來增加製作簽章(Signature)時的複雜度與安全性,拿這把Key與Token、TimeStamp (時戳)、CipherText(XML參數加密後的密文)組合後產生簽章(Signature)
    • Key長度:32 bytes, 如:S1C1yn72NeW8oBlFojxjSqBkj1TxjwTR
  • KeyVersion:Key的版本號,提供定期更換Key的安全性機制,隨著不同時期提供不同的版本號。

SCM 申請畫面

圖片連結


API Token認證流程 #

URI採用以下的格式:

認證流程

圖片連結


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。

呼叫API

圖片連結


回傳代碼: #

ErrorCode ErrorMessage
40001 時戳過期
40002 簽章驗證失敗
40003 身分驗證失敗
40004 解密失敗
40005 參數格式錯誤
50001 時戳header不存在
00000 成功
99999 失敗 (含原因)

API 範例 — Query stock #

Note:

  • 請注意,商品編號為YAHOO對於商品(SKU)唯一的編號;並不是[賣場編號]或[供應商料號]

API 範例

圖片連結


API呼叫格式範例“查詢”Stock資訊

呼叫資訊:

  • 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
}