iT邦幫忙

2021 iThome 鐵人賽

DAY 4
1

圖 4-1
圖 4-1: 各欄位資料範例

安全簽章的要件,我們已經拿到 Nonce 及 HashId 了,接下來還需要內文雜湊。我們來看看 API 文件對於取得內文雜湊的描述。

圖 4-2
圖 4-2: 文件第 19 頁。

文件這一段的重點為,空值的參數(空白、空陣列)以及多節點參數(指的是值非為字串、數字,其值為還有下一層的陣列或物件)都必須移除,接著對欄位名稱進行排序。

訊息內文

真正要傳給豐支付 API 的訂單資料欄位,稱為訊息內文。

原始資料結構

圖 4-3
圖 4-3: 範例 - 建立訂單的資料結構。

訊息內文原始的資料如上圖,經過處理後如下圖。

雜湊處理

圖 4-4
圖 4-4: 範例 - 排序及去除空欄位及多節點欄位。

接著把過濾後的資料轉成網址型態的字串,但不要有 RFC1738 或 RFC3986 編碼。

圖 4-5
圖 4-5: 範例 - PHP 函式參考。

PHP 的開發者可以使用 http_build_query 函式將陣列轉換為網址型態的字串,再使用 urldecode 還原為未編碼字串。

圖 4-6
圖 4-6: 範例 - 內容雜湊後字串。

如此一來,就得到了訊息內文的雜湊了。

流程總結

總結今天的文章,訊息內文雜湊流程可以簡化為下圖:

圖 4-7
圖 4-7: 訊息內文雜湊流程。

在得到訊息內文雜湊的字串後,搭配前兩天拿到的 Nonce 及 HashId,要來計算出安全簽章 Sign 了。明天的文章,一樣會有詳細的圖文說明如何使用這三段字串資料去算出安全簽章 Sign,我們明天見囉 ^^


本文更新於筆者的 TerryL 部落格,Day 4 - 安全簽章: 訊息內文雜湊,有興趣可前往閱讀及討論。


上一篇
Day 3 - 安全簽章: HashId 計算
下一篇
Day 5 - 安全簽章: 取得 SHA256 加密後的 Sign 值
系列文
永豐金 API - 豐支付 PHP SDK 設計及 WooCommerce 電商串接實戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
大河
iT邦新手 3 級 ‧ 2021-09-18 21:10:39

第一次知道 http_build_queryrawurldecode 函數,
真的很方便,不用自己拆跟組,感謝分享 :D

Terry L. iT邦研究生 3 級 ‧ 2021-09-23 10:07:08 檢舉

沒注意到 http_build_query 把空白字元轉成 + 號,所以改用 改用 urldecode,晚點更新一下內文。

之前用 http_build_query 來組超方便,但不知道它會把組出來的結果 encode,卡了好久,後來還是手動一個一個處理,現在才知道有 urldecode 可以用XD,感謝大大分享!

Terry L. iT邦研究生 3 級 ‧ 2021-09-24 15:33:42 檢舉

https://www.php.net/http_build_query 預設是 PHP_QUERY_RFC1738,把空白轉成 + 號,如果是 PHP_QUERY_RFC3986 則轉成 %20,才使用 rawurldecode 解。一般情況下用這個空白被轉成什麼比較沒那麼在意,只是在這種金流串接加密的情況下,一個字元不同,加密後的雜湊就不同,也才會遇到這種情況。

我要留言

立即登入留言