Bitcoin Forum
April 19, 2024, 09:16:51 AM *
News: Latest Bitcoin Core release: 26.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Вопрос по API Yobit  (Read 2052 times)
xMizar (OP)
Newbie
*
Offline Offline

Activity: 8
Merit: 1


View Profile
August 06, 2017, 10:28:24 AM
Merited by klarki (1)
 #1

Добрый день. Подскажите, пожалуйста, возможно кто-то встречался с такой проблемой. Пытаюсь для себя написать на C# простое приложение и пры поппытке вызвать метод getInfo всегда получаю ошибку. Пишет, что ключ, подпись, метод или nonce неверный. Нашел несколько примеров, проверил все, что мог. Ошибки не вижу. Может кто-нибудь знает в чем тут может быть дело? Вот код:

        const string key = "072BCC223A1ADBE86854A4B4A9468EAB";
        const string secret = "4c962093fb943d418afb8fae14841c6b";
        const string tapi = "https://yobit.net/tapi";

        public void GetInfo() {
            int nonce = 1;

            string parameters = $"method=getInfo&nonce=1";

            string address = $"{tapi}?{parameters}";

            var keyByte = Encoding.UTF8.GetBytes(secret);

            string sign1 = string.Empty;
            byte[] inputBytes = Encoding.UTF8.GetBytes(parameters);
            using (var hmac = new HMACSHA512(keyByte))
            {
                byte[] hashValue = hmac.ComputeHash(inputBytes);

                StringBuilder hex1 = new StringBuilder(hashValue.Length * 2);
                foreach (byte b in hashValue)
                {
                    hex1.AppendFormat("{0:x2}", b);
                }
                sign1 =  hex1.ToString();
            }

            WebRequest webRequest = (HttpWebRequest)System.Net.WebRequest.Create(address);
            if (webRequest != null)
            {
                webRequest.Method = "POST";
                webRequest.Timeout = 20000;
                webRequest.ContentType = "application/x-www-form-urlencoded";
                webRequest.Headers.Add("Key", key);
                webRequest.Headers.Add("Sign", sign1);

                using (System.IO.Stream s = webRequest.GetResponse().GetResponseStream())
                {
                    using (System.IO.StreamReader sr = new System.IO.StreamReader(s))
                    {
                        var jsonResponse = sr.ReadToEnd();
                        Console.WriteLine(String.Format("Response: {0}", jsonResponse));
                    }
                }
            }


            Log(nonce.ToString());
        }


Ключ - InfoOnly, nonce специально захардкодил на 1 для простоты. Буду очень признателен за любую помощь
1713518211
Hero Member
*
Offline Offline

Posts: 1713518211

View Profile Personal Message (Offline)

Ignore
1713518211
Reply with quote  #2

1713518211
Report to moderator
"There should not be any signed int. If you've found a signed int somewhere, please tell me (within the next 25 years please) and I'll change it to unsigned int." -- Satoshi
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1713518211
Hero Member
*
Offline Offline

Posts: 1713518211

View Profile Personal Message (Offline)

Ignore
1713518211
Reply with quote  #2

1713518211
Report to moderator
BrXeon
Newbie
*
Offline Offline

Activity: 2
Merit: 0


View Profile
August 07, 2017, 09:17:20 AM
 #2

Добрый день,
Из описания API:
Параметр nonce (минимум 1, максимум 2147483646) при каждом новом запросе должен быть больше значения из предыдущего запроса.
Для обнуления nonce необходимо создать новый ключ.

Т.е. при каждом обращении к Trade API nonce нужно увеличивать, использованный nonce будет выдавать ошибку.
ferumflex
Full Member
***
Offline Offline

Activity: 256
Merit: 102


View Profile WWW
August 07, 2017, 02:58:35 PM
 #3

Поддерживаю с BrXeon, нужно тогда его где то сохранять либо другой вариант брать unix time, но тогда запросы можно будет делать не чаще раза в секунду
Rora
Sr. Member
****
Offline Offline

Activity: 244
Merit: 250


View Profile
August 07, 2017, 05:09:49 PM
 #4

Quote
нужно тогда его где то сохранять либо другой вариант брать unix time, но тогда запросы можно будет делать не чаще раза в секунду

Можно записывать значение в файл, а при запуске программа должна считывать из файла последнее значение nonce.

Quote
пры поппытке вызвать метод getInfo всегда получаю ошибку

Смотрите какой код ответа возвращает вам биржа, ну смотрите таблицу расшифровки кодов ошибок.
ligor
Full Member
***
Offline Offline

Activity: 1246
Merit: 138


Hodl DeepOnion


View Profile WWW
August 07, 2017, 07:38:31 PM
 #5

