想要使用 API,当然就是准备符合他们要求的东西!(要求如下图)
首先把 Python 用来发 HTTP Request 的 module 装起来~
pip install requests
接着一样使用昨天的例子,测试看看是否可以拿到 Nonce (第四项)
https://apisbx.sinopac.com/funBIZ/QPay.WebAPI/api/Nonce
这个是用来取得 Nonce 的网址
必要的参数只有 ShopNo
import requests
import json
def getNonce():
shop_no = '<your-shop-no>'
nonce_url = 'https://apisbx.sinopac.com/funBIZ/QPay.WebAPI/api/Nonce'
nonce_data = {
'ShopNo': shop_no
}
# 注意是 JSON format
r = requests.post(nonce_url, json=nonce_data)
return json.loads(r.content)['Nonce']
print(getNonce())
你应该会拿到一串类似下面的东西~
NjM3NjY5NjU5NjU3MDcuMjpiNGYzNGU1NGU2YWM2M2E0OTI4ZGIzOWVhMDA4NGYwOGEwMTUyYmQ2MTQzMjlkMzZlZjk2OTc2MzE2OTMyNmVk
永丰那边会验证 Nonce 的时效性(60 秒)以及来源 IP,确保每次要求来源是一致,所以任何有关 Nonce 的操作都是要 60 秒内完成!
但是今天我要说的没有这麽简单,如果要使用 API,还需要产出以下几个东西
首先是算出 Hash ID
计算方式是
(a1 XOR a2) + (b1 XOR b2)
然後全部转成大写
def calcHashID():
# 这是 Spec 上面的例子,可以换成自己的 hash
a1 = 0x4D9709D699CA40EE
a2 = 0x5A4FEF83140C4E9E
b1 = 0xBC74301945134CB4
b2 = 0x961F67F8FCA44AB9
# [2:] 是把 0x 去掉用的
hash_id = hex(a1^a2)[2:]+hex(b1^b2)[2:]
return hash_id.upper()
接着是用 Nonce 算出 AES-CBC 使用的 IV
计算方式是将取得的 Nonce 值做 SHA256 加密(?)後,再将英文转换成大写取字串右边 16 码长度
小提醒:永丰 Spec 写加密,但是 Hash 其实不是加密哦~
import hashlib
def calcIV(nonce):
s = hashlib.sha256()
s.update(nonce.encode('utf-8'))
h = s.hexdigest()
return h[-16:].upper()
今天就先这样,先预告明後天会有更多程序码
明天是关於 API JSON 以及 Sign
後天是关於 AES-CBC 的实作
明天见!
>>: [烧烤吃到饱-4] 烧肉众精致炭火烧肉-台中太平店 #中秋节烤肉精选店家
古语有云:「岁有凶穰;故谷有贵贱;令有缓急;故物有轻重。」旨在告诉後人,做任何事情,一定要先搞清楚状...
我今年 46 岁,属於在战後婴儿潮之後的所谓的 X 世代。在 ALPHA Camp,我每天需要跟不...
先前是我个人习惯用法,当然这篇主轴其实是入门CMS跟SEO的自我挑战经过分享,所以还是回归一下来说明...
简短自我介绍 大家好!我是Marshal,目前还是一位在校大学生,就读资讯相关科系。 为什麽会想选这...
这几天研究下来,发现有三个词汇很让人搞不懂,也就是人工智慧(Artifical Intellig...