File size: 1,923 Bytes
e28d550
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import requests
import hashlib
import hmac
import base64
import time
import uuid
import random
  
# η”Ÿζˆζ΅ζ°΄ε·
def generate_serial_number():
    uid = uuid.uuid4()
    serial_number = uid.hex[:32]
    return serial_number
  
# θŽ·ε–ιšζœΊη 
def generate_random_code(length=5):
    characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    code = ""
    for _ in range(length):
        code += random.choice(characters)
    return code
  
# η”Ÿζˆη­Ύεε’Œζ—Άι—΄ζˆ³
def generate_signature(scene_id, request_path, app_secret, random_key):
    timestamp = str(int(time.time() * 1000))
    sign_string = f"{scene_id}&{timestamp}&{request_path}"
    secret_key = app_secret + random_key
    hmac_sha256 = hmac.new(
      secret_key.encode(), 
      sign_string.encode(),
      hashlib.sha256
    ).hexdigest().encode()
    signature = random_key + base64.b64encode(hmac_sha256).decode()
    return signature, timestamp
  
class AiHelperClient:
    def __init__(self, base_url, app_secret, scene_id):
        self.base_url = base_url
        self.app_secret = app_secret
        self.random_key = generate_random_code()
        self.scene_id = scene_id
        self.session = requests.Session()
  
    def post(self, endpoint, data):
        signature, timestamp = generate_signature(
            self.scene_id,
            endpoint,
            self.app_secret,
            self.random_key
        )
  
        url = f"{self.base_url}{endpoint}"
        headers = {
            'Content-Type': 'application/json',
            'x-signature': signature,
            'x-timestamp': timestamp
        }
  
        try:
            response = self.session.post(url, json=data, headers=headers)
            response.raise_for_status()
            return response.json()
        except requests.RequestException as e:
            return None