private (string, string, string) GetData()
{
var nonce = GetBinanceNonce();
var request = new StartDepositData
{
env = new StartDepositData.Env
{
TerminalType = TerminalType
},
orderTags = new StartDepositData.OrderTags
{
IfProfitSharing = true
},
MerchantTradeNo = nonce,
OrderAmount = (double)_data.PaymentAmount,
Currency = _data.PaymentCurrencyId,
Description = "BinancePay",
GoodsDetails = new List
{
new ()
{
GoodsType = GoodsType,
GoodsCategory = GoodsCategory,
ReferenceGoodsId = _data.Reference,
GoodsName = "BinancePay",
GoodsDetail = "BinancePay"
}
}
};
// TODO: API Specification ambiguous, payload could be:
// 1. var payload = body;
// 2. var payload = timestamp + "\n" + nonce + "\n" + body + "\n";
// 1 may just be the payload, 2 may be needed when creating signature maybe
var timestamp = DateTime.UtcNow.ToUnixTimeMilliseconds().ToString();
var body = JsonConvert.SerializeObject(request);
var payload = body;
var signaturePayload = timestamp + "\n" + nonce + "\n" + body + "\n";
string signature = CreateSignature(signaturePayload, _secret);
string hexSignature = Hex(Encoding.UTF8.GetBytes(signature));
return (payload, hexSignature, nonce);
}
private string CreateSignature(string payload, string secretKey)
{
// Initialize a new HMACSHA512 instance with the provided secret key
var hmac = new HMACSHA512(Encoding.UTF8.GetBytes(secretKey));
// Compute the hash of the payload
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(payload));
// Convert the hash to a hexadecimal string, remove any dashes typically included by BitConverter, and convert to uppercase
return BitConverter.ToString(hash).Replace("-", string.Empty).ToUpper();
}
public static string Hex(byte[] bytes)
{
StringBuilder result = new StringBuilder(bytes.Length * 2);
string hexAlphabet = "0123456789ABCDEF";
foreach (byte b in bytes)
{
result.Append(hexAlphabet[b >> 4]);
result.Append(hexAlphabet[b & 0xF]);
}
return result.ToString();
}
// A random string with 32 bytes, e.g. random ascii decimal within a-z and A-Z and loop 32 times to form a random string
private static string GetBinanceNonce(int length = 32)
{
const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
return new string(Enumerable.Repeat(chars, length)
.Select(s => s[new Random().Next(s.Length)]).ToArray());
}
При публикации на https://bpay.binanceapi.com/binancepay/openapi/v3/order я получаю ответ: {"status":"FAIL","code":"400002 ","errorMessage":"Подпись для этого запроса недействительна". Проверьте, соответствуют ли параметр и метод подписи требованиям алгоритма подписи. Это методы, которые я использую использовать для построения запросов к API BinancePay на C# Он должен соответствовать спецификации API в https://developers.binance.com/docs/binance-pay/api-order-create-v3 Я думаю У меня хорошая подпись в соответствии с требованиями https://developers.binance.com/docs/binance-pay/api-common [code] private (string, string, string) GetData() { var nonce = GetBinanceNonce();
var request = new StartDepositData { env = new StartDepositData.Env { TerminalType = TerminalType }, orderTags = new StartDepositData.OrderTags { IfProfitSharing = true }, MerchantTradeNo = nonce, OrderAmount = (double)_data.PaymentAmount, Currency = _data.PaymentCurrencyId, Description = "BinancePay", GoodsDetails = new List { new () { GoodsType = GoodsType, GoodsCategory = GoodsCategory, ReferenceGoodsId = _data.Reference, GoodsName = "BinancePay", GoodsDetail = "BinancePay" } } };
// TODO: API Specification ambiguous, payload could be: // 1. var payload = body; // 2. var payload = timestamp + "\n" + nonce + "\n" + body + "\n"; // 1 may just be the payload, 2 may be needed when creating signature maybe var timestamp = DateTime.UtcNow.ToUnixTimeMilliseconds().ToString();
var body = JsonConvert.SerializeObject(request); var payload = body; var signaturePayload = timestamp + "\n" + nonce + "\n" + body + "\n";
private string CreateSignature(string payload, string secretKey) { // Initialize a new HMACSHA512 instance with the provided secret key var hmac = new HMACSHA512(Encoding.UTF8.GetBytes(secretKey));
// Compute the hash of the payload var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(payload));
// Convert the hash to a hexadecimal string, remove any dashes typically included by BitConverter, and convert to uppercase return BitConverter.ToString(hash).Replace("-", string.Empty).ToUpper(); }
public static string Hex(byte[] bytes) { StringBuilder result = new StringBuilder(bytes.Length * 2); string hexAlphabet = "0123456789ABCDEF";
foreach (byte b in bytes) { result.Append(hexAlphabet[b >> 4]); result.Append(hexAlphabet[b & 0xF]); }
return result.ToString(); }
// A random string with 32 bytes, e.g. random ascii decimal within a-z and A-Z and loop 32 times to form a random string private static string GetBinanceNonce(int length = 32) { const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; return new string(Enumerable.Repeat(chars, length) .Select(s => s[new Random().Next(s.Length)]).ToArray()); } [/code]
Я пытаюсь получить API «создать заказ» из API binance pay для осуществления платежей в моем приложении Kotlin для Android. Я следую документации API для создания полезных данных и подписи, но, к сожалению, она не работает.
Я получаю следующую...
Я строю веб-сайт, который называет PHP на бэкэнд для некоторых страниц. Когда я просматриваю страницу HTML в компьютерном браузере, она возвращается со статусом 200 и показывает контент, возвращаемый из сценария PHP. Однако, когда я просматриваю ту...
Я хотел бы знать, как извлечь данные (позиция, имя трейдера, символ и т. д.) из таблицы лидеров Binance с помощью Python и Binance API.
Спасибо за ваши ответы !
Это мой код, который не работает:
from binance.client import Client, AsyncClient...
Я использую библиотеку binance-python для получения последних данных, однако я не могу получить доступ к API binance (конечные точки общедоступны, поэтому учетные данные не требуются)
Ошибка Сообщение:
Traceback (most recent call last):
File...