vb.net – YoBit tapi验证问题
我正在尝试为自己编写简单的应用程序,当我尝试调用时
getInfo方法我总是在响应中出错.密钥,符号,方法或随机数不正确.我发现了一些例子,但我仍然在代码中找不到错误.任何人都可以帮我吗? 该代码适用于hitbtc.我知道yobit有点不同,但我想我已经适应了. 我的代码: Protected Shared Function readStrings(signatureheader As String,host As String,pathandQuery As String,post As String,secret As String,hasher As System.Security.Cryptography.HMAC,otherHeaders As Tuple(Of String,String)()) As String 'apikey=98998BEEB8796455044F02E4864984F4 'secret=44b7659167ffc38bb34fa35b5c816cf5 hasher.Key = exchanges.getBytes(secret) Dim url = host + pathandQuery ' url = "https://yobit.net/tapi/" Dim wc = New CookieAwareWebClient() Dim sigHash2 = "" If post = "" Then sigHash2 = CalculateSignature2(pathandQuery,hasher) Else 'post = "method=getInfo&nonce=636431012620" sigHash2 = CalculateSignature2(post,hasher) 'sighash2= "ece0a3c4af0c68dedb1f840d0aef0fd5fb9fc5e808105c4e6590aa39f4643679af5da52b97d595cd2277642eb27b8a357793082007abe1a3bab8de8df24f80d2" End If wc.Headers.Add(signatureheader,sigHash2) ' SignatureHeader ="Sign" Dim response = "" For Each oh In otherHeaders ' otherHeaders =(0) {(Key,98998BEEB8796455044F02E4864984F4)} System.Tuple(Of String,String) wc.Headers.Add(oh.Item1,oh.Item2) Next '- wc.Headers {Sign: ece0a3c4af0c68dedb1f840d0aef0fd5fb9fc5e808105c4e6590aa39f4643679af5da52b97d595cd2277642eb27b8a357793082007abe1a3bab8de8df24f80d2 Key: 98998BEEB8796455044F02E4864984F4 } System.Net.WebHeaderCollection 'url = "https://yobit.net/tapi/" 'post = "method=getInfo&nonce=636431012620" If post = "" Then response = wc.DownloadString(url) Else response = wc.UploadString(url,post) 'response = response "{"success":0,"error":"invalid key,sign,method or nonce"}" String End If Return response End Function 代码已经成功测试了hitbtc. 所以加密部分是正确的.无论如何,我把它放在这里是为了完整 Protected Shared Function CalculateSignature2(text As String,hasher As System.Security.Cryptography.HMAC) As String Dim siginhash = hasher.ComputeHash(exchanges.getBytes(text)) Dim sighash = exchanges.getString(siginhash) Return sighash End Function 所以, 为了理智检查 这段代码有效 Public Overrides Sub readbalances() Dim response = readStrings("X-Signature","https://api.hitbtc.com","/api/1/trading/balance?nonce=" + exchanges.getNonce().ToString + "&apikey=" + _apiKey,"",_secret,New System.Security.Cryptography.HMACSHA512(),{}) End Sub 随着yobit事情是不同的.我得用post而不是get.我需要添加更多标题.但是,我想我已经解决了这个问题. 它不起作用. yobit API的python函数就是这个我只需将它转换为vb.net,我认为我已经忠实地完成了 API Call Authentication in Python ( Working PHP example ) 我认为错误就在这里 request_url = "https://yobit.net/tapi"; request_body = "method=TradeHistory&pair=ltc_btc&nonce=123"; signature = hmac_sha512(request_body,yobit_secret); http_headers = { "Content-Type":"application/x-www-form-urlencoded","Key":yobit_public_key,"Sign":signature } response = http_post_request(request_url,request_body,http_headers); result = json_decode(response.text); 我复制的东西是method = getInfo& nonce = 636431012620,这就是我发布的内容. 这似乎是正确的.
看起来很有效.
我只需要更改nonce,使其介于0到2 ^ 31之间 所以这就是错误 post = "method=getInfo&nonce=636431012620 nonce不应该那么大.它至多应该是 2147483646 虽然没有记录,但我必须补充一下 内容类型作为标题之一.这是最终的解决方案 Dim nonce = exchanges.getNonce().ToString Dim content = hashObject("",nonce,"method=getInfo&nonce=") Dim sighash = computeSig(content) Dim result = CookieAwareWebClient.downloadString1("https://yobit.net/tapi/",content,{New Tuple(Of String,String)("Key",_apiKey),New Tuple(Of String,String)("Sign",sighash),String)("Content-Type","application/x-www-form-urlencoded")}) 所以我添加了New Tuple(Of String,String)(“Content-Type”,“application / x-www-form-urlencoded”)作为标题之一 Protected Overridable Function computeSig(content As String) As String Dim hasher = New System.Security.Cryptography.HMACSHA512(System.Text.Encoding.UTF8.GetBytes(_secret)) Return CalculateSignature2(content,hasher) End Function Public Shared Function CalculateSignature2(content As String,hasher As System.Security.Cryptography.HMAC) As String Dim siginhash = hasher.ComputeHash(System.Text.Encoding.UTF8.GetBytes(content)) Dim sighash = exchanges.getString(siginhash) 'convert bytes to string Return sighash End Function Public Shared Function downloadString1(url As String,String)()) As String Dim wc = New CookieAwareWebClient() For Each oh In otherHeaders wc.Headers.Add(oh.Item1,oh.Item2) Next Dim response = String.Empty Try If post = "" Then response = wc.DownloadString(url) Else response = wc.UploadString(url,post) End If Catch ex As Exception Dim a = 1 End Try Return response End Function (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |