跳至主要内容
簽名生成
1. 初始化配置與參數
2. 整合簽名參數
3. 排序並拼接參數
4. 計算請求體 MD5
5. 構建簽名字串
6. 編碼與生成簽名
7. 生成簽名

Python

1 import hmac
2 import hashlib
3 import json
4 import uuid
5 from datetime import datetime, timezone
6 from urllib.parse import quote
7 import base64
8
9 # Initialize Configuration and Parameters
10 optional_api_endpoint = "<api_endpoint>"
11 app_key = "<your_app_key>"
12 app_secret = "<your_app_secret>"
13
14 # Request URI
15 uri = '/openapi/account/list'
16
17 # Signature Header
18 headers = {
19 'x-app-key': app_key,
20 'x-signature-algorithm': 'HMAC-SHA1',
21 'x-signature-version': '1.0',
22 'x-signature-nonce': uuid.uuid4().hex,
23 'x-timestamp': datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'),
24 'host': optional_api_endpoint,
25 'Content-Type': 'application/json'
26 }
27
28 query_params = {
29 }
30
31 body_params = {
32 }
33
34
35 def generate_signature(uri, query_params, body_params, headers, app_secret):
36 query_params = query_params or {}
37 # Integrate signature parameters
38 params_dict = query_params.copy()
39 # Parameters in the Signature Header excluding the x-signature parameter.
40 params_dict.update({
41 'x-app-key': headers['x-app-key'],
42 'x-signature-algorithm': headers['x-signature-algorithm'],
43 'x-signature-version': headers['x-signature-version'],
44 'x-signature-nonce': headers['x-signature-nonce'],
45 'x-timestamp': headers['x-timestamp'],
46 'host': headers['host']
47 })
48
49 # Sort the dictionary from small to large according to the parameter's key
50 sorted_params = sorted(params_dict.items())
51 # Concatenate the sorted parameters into a string
52 param_string = '&'.join([f"{k}={v}" for k, v in sorted_params])
53
54 # Calculate the MD5 of the request body (if any)
55 body_md5 = ""
56 if body_params:
57 body_json = json.dumps(body_params, ensure_ascii=False, separators=(',', ':'))
58 body_md5 = hashlib.md5(body_json.encode()).hexdigest().upper()
59
60 # Build the sign string
61 sign_string = f"{uri}&{param_string}{'&' + body_md5 if body_md5 else ''}"
62
63 # Encode Request Elements
64 encoded_sign_string = quote(sign_string, safe='')
65
66 # Generating Signature
67 # base64(HMAC-SHA1(Part 1 + "&", Part 2))
68 secret = f"{app_secret}&"
69 signature = hmac.new(
70 secret.encode(),
71 encoded_sign_string.encode(),
72 hashlib.sha1
73 ).digest()
74
75 sign_string = base64.b64encode(signature).decode('utf-8')
76 print(f"Signature: {sign_string}")
77 return sign_string
78
簽名生成
透過 HMAC-SHA1 演算法和金鑰計算雜湊值,再對其進行 base64 編碼,得到最終簽名,該簽名用於 API 請求的身份驗證與防篡改驗證
7 Steps
建立並驗證 Token
這段程式碼用於建立並驗證 API 存取令牌(Token),透過呼叫令牌建立介面生成令牌,檢查介面驗證令牌狀態,確保令牌有效可用,為後續 API 操作提供安全存取憑證
5 Steps
下第一筆訂單
快速開始:設定憑證、配置訂單詳情、生成簽名,完成您的第一筆訂單。
7 Steps