Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import time
- import requests
- import hashlib
- import urllib.parse
- API_ID = "" # Replace with your actual API ID
- API_SECRET = "" # Replace with your actual API Secret
- API_BASE_URL = "https://www.accountspider.com" # Replace with the actual base URL from your docs
- def generate_signature(data: dict, secret: str) -> str:
- """
- Replicates the provided PHP signature logic:
- - Remove 'sign' key if present
- - Sort the parameters by key
- - Remove empty-string or array/dict values
- - Append '&key=secret'
- - MD5 the resulting string
- """
- data.pop('sign', None)
- sorted_items = sorted(data.items(), key=lambda x: x[0])
- filtered = []
- for k, v in sorted_items:
- # exclude empty or complex values
- if v == '' or isinstance(v, (list, dict)):
- continue
- filtered.append((k, v))
- query_string = urllib.parse.urlencode(filtered)
- query_string += f"&key={secret}"
- signature = hashlib.md5(query_string.encode('utf-8')).hexdigest()
- return signature
- def post_form(endpoint: str, data: dict) -> dict:
- """
- Helper function to:
- 1) Generate signature
- 2) Send POST with form data
- 3) Return the server JSON response
- """
- # Generate signature
- signature = generate_signature(data, API_SECRET)
- # Prepare headers
- headers = {
- "Api-Id": API_ID,
- "Api-Signature": signature,
- "Content-Type": "application/x-www-form-urlencoded",
- }
- # Send form-encoded POST
- response = requests.post(endpoint, data=data, headers=headers)
- return response.json()
- # 1. 获取全部货源列表 - Get all items
- def get_items() -> dict:
- url = f"{API_BASE_URL}/plugin/open-api/items"
- data = {} # If no specific body params are required, pass an empty dict
- return post_form(url, data)
- # 2. 单独获取某个商货源信息 - Get single item
- def get_item(item_id: int) -> dict:
- """
- Body param: id (int)
- """
- url = f"{API_BASE_URL}/plugin/open-api/item"
- data = {"id": item_id}
- return post_form(url, data)
- # 3. 获取SKU库存数量 - Get SKU stock
- def get_sku_stock(sku_id: int) -> dict:
- """
- Body param: sku_id (int)
- """
- url = f"{API_BASE_URL}/plugin/open-api/sku/stock"
- data = {"sku_id": sku_id}
- return post_form(url, data)
- # 4. 获取SKU当前状态 - Check if SKU can be purchased
- def get_sku_state(sku_id: int, quantity: int) -> dict:
- """
- Body params:
- sku_id (int)
- quantity (int)
- """
- url = f"{API_BASE_URL}/plugin/open-api/sku/state"
- data = {
- "sku_id": sku_id,
- "quantity": quantity
- }
- return post_form(url, data)
- # 5. 下单(进货) - Place an order
- def place_order(sku_id: int, quantity: int, trade_no: str) -> dict:
- """
- Body params:
- sku_id (int)
- quantity (int)
- trade_no (string, must be 24 digits)
- async_url (string, optional)
- """
- url = f"{API_BASE_URL}/plugin/open-api/trade"
- data = {
- "sku_id": sku_id,
- "quantity": quantity,
- "trade_no": trade_no, # must be 24 digits
- }
- return post_form(url, data)
- # 6. 订单查询 - Query order
- def query_order(trade_no: str) -> dict:
- """
- Body param:
- trade_no (string, must be 24 digits)
- """
- url = f"{API_BASE_URL}/plugin/open-api/query"
- data = {
- "trade_no": trade_no
- }
- return post_form(url, data)
- def generate_order_number() -> str:
- """
- Generate a 24-digit order number for testing purposes.
- """
- # current timestamp (10 digits) + random 14 digits
- return str(int(time.time())) + str(random.randint(10000000000000, 99999999999999))
- def main():
- """
- Demo usage:
- 1) Get all items
- 2) Get a single item
- 3) Get SKU stock
- 4) Check SKU purchase state
- 5) Place an order
- 6) Query that order
- """
- # 1. Get all items
- items_response = get_items()
- print("All Items:", items_response)
- # 2. Get single item (example item_id = 123)
- item_response = get_item(item_id=163)
- print("Single Item:", item_response)
- # 3. Get SKU stock (example sku_id = 456)
- stock_response = get_sku_stock(sku_id=139)
- print("SKU Stock:", stock_response)
- # 4. Check SKU state
- state_response = get_sku_state(sku_id=139, quantity=2)
- print("SKU State:", state_response)
- # 5. Place an order
- # trade_no MUST be a 24-digit string
- order_trade_no = generate_order_number()
- order_response = place_order(
- sku_id=139,
- quantity=2,
- trade_no=order_trade_no
- )
- print("Place Order:", order_response)
- # 6. Query that order
- query_response = query_order(trade_no=order_trade_no)
- print("Query Order:", query_response)
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment