噩耗~早上起床发现昨天上传没成功,铁人中断了!!不过还是继续写下去吧!
中秋节连假第二天,今天开始串接实测罗~
python使用的环境如下,不过测试时有在不同版本中跑过,都能够运行
>python -V
Python 3.8.5
那就直接开始测试罗,以下测试都使用规格书中的参数。
需要特别加工的部份为Nonce、Sign以及Message。
项次 | 参数 | 说明 |
---|---|---|
1 | Version | 目前请固定传值 1.0.0 |
2 | ShopNo | 按照取得的商店名称 |
3 | APIService | 填入永丰API功能名称 |
4 | Nonce | 向永丰API POST取得之60秒内有效的时间戳记。 |
5 | Sign | 交易讯息内文排序杂凑後加Nonce值加HashID再做Sha256运算转大写产生Sign字串。 |
6 | Message | 可还原的原始交易讯息内文 +HashID(32位元值 )+IV(16位元值三要素进行AES CBC 加密产生。 |
建置需产出以下项目:
项目|说明 如何取得
项目 | 说明 |
---|---|
APIService | API 服务的名称。 |
Hash | 产出运算值 (Hash ID) 以计算出安全签章及讯息加密用。 |
Nonce | 由商户固定 IP 发动,使用 API 向 funBiz 取得60 秒内有效的时间戳记 。 |
HashID | 由四组 Hash 值透过两两 XOR 位元运算再相加的 32 位元字串 。 |
规格书说明:
Hash ID 是透过位元运算(XOR)将四组 Hash 计算产出的,将 A1/A2 以 XOR 运算
所得的字串,再与 B1/B2 以 XOR 运算出来的字串,二个相加後将英文转换为大写,为
长度为 32 的字串。
程序如下:
A1 = "4D9709D699CA40EE"
A2 = "5A4FEF83140C4E9E"
B1 = "BC74301945134CB4"
B2 = "961F67F8FCA44AB9"
# XOR
OR1 = int(A1,base=16) ^ int(A2,base=16)
OR2 = int(B1,base=16) ^ int(B2,base=16)
hashID = ( format(OR1, 'X') +format(OR2, 'X') )
print("hashID => ",hashID)
结果
NjM3Njc0OTAxMDI1NzQuOTo3NzI1MDBlMWEyMzc3YTk2YWIxNjI0MGE3ZTJjN2VmMDIxYTkxZjlkZDhhMDE1NmVhZDY4MDcyYzUyODQ0ODA1
其中值得注意的是若下hex(OR1),产出的字串头尾会有0x 70,而format(OR1, 'X') 则不需要处理
hex(OR1) 头尾多出来的 0x & 70。
商户透过POST 永丰提供的Nonce API,永丰会验证该Nonce值的时效性(60秒及取得来源(IP),以确保每次要求来源是一致。
使用POSTMAN软件测试
查询方式参考以下图片,如之前所提,在POSTMAN测试API,只要填入相对应的参数及设定,一键搞定测试。
python串接测试
pip install requests
Shop_No = {'ShopNo':"BA0026_001"}
def getNonce(Shop_No):
#print(Shop_No["ShopNo"])
URL ="https://apisbx.sinopac.com/funBIZ/QPay.WebAPI/api/Nonce"
res = requests.post(url = URL, json = Shop_No )
print('status_code => ',res.status_code)
# print('status_code',res.json())
Nonce=res.json()["Nonce"]
res.close()
return Nonce
print(getNonce(Shop_No))
status_code => 200 NjM3Njc0OTAxMDI1NzQuOTo3NzI1MDBlMWEyMzc3YTk2YWIxNjI0MGE3ZTJjN2VmMDIxYTkxZjlkZDhhMDE1NmVhZDY4MDcyYzUyODQ0ODA1
明天接着做Sign後半段的产制罗
数学上,文氏图常用作集合论的表达工具,在做资料库查询的时候,其实也常常使用到这样的概念,交集、差集、...
在 2000 年代初期,内部稽核团队的典型工作重点是完成对特定财务和运营领域的传统周期性稽核——这一...
哈罗~ 我们前几天提到, 可以利用网路监听、密码破解来取得使用权限, 今天我们要来介绍可以做远端控制...
接下来要来讲些Android 的部分,因为种种因素所以必须处理一些android专案,但因为我没有正...
开门见山 是code import picamera camera = picamera.PiCam...