【发布时间】:2019-02-02 17:50:23
【问题描述】:
我正在尝试将有效的查询字符串转换为请求正文,但我收到一个错误,提示我缺少一个属性。我从另一篇文章中获得了@Tanaike 的帮助,该文章提供了将参数分解为编码格式的编码 URI 函数。但是,当我的“pairs”参数中有 30-50 对时,URLFetch 会出现查询字符串长度限制错误。所以我尝试将其作为请求正文发送。
var botParams = {
"name": "TestBot",
"base_order_volume": 0.001,
"take_profit": 1.5,
"safety_order_volume": 0.001,
"martingale_volume_coefficient": 2,
"martingale_step_coefficient": 1,
"max_safety_orders": 1,
"active_safety_orders_count": 1,
"safety_order_step_percentage": 2.5,
"take_profit_type": "total",
"stop_loss_percentage": 0,
"cooldown": 0,
"pairs": [
"BTC_ADA",
"BTC_TRX"
],
"trailing_enabled":"true",
"trailing_deviation":0.5,
"strategy_list": [
{
"strategy":"cqs_telegram"
}
]
};
try {
// var totalParams = keys.reduce(function(q, e, i) {
// q += (e == "pairs" ? botParams[e].reduce(function(s, f, j) {
// s += e + "[]=" + f + (j != botParams[e].length - 1 ? "&" : "");
// return s;
// },"") : e + "=" + (typeof botParams[e] == "object" ?
//encodeURIComponent(JSON.stringify(botParams[e])) :
//encodeURIComponent(botParams[e]))) + (i != keys.length - 1 ? "&" : "");
// return q;
// }, endPoint); //Thanks to Tanaike
//Call
//Base
var baseUrl = "https://3commas.io";
//Total Endpoint
var endPoint = "/public/api/ver1/bots/274339/update?";
//Convert Bot Params + endPoint to Encoded URI
var keys = Object.keys(botParams);
var totalParams = keys.reduce(function(q, e, i) {
q += e + "=" + (typeof botParams[e] == "object" ? encodeURIComponent(JSON.stringify(botParams[e])) : encodeURIComponent(botParams[e])) + (i != keys.length - 1 ? "&" : "");
Logger.log(encodeURIComponent(botParams[e]))
return q;
},endPoint);
Logger.log(totalParams)
//Create Signature
var signature = Utilities.computeHmacSha256Signature(totalParams, secret);
//Convert from byte
signature = signature.map(function(e) {return ("0" + (e < 0 ? e + 256 : e).toString(16)).slice(-2)}).join("");
var headers = {
"APIKEY": key,
"Signature": signature,
};
var params = {
"method": "PATCH",
"headers": headers,
"payload" : totalParams,
//Show full exceptions
muteHttpExceptions: true
};
var finalURL = baseUrl + "/public/api/ver1/bots/274339/update";
Logger.log(finalURL)
//https://3commas.io/public/api/ver1/bots/274339/update
// Call final URL with params
var data = UrlFetchApp.fetch(finalURL, params).getContentText();
var json = JSON.parse(data);
Logger.log(json)
} catch (err) {Logger.log(err)}
}
我收到的当前错误是{error_attributes={name=[is missing]}, error_description=Invalid parameters, error=record_invalid} 所以由于某种原因它无法识别我的姓名属性。当我记录结果时,我看到名称是作为字符串传递的。
记录结果:/public/api/ver1/bots/274339/update?name=TestBot&base_order_volume=0.001&take_profit=1.5&safety_order_volume=0.001&martingale_volume_coefficient=2&martingale_step_coefficient=1&max_safety_orders=1&active_safety_orders_count=1&safety_order_step_percentage=2.5&take_profit_type=total&stop_loss_percentage=0&cooldown=0&pairs=%5B%22BTC_ADA%22%2C%22BTC_TRX%22%5D&trailing_enabled=true&trailing_deviation=0.5&strategy_list=%5B%7B%22strategy%22%3A%22cqs_telegram%22%7D%5D
只是寻找关于它可能是什么的建议。谢谢。
【问题讨论】: