金蝶api对接沙箱环境python代码调试
根据官网文档加密规则
import time
import random
import hmac
import hashlib
import base64
import requests
import urllib.parse# 基础参数
method = "GET"
path = "/jdy/v2/scm/pur_order"
base_url = "https://api.kingdee.com"
full_url = base_url + path
client_id = "323410"
client_secret = "c3b1d8796c242342b05ef5275c4242bca"
nonce = str(random.randint(1000000000, 9999999999))
timestamp = str(int(time.time() * 1000))# 构建签名原文
encoded_path = urllib.parse.quote(path, safe='').replace("+", "%20") # 一次URL编码
params = "" # 无参数
sign_string = f"{method}\n{encoded_path}\n{params}\nx-api-nonce:{nonce}\nx-api-timestamp:{timestamp}\n"# HMAC-SHA256加密(使用 client_secret 作为密钥),再 Base64 编码
hmac_sha256 = hmac.new(client_secret.encode(), sign_string.encode(), hashlib.sha256).hexdigest()
signature = base64.b64encode(hmac_sha256.encode()).decode()# 构建请求头
headers = {"Content-Type": "application/json","X-Api-ClientID": client_id,"X-Api-Auth-Version": "2.0","X-Api-SignHeaders": "X-Api-Nonce,X-Api-TimeStamp","X-Api-Nonce": nonce,"X-Api-TimeStamp": timestamp,"X-Api-Signature": signature,"X-GW-Router-Addr": "https://tf.jdy.com","app-token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHQiOnsiYWNjb3VudElkIjoiMTc0NTkxMTI4NTE4MTA3NTM2rwqrb3VwTmFtZSI6Im5zLXQ1NCIsImFwcF9rZXkiOiJwaWpZQzrqrIsInRlbafwsffewrrNzkxMDYyOTY5MTQ3MTEiLCJ1c2VrqwrtZSI6InUxMzE0NTczNjY2MSJ9LCJncnAiOiJucy10NTQiLCJleHAiOjE3NDY2NzcyMTksImFpZCI6IjE3NDU5MTEyODUxOrwzUzNjgiLCJpYXQiOjE3NDY1OTA4MTl9.eH5zFMPyfn4ERfgHDdvGs5rx5LxrxdJ5ny6U_uSnXJ8" # 如果你已有 app-token,请替换
}# 发起GET请求
response = requests.get(full_url, headers=headers)# 输出响应结果
print("随机数:", nonce)
print("时间戳:", timestamp)
print("请求地址:", full_url)
print("组装签名原文:", sign_string)
print("授权签名:", signature)
print("状态码:", response.status_code)
print("响应内容:", response.text)