合约
以下部分概述了认证要求并提供访问合约API的代码示例。
认证类型:
| 接口类型 | 认证要求 |
|---|---|
| RESTful公共接口 | 不需要认证 |
| RESTful私有接口 | 需要API密钥和签名 |
| Websocket公共接口 | 不需要认证 |
| Websocket私有接口 | 需要API密钥和密钥 |
代码示例
RESTful公共接口
Python
import requests
def FuturesRestfulPublic(api_url, params):
base_url = "https://api.coinw.com"
url = f'{base_url}{api_url}'
response = requests.get(url, params)
if response.status_code == 200:
return response.json()
else:
return print("Failed to get data. Status code:", response.status_code)
Java
package com.coinw.test.busi.publicCode;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class FuturesRestfulPublic {
private static final String BASE_URL = "https://api.coinw.com";
public static void restfulPublic(String apiUrl, Map<String, String> params) {
String fullUrl = BASE_URL + apiUrl;
if (!params.isEmpty()) {
String query = params.entrySet().stream()
.map(entry -> entry.getKey() + "=" + entry.getValue())
.collect(Collectors.joining("&"));
fullUrl += "?" + query;
}
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(fullUrl))
.build();
try {
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
System.out.println("API Response: " + response.body());
} else {
System.out.println("Failed to get data. Status code: " + response.statusCode());
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// Get Instrument Information (获取交易品种信息)
String apiUrl1 = "/v1/perpum/instruments";
Map<String, String> params1 = new HashMap<>();
params1.put("name", "btc");
restfulPublic(apiUrl1, params1);
// Get Funding Fee Rate(获取资 金费率)
String apiUrl2 = "/v1/perpum/fundingRate";
Map<String, String> params2 = new HashMap<>();
params2.put("instrument", "btc");
restfulPublic(apiUrl2, params2);
//Get Last Trade Summary of All Instruments(获取所有交易品种最新交易摘要)
String apiUrl3 = "/v1/perpumPublic/tickers";
Map<String, String> params3 = new HashMap<>();
restfulPublic(apiUrl3, params3);
// Get K-Line of an Instrument(获取交易品种K线数据)
String apiUrl4 = "/v1/perpumPublic/klines";
Map<String, String> params4 = new HashMap<>();
params4.put("currencyCode" ,"BTC");
params4.put("granularity", "3");
params4.put("limit", "6");
restfulPublic(apiUrl4, params4);
// Get Last Trade Smmary of an Instrument(获取指定交易品种最新交易摘要)
String apiUrl5 = "/v1/perpumPublic/ticker";
Map<String, String> params5 = new HashMap<>();
params5.put("instrument" ,"BTC");
restfulPublic(apiUrl5, params5);
// Get Trade Data of an Instrument(获取指定交易品种的交易数据)
String apiUrl6 = "/v1/perpumPublic/trades";
Map<String, String> params6 = new HashMap<>();
params6.put("base" ,"sand");
restfulPublic(apiUrl6, params6);
// Get Order Book of an Instrument(获取指定交易品种的订单簿 )
String apiUrl7 = "/v1/perpumPublic/depth";
Map<String, String> params7 = new HashMap<>();
params7.put("base" ,"BTC");
restfulPublic(apiUrl7, params7);
// Get Batch Instruments Info (获取批量交易品种信息)
String apiUrl8 = "/v1/perpum/instrumentList";
Map<String, String> params8 = new HashMap<>();
params8.put("symbols", "BTC,ETH");
restfulPublic(apiUrl8, params8);
// Get Batch Last Summary (获取批量最新交易摘要)
String apiUrl9 = "/v1/perpumPublic/ticker/list";
Map<String, String> params9 = new HashMap<>();
params9.put("symbols", "BTC,ETH");
restfulPublic(apiUrl9, params9);
}
}
RESTful私有接口
Python
import time
import hmac, hashlib, base64
import json
import requests
def FuturesRestfulPrivate(params, api_url, method, sec_key, api_key):
"""
Make an API request with HMAC authentication for GET, POST, DELETE, and PUT methods.
"""
# Validate method
valid_methods = {"GET", "POST", "DELETE", "PUT"}
if method.upper() not in valid_methods:
return None, {"error": f"Invalid method: {method}. Supported methods: {valid_methods}"}
# Generate timestamp and base URL
timestamp = str(int(time.time() * 1000))
base_url = "https://api.coinw.com"
request_url = f'{base_url}{api_url}'
# Generate encoded parameters for signature
if method.upper() == "GET":
query_params = "&".join(f"{key}={value}" for key, value in params.items() if value is not None)
encoded_params = f'{timestamp}{method}{api_url}?{query_params}' if query_params else f'{timestamp}{method}{api_url}'
else:
encoded_params = f'{timestamp}{method}{api_url}{json.dumps(params)}'
# Generate HMAC SHA256 signature
signature = base64.b64encode(
hmac.new(bytes(sec_key, 'utf-8'), msg=bytes(encoded_params, 'utf-8'), digestmod=hashlib.sha256).digest()
).decode("US-ASCII")
# Prepare headers
headers = {
"sign": signature,
"api_key": api_key,
"timestamp": timestamp,
}
if method.upper() in ["POST", "DELETE", "PUT"]:
headers["Content-type"] = "application/json"
# Make the API request
if method.upper() == "GET":
response = requests.get(request_url, params=params, headers=headers)
elif method.upper() == "POST":
response = requests.post(request_url, data=json.dumps(params), headers=headers)
elif method.upper() == "DELETE":
response = requests.delete(request_url, data=json.dumps(params), headers=headers)
elif method.upper() == "PUT":
response = requests.put(request_url, data=json.dumps(params), headers=headers)
return response.status_code, response.json()
sec_key = "your_secret_key"
api_key = "your_api_key"