Подпись FIX для Coinbase PRO API с. NET Core 3.1, C# - PullRequest
1 голос
/ 02 февраля 2020

Я не могу правильно подписаться на Coinbase Pro FIX API. Этот код работал нормально до нескольких месяцев go (я не использовал его некоторое время). В другой раз я прочитал документы, чтобы найти некоторые изменения, и обнаружил, что время отправки должно быть как Unix отметка времени в секундах, ранее я использовал DateTime в формате FIX. Я пытался изменить это, но по-прежнему не работает, после я покажу код, который я использую для создания подписи

private string CreateAccessSign(
            char msgType,
            string msgSeqNumber,
            string senderCompId,
            string targetCompId,
            string password
        )
    {
        var sendingTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
        var stringToHash = string.Join('\x0001', sendingTime, msgType, msgSeqNumber, senderCompId, targetCompId, password);
        var privateApiKeyAsByteArray = Convert.FromBase64String(_privateApiKey);
        using var hmac = new HMACSHA256(privateApiKeyAsByteArray);
        var signature = hmac.ComputeHash(new UTF8Encoding(false).GetBytes(stringToHash));
        return Convert.ToBase64String(signature);
    }

Ответ от их сервера FIX - «недопустимая подпись» в соответствующей метке FIX. Где я не прав?

1 Ответ

0 голосов
/ 02 февраля 2020

правильный формат используемой метки времени:

DateTime.UtcNow.ToString("yyyyMMdd-HH:mm:ss.fff")

, но проблема в том, что метка времени для тега 52 рассчитывается в отдельном месте кода и должна совпадать в подписи, поэтому var sendingTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); должно быть общим для подписи и тега 52

...