py-test/generateSign.py

98 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import json
import time
import uuid
import urllib.parse
import hashlib
# =================== MD5签名计算 ===================
def calculate_md5(param, secret_key):
# Java 规则MD5(secretKey + param)
return hashlib.md5((secret_key + param).encode('utf-8')).hexdigest()
def create_sign(param_map, secret_key):
sorted_keys = sorted(param_map.keys())
parts = []
for key in sorted_keys:
val = param_map[key]
if val is None:
parts.append(f"{key}=")
continue
if isinstance(val, list):
for item in val:
encoded_val = urllib.parse.quote(str(item), encoding='utf-8')
parts.append(f"{key}={encoded_val}")
continue
val_str = str(val)
if key != "REQUEST_BODY_CONTENT":
val_str = urllib.parse.quote(val_str, encoding='utf-8')
parts.append(f"{key}={val_str}")
param = "&".join(parts)
# Java逻辑: .replaceAll("\\s", "")
param = "".join(param.split())
print("参数明文 param:", param)
sign = calculate_md5(param, secret_key)
print("生成签名 sign:", sign)
return sign
# =================== Python 主程序 ===================
if __name__ == '__main__':
platform_ifc_system_code = "9f5bbb73710c4a6a8923c278ffa00d50"
systemCode = "57395d2bc668496c9c57d8f2b19bd516"
appId = "57395d2bc668496c9c57d8f2b19bd516"
secret_key = "lC4&NvBQcnvgH@i+io=k#K3HO5aCiuHD"
ts = str(int(time.time() * 1000))
randomString = uuid.uuid4().hex
selector = {
"searchKeys": ["b353614a47e2425a8a8885d270267407", "3DC1B33E1B5B431E99FA163BF9E86E6A", "9cb864213c6f48ceaf90e98e7ca375e9"],
"userType": "0",
"hasCascade": True
}
request_body_json = json.dumps(selector, separators=(',', ':'))
param_map = {
"systemCode": systemCode,
"timestamp": ts,
"nonce": randomString,
"REQUEST_BODY_CONTENT": request_body_json
}
sign = create_sign(param_map, secret_key)
ifcUrl = "https://dpc.cet.cnooc/prod-api/cenertech-interface-center/IFC2"
apiPath = "/userListByDeptSearch"
fullUrl = f"{ifcUrl}/{platform_ifc_system_code}{apiPath}"
curl = f"""
curl -X POST "{fullUrl}" \\
-H "Content-Type: application/json" \\
-H "systemCode: {systemCode}" \\
-H "timestamp: {ts}" \\
-H "nonce: {randomString}" \\
-H "sign: {sign}" \\
-H "App-Id: {appId}" \\
-d '{request_body_json}'
"""
print("\n===== 最终 curl 请求 =====\n")
print(curl)