Обновление списка в Etsy через API (подпись неверна) - PullRequest
0 голосов
/ 19 февраля 2019

В настоящее время я работаю с Etsy API и oAuth1.0.После некоторых хлопот и потраченных часов я получил запрос GET / POST, и до сих пор все было хорошо.Кажется, что подпись, которая рассчитывается с помощью C # (без использования библиотеки), неверна (или подпись недействительна), и я также считаю, что данные, которые я отправляю, отформатированы неправильно.Я сделал некоторые изменения в коде и потерян в беде.Я использую .net 4.5 и HAVE, чтобы сделать это в этой версии, обновление или понижение версии невозможны.Было бы здорово, если бы вы могли прокомментировать рабочий фрагмент кода для запроса PUT, который корректно обновляет Листинг.

Ссылка, которую я отправляю:

https://openapi.etsy.com/v2/listings/681233703?title=Updated%20minimalistic%20Title&oauth_consumer_key=CONSUMERKEYHERE&oauth_token=OAUTHTOKENHERE&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1550565715&oauth_nonce=4iF0YjiRlbUkAChw2wPhAzL1qEU=&oauth_version=1.0&oauth_signature=SIGNATUREHERE=

Текущая ошибка: oauth_problem=signature_invalid&debug_sbs=PUT&https%3A%2F%2Fopenapi.etsy.com%2Fv2%2Flistings%2F681233703&oauth_consumer_key%CONSUMERKEYHERE%26oauth_nonce%3DOyU9cBS3eG4%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1550565838%26oauth_token%OUTHTOKENHERE%26oauth_version%3D1.0%26title%3DUpdated%2520minimalistic%2520Title

Рабочий POST

// Timestamps are in seconds since 1/1/1970.
string fullUrl = EtsyBaseUrl + url;
string data = JsonConvert.SerializeObject(dic);
Dictionary<string, string> data_dic = getOAuthDataDictionary(fullUrl, "POST");

string oAuthHeader = GenerateOAuthHeader(data_dic);

// Build the form data (exclude OAuth stuff that's already in the header).
var formData = new FormUrlEncodedContent(data_dic.Where(kvp => !kvp.Key.StartsWith("oauth_")));
using (var http = new HttpClient())
{
    http.DefaultRequestHeaders.Add("Authorization", oAuthHeader);

    HttpContent httpData = new StringContent(data, Encoding.UTF8, "application/json");
    var httpResp = await http.PostAsync(fullUrl, httpData);
    var respBody = await httpResp.Content.ReadAsStringAsync();
    return respBody;
}

Мой не работающий запрос PUT

try
        {
            // Timestamps are in seconds since 1/1/1970.
            string fullUrl = EtsyBaseUrl + url;
            Dictionary<string, string> data_dic = getOAuthDataDictionary(fullUrl, "PUT");

            string oAuthParam = GenerateOAuthParam(data_dic);
            string oAuthHeader = GenerateOAuthHeader(data_dic);

            // Build the form data (exclude OAuth stuff that's already in the header).
            var formData = new FormUrlEncodedContent(data_dic.Where(kvp => !kvp.Key.StartsWith("oauth_")));
            using (var http = new HttpClient())
            {
                http.DefaultRequestHeaders.Add("Authorization", oAuthHeader);

                var url2 = string.Format(fullUrl + "?" + string.Join("&",dic.Select(kvp =>string.Format($"{kvp.Key}={Uri.EscapeDataString(kvp.Value)}")))) + oAuthParam; //TODO
                Debug.WriteLine(url2);
                HttpContent httpData = new StringContent(url2, Encoding.ASCII, "application/x-www-form-urlencoded");
                Debug.WriteLine(await httpData.ReadAsStringAsync());
                var httpResp = await http.PutAsync(fullUrl, httpData);
                var respBody = await httpResp.Content.ReadAsStringAsync();
                Debug.WriteLine(respBody);
                return respBody;

            }
        }
        catch(Exception er)
        {
            Console.WriteLine(er.Message);
            return null;
        }

Обновление 1 Когда я удаляю параметр title, запрос работает нормально, если его добавить, Я получаю недопустимую ошибку подписи.

Обновление 2 Когда я изменяю "application / x-www-form-urlencoded" на "application / json" и передаю параметры, запрос putпроходит, но etsy не распознает никаких параметров, что приводит к заголовку: null

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...