Я хотел получить некоторые тестовые данные из 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;
}
}