Я пытаюсь создать рыночный ордер на покупку на сайте crypto.com через API. Глядя на документ, кажется, что параметр json для отправки в функцию почтового запроса выглядит следующим образом:
import time
import hmac
import hashlib
import json
import requests
from typing import Dict, Any
def create_signature(method: str, req_id: int, api_key: str, params: Dict[Any, Any],
nonce: int, api_secret: str) -> str:
# Convert all numeric values in params to strings
params_str = {k: str(v) if isinstance(v, (int, float)) else v
for k, v in params.items()}
# Sort parameter keys in ascending order
sorted_params = dict(sorted(params_str.items()))
# Create parameter string (key + value, no spaces or delimiters)
param_string = ''.join(f"{key}{value}" for key, value in sorted_params.items())
# Create the message string: method + id + api_key + parameter_string + nonce
message = f"{method}{req_id}{api_key}{param_string}{nonce}"
# Create HMAC-SHA256 signature
signature = hmac.new(
api_secret.encode('utf-8'),
message.encode('utf-8'),
hashlib.sha256
).hexdigest()
return signature
def send_order_request(api_key: str, api_secret: str, base_url: str):
# Define the parameters
params = {
"instrument_name": "CRO_USD",
"side": "BUY",
"type": "MARKET",
"quantity": "1", # Note: Already a string as per requirements
}
# Generate nonce
nonce = int(time.time() * 1000)
# Request ID and method
req_id = 12
method = "private/create-order"
# Generate signature
signature = create_signature(
method=method,
req_id=req_id,
api_key=api_key,
params=params,
nonce=nonce,
api_secret=api_secret
)
print(signature)
# Create the full request body
request_body = {
"id": req_id,
"method": method,
"api_key": api_key,
"params": params,
"nonce": nonce,
"sig": signature
}
# Make the API request
headers = {
"Content-Type": "application/json"
}
try:
response = requests.post(
f"{base_url}/{method}",
headers=headers,
json=request_body
)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"Error making request: {e}")
if hasattr(e.response, 'text'):
print(f"Response text: {e.response.text}")
return None
BASE_URL = "https://api.crypto.com/exchange/v1"
result = send_order_request(API_KEY, API_SECRET, BASE_URL)
При этом я получаю ответ: {'code': 40101, 'message': 'Ошибка аутентификации'
Однако у меня есть использовал тот же код для получения моего баланса, который, конечно, требует аутентификации, и он работает. То же самое и с историей заказов, но этот метод create-order не работает.
Спасибо, ребята!
Я пытаюсь создать рыночный ордер на покупку на сайте crypto.com через API. Глядя на документ, кажется, что параметр json для отправки в функцию почтового запроса выглядит следующим образом: [code]import time import hmac import hashlib import json import requests from typing import Dict, Any
def create_signature(method: str, req_id: int, api_key: str, params: Dict[Any, Any], nonce: int, api_secret: str) -> str: # Convert all numeric values in params to strings params_str = {k: str(v) if isinstance(v, (int, float)) else v for k, v in params.items()}
# Sort parameter keys in ascending order sorted_params = dict(sorted(params_str.items()))
# Create parameter string (key + value, no spaces or delimiters) param_string = ''.join(f"{key}{value}" for key, value in sorted_params.items())
# Create the message string: method + id + api_key + parameter_string + nonce message = f"{method}{req_id}{api_key}{param_string}{nonce}"
# Create the full request body request_body = { "id": req_id, "method": method, "api_key": api_key, "params": params, "nonce": nonce, "sig": signature }
# Make the API request headers = { "Content-Type": "application/json" }
try: response = requests.post( f"{base_url}/{method}", headers=headers, json=request_body ) response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: print(f"Error making request: {e}") if hasattr(e.response, 'text'): print(f"Response text: {e.response.text}") return None
BASE_URL = "https://api.crypto.com/exchange/v1" result = send_order_request(API_KEY, API_SECRET, BASE_URL) [/code] При этом я получаю ответ: {'code': 40101, 'message': 'Ошибка аутентификации' Однако у меня есть использовал тот же код для получения моего баланса, который, конечно, требует аутентификации, и он работает. То же самое и с историей заказов, но этот метод create-order не работает. Спасибо, ребята!