Неправильный расчет подписи Etsy API (C #) - PullRequest
0 голосов
/ 31 января 2019

Я хотел получить некоторые тестовые данные из API etsy, получил ключ oauth1.0 и все, что мне нужно, чтобы сделать простой GET-запрос.Я не использую никаких внешних библиотек, даже если я тестировал некоторые из них (DotNetOpenAuth, Restful), но, похоже, ничего не работает должным образом.Я всегда вычисляю неверную подпись, что приводит к ошибке.Уже несколько часов я ищу решение, но, похоже, ничего не помогает.Что мне не хватает?Я установил временные метки и одноразовые номера в жестко закодированные значения, чтобы сигнатура осталась прежней.POSTMAN показывает мне правильную подпись, но я просто не могу вычислить ее с помощью кода.

        //Constant Variablen
    private const string bodyUrl = "https://openapi.etsy.com/v2/";
    private const string ConsumerKey = "xxxxxxxxxxxxxxxxxxxxx";
    private const string ConsumerSecret = "xxxxxxxxx";
    private const string AccessToken = "xxxxxxxxxxxxxxxxxxxxxx";
    private const string TokenSecret = "xxxxxxxxxx";
    private const string SignatureMethod = "HMAC-SHA1";

public static async Task<Dictionary<string, string>> getAuthentication()
    {
        try
        {
            string target = bodyUrl + "listings/active";

            HttpClient client = new HttpClient();
            System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; //needed for connection

            target += "GET" + "?oauth_consumer_key=" + ConsumerKey +
                    "&oauth_token=" + AccessToken +
                    "&oauth_signature_method=" + SignatureMethod +
                    "&oauth_timestamp=" + timestamp +
                    "&oauth_nonce=" + nonce +
                    "&oauth_version=1.0";

            string baseString = Uri.EscapeDataString(target);
            baseString = baseString.Substring(0, baseString.Length - 3);

            string signingKey = Uri.EscapeDataString(ConsumerSecret) + "&" + Uri.EscapeDataString(TokenSecret);

            HMACSHA1 hasher = new HMACSHA1(ASCIIEncoding.ASCII.GetBytes(signingKey));
            string signatureString = Convert.ToBase64String(hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString)));
            target +="&oauth_signature=" + signatureString;

            HttpResponseMessage response = await client.GetAsync(target);

            if (response.IsSuccessStatusCode)
            {
                string jsonResponse = await response.Content.ReadAsStringAsync();

                Debug.WriteLine(jsonResponse);

                return JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonResponse);
            }
            else
            {
                Debug.WriteLine("request failed with: " + response.StatusCode);
                throw new HttpRequestException(response.StatusCode.ToString());
            }
        }
        catch (HttpRequestException e)
        {
            MessageBox.Show(e.Message);
            return null;
        }

    }

1 Ответ

0 голосов
/ 18 февраля 2019

Итак, я нашел решение для запроса get / post, используя этот класс:

https://blog.dantup.com/2016/07/simplest-csharp-code-to-post-a-tweet-using-oauth/

Тем не менее, когда я пытаюсь обновить листинг, я получаю ошибку подписи.

...