Problems with YoBit tapi with outsourcing

I try to write a simple application for myself and when I try to call the getInfo method always causes an error in the response. The key, sign, method or nonce is incorrect. I found some examples, but I still can not find the error in my code. Can anyone help me with this?

The code works fine for hitbtc. I know yobit is a little different, but I think I agree with that.

My code is:

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 

Code successfully tested for hitbtc.

So, the cryptographic part is correct. I put it here for completeness.

 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 

So,

to test performance

This code works

 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 

With yobit, everything is different. I should use the post, not receive. I have to add more headlines. However, I think I fixed it.

This does not work.

The python function for the yobit API is just that I need to translate this to vb.net, which I think I did right

Authentication of API calls in Python (PHP example)

I think the error is here.

 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); 

There, the material that I copied is the method = getInfo & nonce = 636431012620, which I put in the message.

So that seems right.

+5
source share
1 answer

It looks like it works.

I just need to change nonce so that it is between 0 and 2 ^ 31

So this is a mistake

  post = "method=getInfo&nonce=636431012620 

Should not be so big. At best, it should be

2147483646

Also, although this is not documented, I have to add

as one of the headers. This is the final decision.

  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), New Tuple(Of String, String)("Content-Type", "application/x-www-form-urlencoded")}) 

So, I added New Tuple(Of String, String)("Content-Type", "application/x-www-form-urlencoded") as one of the headers

 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, post As String, otherHeaders As Tuple(Of 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 
+1
source

Source: https://habr.com/ru/post/1270623/


All Articles