मैं बिनेंस के एपीआई को एक GET
अनुरोध भेजने की कोशिश कर रहा हूं, लेकिन मुझे नहीं पता कि कैसे करना है। यहाँ दस्तावेज़ीकरण पृष्ठ है: https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#account-information-user_data
मेरे पास एक निजी apiKey
और secretKey
है। मैं बिनेंस के लिए एक सामान्य अनुरोध कर सकता हूं, लेकिन मैं अपनी निजी कुंजी का उपयोग करके अपना निजी डेटा प्राप्त नहीं कर सकता।
पहली कोशिश: डाकिया में जीईटी अनुरोध के लिए मैं इस स्ट्रिंग का उपयोग करता हूं: https://api.binance.com/api/v3/account?timestamp =1499827319559&हस्ताक्षर=here_I_put_my_secret_key
और मैं एक header
के रूप में पास होता हूं जैसा कि डैनी ने apiKey
का सुझाव दिया था।
लेकिन मुझे मिलता है:
{
"code": -1021,
"msg": "Timestamp for this request is outside of the recvWindow."
}
धन्यवाद।
4 जवाब
मैंने डाकिया में javascript
का उपयोग करके समय को सही करते हुए इसे हल किया। एक और आसान समाधान ccxt
लाइब्रेरी का उपयोग करना है: https://github.com/ccxt/ccxt< /ए>
यह वही हो सकता है जो आप दस्तावेज़ीकरण के अनुसार कर रहे हैं।
एपीआई-कुंजी को
X-MBX-APIKEY
हेडर के माध्यम से बाकी एपीआई में पास किया जाता है।
अपने अनुरोध में, इसे हेडर कुंजी के रूप में और अपनी API कुंजी को मान के रूप में जोड़ें।
Binance API के लिए आधिकारिक पोस्टमैन संग्रह यहाँ से प्राप्त करें:
https://github.com/binance/binance-api-postman
पोस्टमैन में वांछित संग्रह और वातावरण आयात करें, उदाहरण के लिए binance_spot_api_v1.postman_collection.json और binance_com_spot_api.postman_environment.json
अपनी API कुंजी को binance-api-key परिवेश चर में और अपनी गुप्त कुंजी को binance-api-secret चर में जोड़ें।
सावधान: सीमित करें कि Binance कुंजी प्रबंधन में कुंजी क्या कर सकती है। उत्पादन के लिए इस कुंजी का उपयोग न करें, केवल परीक्षण के लिए। उत्पादन के लिए नई कुंजी बनाएँ।
हस्ताक्षरित अनुरोधों के लिए पूर्व-अनुरोध स्क्रिप्ट में हस्ताक्षर की गणना करें और फिर हस्ताक्षर पर्यावरण चर सेट करें।
उदाहरण पूर्व-अनुरोध स्क्रिप्ट:
function resolveQueryString() {
const query = JSON.parse(JSON.stringify(pm.request.url.query))
const keyPairs = []
for (param of query) {
if (param.key === 'signature') continue
if (param.disabled) continue
if (param.value === null) continue
const value = param.value.includes('{{') ? pm.environment.get(param.key) : param.value
keyPairs.push(`${param.key}=${value}`)
}
return keyPairs.join('&')
}
const signature = CryptoJS.HmacSHA256(
resolveQueryString(),
pm.environment.get('binance-api-secret')
).toString(CryptoJS.enc.Hex)
pm.environment.set('signature', signature)
आप यह कोशिश कर सकते हैं। यह मेरे लिए काम कर रहा है। बस अपना API_KEY और SECRET बदलें
आपको https://api.binance.com/api/ से सर्वरटाइम टाइम पुनर्प्राप्त करने की आवश्यकता है v3/time और अनुरोध पर हस्ताक्षर करने के लिए उस सर्वर टाइम का उपयोग करने की आवश्यकता है।
GET : https://api.binance.com/api/v3/account?timestamp={{timestamp}}&signature={{signature}}
हैडर:
Content-Type:application/json
X-MBX-APIKEY:YOUR_API_KEY
पूर्व-अनुरोध स्क्रिप्ट:
pm.sendRequest('https://api.binance.com/api/v3/time', function (err, res) {
console.log('Timestamp Response: '+res.json().serverTime);
pm.expect(err).to.not.be.ok;
var timestamp = res.json().serverTime;
postman.setEnvironmentVariable('timestamp',timestamp)
postman.setGlobalVariable('timestamp',timestamp)
let paramsObject = {};
const binance_api_secret = 'YOUR_API_SECRET';
const parameters = pm.request.url.query;
parameters.map((param) => {
if (param.key != 'signature' &&
param.key != 'timestamp' &&
!is_empty(param.value) &&
!is_disabled(param.disabled)) {
paramsObject[param.key] = param.value;
}
})
Object.assign(paramsObject, {'timestamp': timestamp});
if (binance_api_secret) {
const queryString = Object.keys(paramsObject).map((key) => {
return `${encodeURIComponent(key)}=${paramsObject[key]}`;
}).join('&');
console.log(queryString);
const signature = CryptoJS.HmacSHA256(queryString, binance_api_secret).toString();
pm.environment.set("signature", signature);
}
function is_disabled(str) {
return str == true;
}
function is_empty(str) {
if (typeof str == 'undefined' ||
!str ||
str.length === 0 ||
str === "" ||
!/[^\s]/.test(str) ||
/^\s*$/.test(str) ||
str.replace(/\s/g,"") === "")
{
return true;
}
else
{
return false;
}
}
}
);
संबंधित सवाल
नए सवाल
post
POST HTTP प्रोटोकॉल विधियों में से एक है; इसका उपयोग तब किया जाता है जब क्लाइंट को सर्वर को डेटा भेजने की आवश्यकता होती है, जैसे कि फ़ाइल अपलोड करते समय, या पूर्ण रूप सबमिट करते समय। शब्द पोस्ट के कई अर्थ हैं, लेकिन यह टैग विशेष रूप से HTTP POST अनुरोधों के बारे में है।
recvWindow
के लगभग 28 उल्लेख हैं, इसलिए यह शुरू करने के लिए एक अच्छी जगह है। "5000 या उससे कम के एक छोटे recvWindow का उपयोग करने की अनुशंसा की जाती है! अधिकतम 60,000 से अधिक नहीं जा सकता!"