Crypto.com создает заказ, возвращает ошибку аутентификацииPython

Программы на Python
Ответить
Anonymous
 Crypto.com создает заказ, возвращает ошибку аутентификации

Сообщение Anonymous »

Я пытаюсь создать рыночный ордер на покупку на сайте 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 не работает.
Спасибо, ребята!

Подробнее здесь: https://stackoverflow.com/questions/792 ... on-failure
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»