Да уж, очень подробная у них документация   Angry.   Вот правильный вариант
Code:
        public void GetInfo()
        {

            string parameters = $"method=getInfo&nonce=" + (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;

            string address = $"{tapi}/";

            var keyByte = Encoding.UTF8.GetBytes(secret);

            string sign1 = string.Empty;
            byte[] inputBytes = Encoding.UTF8.GetBytes(parameters);
            using (var hmac = new HMACSHA512(keyByte))
            {
                byte[] hashValue = hmac.ComputeHash(inputBytes);

                StringBuilder hex1 = new StringBuilder(hashValue.Length * 2);
                foreach (byte b in hashValue)
                {
                    hex1.AppendFormat("{0:x2}", b);
                }
                sign1 = hex1.ToString();
            }

            WebRequest webRequest = (HttpWebRequest)System.Net.WebRequest.Create(address);
            if (webRequest != null)
            {
                webRequest.Method = "POST";
                webRequest.Timeout = 20000;
                webRequest.ContentType = "application/x-www-form-urlencoded";
                webRequest.Headers.Add("Key", key);
                webRequest.Headers.Add("Sign", sign1);

                webRequest.ContentLength = parameters.Length;
                using (var dataStream = webRequest.GetRequestStream())
                {
                    dataStream.Write(inputBytes, 0, parameters.Length);
                }

                using (System.IO.Stream s = webRequest.GetResponse().GetResponseStream())
                {
                    using (System.IO.StreamReader sr = new System.IO.StreamReader(s))
                    {
                        var jsonResponse = sr.ReadToEnd();
                        Console.WriteLine(String.Format("Response: {0}", jsonResponse));
                    }
                }
            }

        }

xMizar (OP)
Newbie
*
Offline Offline

Activity: 8
Merit: 1


View Profile
August 07, 2017, 09:03:54 PM
 #6

ligor, огромное спасибо! Smiley
mironau
Newbie
*
Offline Offline

Activity: 18
Merit: 0


View Profile
September 16, 2017, 08:54:30 PM
 #7

А есть у кого готовое решение для PHP?
Скиньте плиз скрипт.
aleks_raiden
Full Member
***
Offline Offline

Activity: 138
Merit: 101


View Profile
September 17, 2017, 10:29:15 AM
 #8

На РНР нагуглилось два решения, разной степени готовности:

- https://github.com/pepijnolivier/laravel-yobit

- https://www.snip2code.com/Snippet/861483/Yobit-API-in-PHP
mironau
Newbie
*
Offline Offline

Activity: 18
Merit: 0


View Profile
January 20, 2018, 02:49:38 PM
 #9

На РНР нагуглилось два решения, разной степени готовности:

- https://github.com/pepijnolivier/laravel-yobit

- https://www.snip2code.com/Snippet/861483/Yobit-API-in-PHP


А сайт подключить к API Yobit, чтобы при пополнении баланс на сайте средства зачислялись на Yobit.
Vovsla
Jr. Member
*
Offline Offline

Activity: 134
Merit: 1


View Profile
March 15, 2020, 02:21:49 PM
Merited by klarki (1)
 #10

Может кто подсказать по решению на powershell?
Сервер всегда выдает нижеуказанную ошибку. Не пойму в чем проблема в вычислении HMACSHA512 или в запросе

{"success":0,"error":"invalid key, sign, method or nonce"}


Code:
$local:Key = ''
$local:Secret = ''
$local:Nonce = [int](New-TimeSpan -Start ([DateTime]"01/01/2020 00:00") -End (Get-Date)).TotalSeconds

$local:Message = "method=getinfo&nonce=$Nonce"

$local:HMACSHA = New-Object System.Security.Cryptography.HMACSHA512
$HMACSHA.key = [Text.Encoding]::UTF8.GetBytes($Secret)
$local:Signature = $HMACSHA.ComputeHash([Text.Encoding]::UTF8.GetBytes($Message))
$Signature = [Convert]::ToBase64String($Signature)

$local:Result = Invoke-WebRequest -URI 'https://yobit.net/tapi/' -Method 'POST' -ContentType 'application/x-www-form-urlencoded' -Headers @{Sign = $Signature; Key = $Key} -TimeoutSec 20

Write-Host $Result
reddish111
Sr. Member
****
Offline Offline

Activity: 1932
Merit: 349



View Profile
March 24, 2020, 10:43:05 AM
 #11

Может кто подсказать по решению на powershell?
Сервер всегда выдает нижеуказанную ошибку. Не пойму в чем проблема в вычислении HMACSHA512 или в запросе

{"success":0,"error":"invalid key, sign, method or nonce"}


Code:
$local:Key = ''
$local:Secret = ''
$local:Nonce = [int](New-TimeSpan -Start ([DateTime]"01/01/2020 00:00") -End (Get-Date)).TotalSeconds

$local:Message = "method=getinfo&nonce=$Nonce"

$local:HMACSHA = New-Object System.Security.Cryptography.HMACSHA512
$HMACSHA.key = [Text.Encoding]::UTF8.GetBytes($Secret)
$local:Signature = $HMACSHA.ComputeHash([Text.Encoding]::UTF8.GetBytes($Message))
$Signature = [Convert]::ToBase64String($Signature)

$local:Result = Invoke-WebRequest -URI 'https://yobit.net/tapi/' -Method 'POST' -ContentType 'application/x-www-form-urlencoded' -Headers @{Sign = $Signature; Key = $Key} -TimeoutSec 20

Write-Host $Result

не заданы ключи $local:Key = ''
$local:Secret = ''

Vovsla
Jr. Member
*
Offline Offline

Activity: 134
Merit: 1


View Profile
May 18, 2020, 06:48:12 PM
Last edit: May 18, 2020, 07:34:43 PM by Xal0lex
 #12

Ну не буду же я всем свои ключи раздавать, у меня они прописаны

Может кто-нить даст рабочий пример getInfo на питоне?
reddish111
Sr. Member
****
Offline Offline

Activity: 1932
Merit: 349



View Profile
May 18, 2020, 08:45:06 PM
 #13

Ну не буду же я всем свои ключи раздавать, у меня они прописаны

Может кто-нить даст рабочий пример getInfo на питоне?


может...
но я могу дать только за сто тысчь пятсот рублей  Cool
можно даже кодом yobit

Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!