编辑: TL;DR
有没有人使用 Magento Rest API 和 angularjs 并可以给我一些关于如何开始使用 OAuth 的提示?
我正在尝试将 magento Rest API 与 angularjs 一起使用。我的问题是我什至无法让启动端点工作。
计算我使用的签名https://github.com/bettiolo/oauth-signature-js:
var initEndpointUrl = "http://magentoserver.com/oauth/initiate"
var parameters = {
oauth_callback: callback,
oauth_consumer_key : consumerKey,
oauth_nonce : nonce,
oauth_signature_method : signatureMethod,
oauth_timestamp : timestamp
}
var signature = oauthSignature.generate('POST', initEndpointUrl, parameters, consumerSecret);
我尝试了两种不同的方法:
1:发送带有Authorization Header的参数:
var authHeader = "OAuth "+
"oauth_callback=" + callback + "," +
"oauth_consumer_key=" + consumerKey + "," +
"oauth_nonce=" + nonce + "," +
"oauth_signature_method=" + signatureMethod + "," +
"oauth_timestamp=" + timestamp + "," +
"oauth_signature=" + signature;
$http({
method: 'POST',
url: initEndpointUrl,
header: {
'Authorization': authHeader
}
})
这种方法的问题是,我从服务器收到针对 OPTIONS 方法的 400 错误请求。这是由于身份验证标头导致请求不是“简单请求”造成的(据我所知)。这在飞行前会调用 OPTIONS 方法。
2:将参数作为url参数发送:
http://magentoserver.com/oauth/initiate?
oauth_callback=http%3A%2F%2Flocalhost&
oauth_consumer_key=12345&
oauth_nonce=67890&
oauth_signature_method=HMAC-SHA1&
oauth_timestamp=1234567890&
oauth_signature=abcdefg1234567
通过这种方法,我取得了更大的成功,并且能够添加所有必需的参数,直到检查签名为止,这导致 401 oauth_problem=signature_invalid。
我对 OAuth 很陌生,所以我想也许生成签名的调用不正确。另一方面,我可以想象,通过更改参数(以及 URL),我使签名无效。
有人有这方面的经验吗?预先感谢!
PS:我已经在 https://magento.stackexchange.com/ 上发布了这个,因为我认为它会更具体。
经过 Nic Raboy 的大力帮助,我们将其包含在他的 OAuth 库中:
该库完成所有签名、随机数计算以及其他所需的一切。但它确实需要在 cordova 上运行(使用 inAppBrowser 插件)。
在此之前,必须对 Magento 进行一些修复:
最后一个并没有立即起作用,但这是正确的方向。如果有人对此有疑问,请随时提问。我真的很惊讶花了这么多精力才让它运行。
谢谢 Nic,现在获取 access_token 真的很容易:)
我只是在 PHP 中使用 OAuth。希望对你有帮助。
查看此示例链接。当使用“oauth/initiate”时,oauth_callback 包含在 URL 中。双面都写
我看到其他 OAuth 标头,每个值都使用双引号作为 oauth_signature_method="HMAC-SHA1"