一、參數要求:
{
appId:應用在后台創建應用時分配的應用編號,與應用密鑰一一對應
sign:按照當前請求參數名的字母序進行升序排列(排序時區分大小寫,除sign外,其它值不為空的參數都參與簽名), 將所有參數值組合以key=value 的形式拼成一個新字符串,不同參數值“&”之間沒有任何分隔符,最后加上對應的簽名密鑰appKey 進行簽名運算。 如進行MD5簽名運算的串為 MD5(key1=value1&key2=value2appKey)
time: 1970年以來的毫秒數,每次請求都要更新,有效期5分鍾
version: 接口版本號,目前默認寫1.0
}
二、請求path示例:http://test.com/**/**?account=string&appId=string&sign=string&time=0&version=string
三、代碼實現:
# coding=utf-8 from urllib.parse import urlencode from collections import OrderedDict import hashlib from base_utils.crypte import Md5 import time params = { "version": "1.0", "account": "zhangsan", "appId": "gyAppId", "time": int(time.time() * 1000) } def md5(self, data): self.md5 = hashlib.md5() self.md5.update(data.encode("utf-8")) return self.md5.hexdigest() def url_join(server, uri, appkey, params): args = OrderedDict() for key in sorted(params.keys()): args.update({key: params[key]}) nparams = urlencode(args) args = urlencode(args) + appkey sign = Md5().md5(args) prefix, suffix =nparams.split("&time=") print("".join([server, uri, '?',prefix, "&sign=", sign, "&time=", suffix])) return "".join([server, uri, '?',prefix, "&sign=", sign, "&time=", suffix])