For the complete documentation index, see llms.txt. This page is also available as Markdown.

簽名生成

提示 (TIP)

商戶可按照以下步驟生成請求的簽名,平台在收到請求後會進行簽名驗證。如果簽名驗證失敗,請求將被拒絕,並返回相應的狀態碼 (status code)。

準備工作 (Preparation)

商戶需註冊商戶號,並透過商戶後台創建支付應用,以獲取 APP_IDAPP_SECRECT

適用條件 (Condition)

本文檔中所有 POST 方法的接口都需要驗證簽名,其他接口暫時不需要驗證。

生成步驟 (Generation)

簽名字串共有四行,每行一個參數。行尾以 \n(換行符,ASCII 編碼值為 0x0A)結束,最後一行不添加 \n。如果參數本身以 \n 結尾,您仍需額外附加一個 \n

URL\n
Request timestamp\n
Request random string\n
Request message body

訂單查詢 (order inquiry) 為例。

第一步是獲取請求的絕對 URL,並移除域名部分,得到參與簽名的 URL。如果請求中包含查詢參數,需在 URL 後面追加 '? ' 及相應的查詢字串。

/v1/transaction/query

第二步是獲取發起請求時系統的當前時間戳(毫秒)。即從 1970 年 1 月 1 日 00:00:00 GMT 到現在的總秒數,作為請求時間戳。平台會拒絕處理很久以前發出的請求,請確保商戶自身系統時間的準確性。

第三步是生成一個 32 位的 隨機字串 (random string)

第四步是獲取請求中的消息體 (request body)。

第五步是根據上述規則構造請求簽名字串,如下所示:

加密 (Encryption)

以 javascript 加密過程為例:

加密後的示例:

拼接 (Concatenate)

簽名資訊的拼接格式如下:

app_id=APP_ID, mch_id=商戶號, nonce_str=第三步生成的隨機字串, timestamp=第二步生成的時間戳, signature=加密後的簽名字串

HTTP 標頭 (HTTP header)

文檔 API 透過 HTTP Authorization 標頭傳遞簽名。Authorization 由兩部分組成:認證類型簽名資訊認證類型 目前僅支援 TTPAY-AES-256-ECB

Authorization 標頭如下:(註:因排版可能包含換行,此為示例,實際數據應在同一行)

最後,我們可以創建一個包含簽名的 HTTP 請求。

示例代碼 (Demo code)

最後更新於