Próbuję napisać prostą aplikację dla siebie i kiedy próbuję wywołać metoda getInfo zawsze otrzymuję błąd w odpowiedzi. Klucz, znak, metoda lub brak jest nieprawidłowy. Znalazłem wiele przykładów, ale nadal nie mogę znaleźć błędu w moim kodzie. Czy ktoś może mi w tym pomóc?Problemy z tapi YoBit z authetincation
Kod działa dobrze dla hitbtc. Wiem, że yobit jest trochę inny, ale myślę, że się do tego przyzwyczaiłem.
Mój kod:
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
Kod został pomyślnie przetestowany na hitbtc.
Więc część kryptograficzna jest poprawna. I umieścić go tutaj w każdym razie pod względem kompletności
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
Więc
dla testow
Ten kod działa
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
Z yobit rzeczy są różne. Muszę użyć postu zamiast get. Muszę dodać więcej nagłówków. Myślę jednak, że to naprawiłem.
To nie działa.
Funkcja python dla yobit API jest to po prostu trzeba tłumaczyć, że do VB.NET, które myślę, że mam zrobić wiernie
API Call Authentication in Python (Working PHP example)
Myślę, że błędem jest tu
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);
Tam rzeczy, które skopiowałem to method = getInfo & nonce = 636431012620 co jest tym, co umieszczam w poście.
Wydaje się to słuszne.
nie sądzę dodać metodę na URL. Powinieneś użyć polecenia post. –
Dziękuję za odpowiedź. Masz rację. Problem polegał na niewłaściwym żądaniu. Znalazłem już rozwiązanie – Alex