{ "title": "Binance API C++ 实现:获取所有订单 (不使用 Binance 头文件)", "description": "本文展示了如何使用 C++ 实现 Binance API,获取所有订单信息,无需使用 Binance 提供的 C++ 头文件。代码示例包括签名生成、请求发送、数据解析等环节。", "keywords": "Binance API, C++, 获取所有订单, API 请求, 签名生成, 数据解析, curl, jsoncpp", "content": "#include #include #include <openssl/hmac.h> #include <curl/curl.h> #include <jsoncpp/json/json.h> #include #include #include #include #include

using namespace std;

string base_url = 'https://fapi.binance.com'; string api_key = 'YOUR_API_KEY'; string api_secret = 'YOUR_API_SECRET';

string get_current_time() { auto now = chrono::system_clock::now(); auto now_c = chrono::system_clock::to_time_t(now); stringstream ss; ss << put_time(localtime(&now_c), "%Y-%m-%d %H:%M:%S"); return ss.str(); }

string hmac_sha256(string key, string data) { unsigned char* digest; digest = HMAC(EVP_sha256(), key.c_str(), key.size(), (unsigned char*)data.c_str(), data.size(), NULL, NULL); char mdString[SHA256_DIGEST_LENGTH * 2 + 1]; for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) { sprintf(&mdString[i*2], "%02x", (unsigned int)digest[i]); } return mdString; }

string get_signature(map<string, string> params) { string query_string = ""; for (auto it = params.begin(); it != params.end(); it++) { query_string += it->first + '=' + it->second + '&'; } query_string = query_string.substr(0, query_string.size()-1); string signature = hmac_sha256(api_secret, query_string); return signature; }

size_t write_callback(char* ptr, size_t size, size_t nmemb, void* userdata) { string* response = (string*)userdata; response->append(ptr, size * nmemb); return size * nmemb; }

string make_request(string endpoint, string method, map<string, string> params) { CURL* curl; curl = curl_easy_init(); if (curl) { string query_string = ""; for (auto it = params.begin(); it != params.end(); it++) { query_string += it->first + '=' + it->second + '&'; } query_string = query_string.substr(0, query_string.size()-1); string url = base_url + endpoint + '?' + query_string; string timestamp = to_string(chrono::duration_castchrono::milliseconds(chrono::system_clock::now().time_since_epoch()).count()); string signature = get_signature(params); struct curl_slist* headers = NULL; headers = curl_slist_append(headers, ("Content-Type: application/x-www-form-urlencoded")); headers = curl_slist_append(headers, ("X-MBX-APIKEY: " + api_key).c_str()); headers = curl_slist_append(headers, ("X-MBX-TIMESTAMP: " + timestamp).c_str()); headers = curl_slist_append(headers, ("X-MBX-SIGNATURE: " + signature).c_str()); curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); if (method == "POST") { curl_easy_setopt(curl, CURLOPT_POST, 1L); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, query_string.c_str()); } curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); string response_string; curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_string); CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) { cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << endl; } curl_easy_cleanup(curl); return response_string; } return ""; }

int main() { map<string, string> params; params["symbol"] = "BTCUSDT"; params["recvWindow"] = "2000"; string response = make_request("/fapi/v1/allOrders", "GET", params); cout << response << endl; return 0; }

Binance API C++ 实现:获取所有订单 (不使用 Binance 头文件)

原文地址: https://www.cveoy.top/t/topic/nCNX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录