GETフィルターでMagento Rest APIを使用しているときのoauth_signatureの無効なエラー


7

次のようなGETフィルターを使用すると、Magento REST APIから注文を取得するのに苦労しています http://localhost/magento/api/rest/orders/?filter[1][attribute]=entity_id&filter[1][gt]=70&page=1&limit=100

それは与えています "error":[{"code":401,"message":"oauth_problem=signature_invalid"}]

PostmanのようなRESTクライアントを使用して同じAPIエンドポイントにアクセスしようとすると、目的の結果のJSONが返されます。

フィルタークエリの角かっこが、Oauth署名の生成で問題を引き起こしているのではないかと思います。GETフィルターのないすべてのエンドポイントは正常に機能しています。リクエストノードモジュールを使用して、oauthヘッダーを含むGETリクエストを作成しています。

署名無効エラーを回避するための修正はありますか?


この質問に対する答えはありますか、またはフィルターを適用する方法を見つけましたか?私も同じ問題に直面しています
UmeshR 2015

問題は、OAuth署名の生成に使用していたリクエストノードモジュール内にありました。URLの角括弧は考慮されませんでした。角かっこを含めるためにモジュールのコードを変更しました。使用しているOAuth署名の生成方法を確認してください。
スリカンス2015

それは、時間を費やして解決した直後です。ポインタをありがとうございます。
UmeshR 2015

私は同じ問題を抱えています。クエリ文字列に角かっこが含まれている場合、署名は無効です。どのようにしてそれを解決しましたか?ありがとうございます。

私も同じ問題を抱えています。どのように解決しましたか?角括弧は正しくエンコードされており、クエリ文字列パラメーターの順序は問題ありませんが、それでも無効な署名が表示されます。
Gustavo Piucco 16

回答:


3

パラメータの名前と値をエンコードできましたか?

私もこの問題を抱えていて、これが助けになりました。

署名ベース文字列パラメーターがパラメーター名のアルファベット順になっていることを確認する必要があります

これは、署名ベースでパラメーターをエンコードするために使用しているものです。

var result = new StringBuilder();
string webUnreservedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";
foreach (char symbol in url)
{
    if (webUnreservedChars.IndexOf(symbol) != -1)
        result.Append(symbol);
    else
        result.Append('%' + ((int)symbol).ToString("X2"));
}
return result.ToString();

お役に立てれば :)


Magento SEへようこそ。ご回答有難うございます。これは古い質問への回答ですが、他のユーザーにとっても役立つ場合があります:)
Julien Lachal

0

magentoコア機能vendor / magento / framework / Oauth / Oauth.phpに問題があります。行番号199をコメント化してください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.