iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
永豐金融APIs

串接生活與金融 API系列 第 2

計算API所需要的參數: Hash ID

看著規格書,所需要的參數還蠻多的

https://ithelp.ithome.com.tw/upload/images/20210902/20130033upiQzTW6OZ.png

今天就先用 Python 來求算 Hash ID!

依據官方的說明文件:

Hash ID是透過位元運算(XOR)將四組Hash計算產出的,將A1/A2以XOR運算所得的字串,再與B1/B2以XOR運算出來的字串,二個相加後將英文轉換為大寫,為長度為32的字串(例: 17D8E6558DC60E702A6B57E1B9B7060D)。

在 Python 中實作起來如下:


def strToHexByte(s):
    return int(s,base=16)

A1 = "4D9709D699CA40EE"
A2 = "5A4FEF83140C4E9E"
B1 = "BC74301945134CB4"
B2 = "961F67F8FCA44AB9"

# 透過 ^ 進行 XOR 計算
XOR1 = strToHexByte(A1) ^ strToHexByte(A2)
XOR2 = strToHexByte(B1) ^ strToHexByte(B2)

# 將 XOR 的結果(數字) 轉成 hex
hex_XOR1 = hex(XOR1)
hex_XOR2 = hex(XOR2)

# 將字串合併後,再大寫
hash_id = ( hex_XOR1 + hex_XOR2 ).upper()

結果是:
"0X17D8E6558DC60E700X2A6B57E1B9B7060D"
而官方示例中:
"17D8E6558DC60E702A6B57E1B9B7060D"

可以發現多出了"0X"的前置字元,上網查了一下,這是 python 的特性;
官方的 PHP 示例中是不會有這個狀況發生。
所以此處要將上方的程式碼最後一段調整為

# 透過 Python 的  字串[開始位置:結束位置],
# 因為我們不要前面2個符號,所以用 [2:]的方式來截斷文字

hash_id = ( hex_XOR1[2:] + hex_XOR2[2:] ).upper()

這樣得到的結果就會與官方示範完全相同。

天啊! 第2天而已,還有一些參數需要進行類似的計算…
希望能快點進入實戰!


上一篇
利用python取得永豐銀行API的Nonce
下一篇
計算API所需要的參數: IV
系列文
串接生活與金融 API6

尚未有邦友留言

立即登入留言