Python Guide for Calling Mefree.NET API
This guide demonstrates how to use Python to interact with the Mefree.NET API, including signature generation, HTTP request construction, and example API calls.
1. Overview of the Signature Rules
1.1 Signature String Rules
Mefree.NET API requires requests to be signed for authentication. Follow these rules to generate the signature:
Construct the String to Sign:
sign = timestamp + method + requestPath
timestamp: UTC time in ISO 8601 format, e.g.,
2024-11-26T12:34:56.789Z
.method: HTTP method, e.g.,
GET
orPOST
.requestPath: API request path (including query parameters), such as:
/api/config
/api/order?quantity=65000&target_address=TRON_ADDRESS&period=1
Generate the Signature:
Use the HMAC-SHA256 algorithm with the Secret Key to hash the string.
Encode the resulting hash with Base64 to generate the final signature.
1.2 Required HTTP Headers
Each request must include the following headers:
Content-Type: application/json
MF-ACCESS-KEY
: Your API Key.MF-ACCESS-SIGN
: The generated signature.MF-ACCESS-TIMESTAMP
: Current UTC timestamp.
2. Environment Setup
Ensure you have Python 3.6+ installed. Install the required libraries using:
pip install requests
3. Signature Generation Function
Below is the Python implementation for generating the signature:
import hmac
import base64
import hashlib
from datetime import datetime
def generate_signature(timestamp, method, request_path, secret_key):
"""
Generate HMAC-SHA256 signature.
Args:
timestamp (str): Current UTC timestamp in ISO 8601 format.
method (str): HTTP method (e.g., GET or POST).
request_path (str): API request path (with query parameters, if any).
secret_key (str): Your API Secret Key.
Returns:
str: Base64-encoded signature.
"""
message = f"{timestamp}{method}{request_path}"
signature = hmac.new(
secret_key.encode('utf-8'),
message.encode('utf-8'),
hashlib.sha256
).digest()
return base64.b64encode(signature).decode()
def get_utc_timestamp():
"""
Get the current UTC timestamp in ISO 8601 format.
Returns:
str: Timestamp in ISO 8601 format (e.g., 2024-11-26T12:34:56.789Z).
"""
return datetime.utcnow().isoformat(timespec='milliseconds') + 'Z'
4. Sending HTTP Requests
You can use the requests
library to send HTTP requests with the required headers.
import requests
BASE_URL = "https://api.mefree.net"
API_KEY = "your_api_key" # Replace with your API Key
SECRET_KEY = "your_secret_key" # Replace with your Secret Key
def send_request(method, request_path):
"""
Send an HTTP request to the Mefree.NET API.
Args:
method (str): HTTP method (GET or POST).
request_path (str): API request path (with query parameters).
Returns:
dict: Parsed JSON response from the API.
"""
timestamp = get_utc_timestamp()
signature = generate_signature(timestamp, method, request_path, SECRET_KEY)
# Construct headers
headers = {
"Content-Type": "application/json",
"MF-ACCESS-KEY": API_KEY,
"MF-ACCESS-SIGN": signature,
"MF-ACCESS-TIMESTAMP": timestamp
}
# Send the request
url = BASE_URL + request_path
try:
if method == "GET":
response = requests.get(url, headers=headers)
elif method == "POST":
response = requests.post(url, headers=headers)
else:
raise ValueError("Unsupported HTTP method")
response.raise_for_status()
return response.json()
except requests.RequestException as e:
print(f"Request failed: {e}")
return None
5. Example API Calls
5.1 Get Account Information
API Endpoint: /api/config
HTTP Method: GET
Code Example:
if __name__ == "__main__":
response = send_request("GET", "/api/config")
if response:
print("Account Information:", response)
5.2 Create an Order
API Endpoint: /api/order?quantity=65000&target_address=TRON_ADDRESS&period=1
HTTP Method: POST
Code Example:
if __name__ == "__main__":
request_path = "/api/order?quantity=65000&target_address=TRON_ADDRESS&period=1"
response = send_request("POST", request_path)
if response:
print("Order Created:", response)
5.3 Query Order Status
API Endpoint: /api/order/{pay_hash}
HTTP Method: GET
Code Example:
if __name__ == "__main__":
pay_hash = "abcd1234" # Replace with actual pay_hash
request_path = f"/api/order/{pay_hash}"
response = send_request("GET", request_path)
if response:
print("Order Status:", response)
6. Common Issues
6.1 Invalid Signature (401 Unauthorized)
Ensure the
MF-ACCESS-KEY
matches your API Key.Verify the signature generation logic:
Concatenate the string in the correct order:
timestamp + method + requestPath
.Use the correct
SECRET_KEY
.
Ensure the timestamp is in UTC format and not older than 5 seconds.
6.2 Bad Request (400)
Verify the request path and query parameters are correct.
Ensure
Content-Type
is set toapplication/json
.
6.3 Too Many Requests (429)
Respect the API rate limits. Implement request throttling if necessary.
7. Summary
This guide covers Python implementation for calling Mefree.NET API. It includes signature generation, HTTP request construction, and example usage. By following this guide, you can easily integrate Mefree.NET API into your Python applications. For further support, contact Mefree technical support or consult the official API documentation.
Last updated