Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
{error={name=HTTPError,message=Signature无效。}}Bitmex Api连接错误_Api_Google Apps Script_Signature_Bitmex - Fatal编程技术网

{error={name=HTTPError,message=Signature无效。}}Bitmex Api连接错误

{error={name=HTTPError,message=Signature无效。}}Bitmex Api连接错误,api,google-apps-script,signature,bitmex,Api,Google Apps Script,Signature,Bitmex,我一直在尽我最大的能力进行口译,但我只能做到这一点: 函数平衡bitmex{ 变量apiKey='***'; 变量apiSecret='***'; var动词='get'; var path='/api/v1/user/wallet'; var expires=Numbernew Date.getTime+5.toFixed0; var expires=expires.toString; var数据=; var data=JSON.stringifydata; var货币=; var计数=; v

我一直在尽我最大的能力进行口译,但我只能做到这一点:

函数平衡bitmex{ 变量apiKey='***'; 变量apiSecret='***'; var动词='get'; var path='/api/v1/user/wallet'; var expires=Numbernew Date.getTime+5.toFixed0; var expires=expires.toString; var数据=; var data=JSON.stringifydata; var货币=; var计数=; var concat=verb+path+expires+data; var apiSignature=Utilities.computehmacsha256signatureasicret,concat; apiSignature=apiSignature.mapfunctione{ var v=e<0?e+256:e.toString16; 返回v.length==1?0+v:v; }.加入; 变量参数={ '方法':'获取', 'headers':{'contentType':'application/json', “api过期”:过期, “api密钥”:api密钥, “api签名”:api签名}, “muteHttpExceptions”:true }; //变量参数=参数+数据; 变量url=https://www.bitmex.com/api/v1/user/wallet?currency=XBt; var data=UrlFetchApp.fetchurl,参数; var data=JSON.parsedata.getContentText; 我的剧本怎么了?

该函数采用两个参数,顺序如下:

value:要为其生成哈希的输入值。 键:用于生成哈希的键。 在您的情况下,您基本上是使用concat作为密钥加密apiSecret。但是,它应该是相反的-apiSecret应该是用于加密concat的密钥。您只需更改:

var apiSignature=Utilities.computehmacsha256signatureasicret,concat; 有关下列事项:

var apiSignature=Utilities.computeHmacSha256Signatureconcat,apiSecret; 此外,您可以使用以下代码计算中提供的示例,并验证其是否正常工作

功能测试编码{ var apiSecret='chNOOS4KvNXR_Xq4k4c9qsfoKWvnDecLATCRlcBwyKDYnWgO'; var动词='GET'; 变量路径='/api/v1/instrument'; var expires=1518064236; var数据=; var apiSignature=Utilities.computehmacsha256signaturerb+path+expires+data,apiSecret; apiSignature=apiSignature.mapfunctione{ var v=e<0?e+256:e.toString16; 返回v.length==1?0+v:v; }.加入; Logger.logapi签名; } 运行上述代码的结果是c7682d435d0cfe87c16098df34ef2eb5a549d4c5a3c2b1f0f77b8af73423bf00,这与BitMex文档中显示的结果相同

关于您提供的代码,为了使API正常工作,还有一些错误需要解决:

谓词参数:您指定的参数是get,但API只接受此参数作为大写get。使用前者,签名将不同,从而导致请求失败。 path querystring:在计算签名时,请求currency=XBt的情况下,querystring必须存在,但在代码中,没有注意到行var path='/api/v1/user/wallet'; 在修复了上述所有错误并清理了一些未使用的变量之后,您的最终代码可能如下所示:

函数平衡bitmex{ 变量apiKey='***' 变量apiSecret='***'; var动词='GET'; var path='/api/v1/user/wallet?currency=XBt'; var expires=Math.floorDate.now/1000+600.toFixed0; var concat=verb+path+expires; var apiSignature=Utilities.computeHmacSha256Signatureconcat,apiSecret; apiSignature=apiSignature.mapfunctione{ var v=e<0?e+256:e.toString16; 返回v.length==1?0+v:v; }.加入; 变量参数={ “标题”:{ “api过期”:过期, “api密钥”:api密钥, “api签名”:api签名 }, “muteHttpExceptions”:true }; 变量url=https://www.bitmex.com/api/v1/user/wallet?currency=XBt; var response=UrlFetchApp.fetchurl,参数; var data=JSON.parseresponse.getContentText; Logger.logdata; }
非常感谢您的回答,刚刚看到!!我会立即尝试您的解决方案,然后再回复您,谢谢。ps:确实,尝试bitmex示例正是我所做的,但结果当然完全不同。仍然不起作用。如果我手动编写var expires=1518064236,它会产生与bitmex相同的结果,好吧。但是当我尝试时从存储在cellThu Feb 08 05:30:36 GMT+01:00 2018中的实际日期返回相同的值;它生成一个稍有不同的值:1518064236000而不是1518064236。我认为这些尾随的零是导致代码无法工作的原因。我无法删除它们,因为它是一个字符串,无法应用istance的精度。如果你尝试parseInt,它会返回一个指数。@John将它除以1000。我已经这样做了,控制台日志说我的var过期已经过去了。我已经删除了它:签名不起作用。我想需要更专业的人来执行脚本,在GAS中运行它,然后尝试不同的结果,否则我们会陷入困境。您好@J奥恩加拉西, 我曾经有机会重新讨论这个问题,并用我的帐户对其进行测试,我发现了一些关于API签名计算的实现。请重新访问我编辑的答案,因为它可能会引起您的兴趣。