如何解决oauth_problem=signature_invalid , Auoth 1.0 PUT 请求
我正在尝试使用 ETSY api 进行 api 调用以更新列表库存。
我收到此错误:oauth_problem=signature_invalid&debug_sbs=PUT
我的代码是:
views::iota(0u,days_in_month.size())
| views::for_each([&](int month){
return views::repeat_n(month+1,days_in_month[month])
})
解决方法
Etsy API 要求 oauth 参数包含在帖子正文中,而不是标题中。文档对此不是很清楚,但有点暗示它(https://www.etsy.com/developers/documentation/getting_started/oauth#section_authorized_put_post_requests)
因此您的请求调用应如下所示:
./this:that
一个很好的调试这类问题的工具是 Postman (https://www.postman.com/)。我就是这样找到这个问题的。
编辑:
如果请求在 Postman 中工作,但您仍然无法在您的代码中工作,那么您可以稍微分解该过程。通过调用 oauth 对象上的 nonce、timestamp 和 signature 方法手动构建 oauth 参数。
request({
url: request_data.url,method: request_data.method,form: oauth.authorize(request_data,token)
},function (error,response,body) {
console.log(response.body)
});
我在我的代码中发现在启动 oauth 对象时我错误地命名了 consumer.secret 变量。所以消费者的秘密是空的,因此签名是错误的。
另外,尝试一个更简单的 PUT 调用来测试您的基本 PUT 请求是否有效。我正在执行 let oauth_data = {
oauth_consumer_key: api_key,oauth_nonce: oauth.getNonce(),oauth_signature_method: "HMAC-SHA1",oauth_timestamp: oauth.getTimeStamp(),oauth_version: "1.0",oauth_token: access_token
};
//now generate the signature using the request data and the oauth object
//you've just created above
let signature = oauth.getSignature(request_data,token_secret,oauth_data);
//now add the signature to the oauth_data paramater object
oauth_data.oauth_signature = signature;
//merge two objects into one
let formData = Object.assign({},oauth_data,request_data.params);
request({
url: request_data.url,form: formData
},body) {
console.log(response.body)
});
来更新商店标题(您实际上可以将其更新为现有标题,因此不会更改任何内容),它只需要您的商店 ID 和标题字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。