Acceda a la API de Etsy oauth con c#RestSharp
(1)
Configuré una cuenta de desarrollador en nuestra tienda para acceder a nuestros recibos de ventas. Decidí usar RestSharp para hacer mis solicitudes. He demostrado que no funciona para ninguna llamada Oauth requerida. Recibí con éxito mi accessToken y accessTokenSecret. Así que los utilizo junto con customerKey y customerSecret para realizar una llamada ForProtectedResource, para una solicitud oauth de la siguiente manera, pero siempre recibo "Este método requiere autenticación".
Espero que sea algo simple que me estoy perdiendo. Pensé, todo lo que necesito para hacer una llamada son esos cuatro elementos correctos? Una vez que tengo esos cuatro elementos, ya no tengo que solicitar o acceder al token, ¿correcto? Gracias
var access_token = "#########################";
var access_token_secret = "########";
var baseUrl = "https://openapi.etsy.com/v2";
var client = new RestClient(baseUrl);
client.Authenticator = OAuth1Authenticator.ForProtectedResource(consumerKey,
consumerSecret,
access_token,
access_token_secret);
var request = new RestRequest("shops/########/receipts");
request.Method = Method.GET;
request.AddParameter("api_key", consumerKey);
client.ExecuteAsync(request, response =>
{
var r = response;
});
Después de un poco de prueba y error finalmente envolví mi cabeza alrededor de OAuth y la forma en que Etsy lo implementa. El parámetro api_key solo se debe usar cuando llamas a un método que no requiere OAuth. De lo contrario, debe enviar todos los parámetros de OAuth necesarios. A continuación está el código de trabajo. Aproveché RestSharp, así como esta base de OAuth que encontré aquí . Espero que esto ayude a algunos pobres de la savia de mirar código malicioso durante 3 días (como el tuyo verdaderamente).
var restClient = new RestClient(baseUrl);
OAuthBase oAuth = new OAuthBase();
string nonce = oAuth.GenerateNonce();
string timeStamp = oAuth.GenerateTimeStamp();
string normalizedUrl;
string normalizedRequestParameters;
string sig = oAuth.GenerateSignature(new Uri(baseUrl + MethodLocation), consumerKey, consumerSecret, Accesstoken, AccessTokenSecret, "GET", timeStamp, nonce, out normalizedUrl, out normalizedRequestParameters);
// sig = HttpUtility.UrlEncode(sig);
var request = new RestRequest(MethodLocation);
request.Resource = string.Format(MethodLocation);
request.Method = Method.GET;
// request.AddParameter("api_key", consumerKey);
request.AddParameter("oauth_consumer_key", consumerKey);
request.AddParameter("oauth_token", Accesstoken);
request.AddParameter("oauth_nonce", nonce);
request.AddParameter("oauth_timestamp", timeStamp);
request.AddParameter("oauth_signature_method", "HMAC-SHA1");
request.AddParameter("oauth_version", "1.0");
request.AddParameter("oauth_signature", sig);
restClient.ExecuteAsync(request, response =>
{
var r = response;
});