アマゾンウェブサービスのGetAuthTokenメソッドが機能しない

ジャック

GetAuthToken()メソッドでアマゾンウェブサービスにアクセスしようとしています。しかし、署名を取得するたびにエラーが修正されません。このエラーが発生するたびに。正確な理由が見つかりません

誰かがこれの実用的な例を共有したり、私がここで何をしているのかを見ることができますか?

私のコード:

 private void GetToken()
{
    string secretKey = "my secret key";       
    string serviceUrl = "https://mws.amazonservices.com/Sellers/2011-07-01";
    string CHARACTER_ENCODING = "UTF-8";
    string ALGORITHM = "HmacSHA256";

    // Create set of parameters needed and store in a map
    Dictionary<string, string> parameters = new Dictionary<string,string>();

    // Add required parameters. Change these as needed.
    parameters.Add("AWSAccessKeyId", "my access id");
    parameters.Add("Action","GetAuthToken");
    parameters.Add("MWSAuthToken", "");
    parameters.Add("SellerId","my seller id");
    parameters.Add("SignatureMethod", ALGORITHM);
    parameters.Add("SignatureVersion",("2");

    parameters.Add("Timestamp", "2015-07-06T16:03:00Z");
    parameters.Add("Version", "2011-07-01");

    // Format the parameters (without the signature parameter)
    string formattedParameters = calculateStringToSignV2(parameters, serviceUrl);

    string signature = signNew(formattedParameters, secretKey);

    // Add signature to the parameters 
    parameters.Add("Signature", signature);

    formattedParameters = calculateStringToSignV2(parameters, serviceUrl);



    string querystring = formattedParameters.Substring(formattedParameters.IndexOf("AWSAccessKeyId"));


      // Setup the HTTP request.
    HttpWebRequest objWebRequest = (HttpWebRequest)WebRequest.Create(serviceUrl + "?" + querystring);
    objWebRequest.Method = "POST";
    objWebRequest.AllowAutoRedirect = true;
    objWebRequest.ContentLength = querystring.Length;

    // Post to the login form.
    StreamWriter swRequestWriter = new StreamWriter(objWebRequest.GetRequestStream());
    swRequestWriter.Write(querystring);
    swRequestWriter.Close();
    HttpWebResponse objWebResponse = null;
    try
    {
        // Get the response.
        objWebResponse =
            (HttpWebResponse)objWebRequest.GetResponse();
    }
    catch(WebException e)
    {

    }
    // Read the response
    StreamReader srResponseReader = new
        StreamReader(objWebResponse.GetResponseStream());
    string strResponseData = srResponseReader.ReadToEnd();
    srResponseReader.Close();

    responseTxt.Text =strResponseData;



private static string calculateStringToSignV2(Dictionary<string, string> _Parameters, string serviceUrl)
{


    Uri endpoint = new Uri(serviceUrl.ToLower());
    StringBuilder data = new StringBuilder();
    data.Append("POST\n");
    data.Append(endpoint.Host);
    data.Append("\n/");
    data.Append("\n");

    SortedDictionary<string, string> sorted = new SortedDictionary<string, string>();
    foreach (KeyValuePair<String, String> pair in _Parameters)
    {
        sorted.Add(pair.Key, pair.Value);
    }


    if (sorted.Count > 0)
    {
        //data.Append("?");
        bool first = true;
        foreach (KeyValuePair<String, String> pair in sorted)
        {
            if (!first)
            {
                data.Append("&");
            }
            else
            {
                first = false;
            }
            data.Append((pair.Key));
            data.Append("=");
            data.Append((pair.Value));
        }
    }

    return data.ToString();
}

}

  private static String signNew(string parameters, string secretKey)
     {           

         string data = parameters;

         HMACSHA256 hmac = new    HMACSHA256(Encoding.UTF8.GetBytes(secretKey));
         hmac.Initialize();

         byte[] bytes = Encoding.UTF8.GetBytes(data);
         byte[] signature = hmac.ComputeHash(bytes);

         string signatureBase64 = Convert.ToBase64String(signature);

         return signatureBase64;           
  }

  private static String urlEncodeNew(String rawValue) {

    string value = (rawValue == null) ? "" : rawValue;
    string encoded = null;

    try {
        encoded = System.Web.HttpUtility.UrlEncode(rawValue, Encoding.UTF8).Replace("+", "%20")
            .Replace("*", "%2A")
            .Replace("%7E", "~");


    } catch (Exception e) {

    }

    return encoded;
}    
umair

多くの理由が考えられます:

  1. あなたのコードは間違ったURLを使用していました

  2. 間違ったパラメータ「MWSAuthToken」

  3. 正しいパラメータ値を渡しているかどうかを確認してください

  4. 署名をどのように計算しているかを確認してください。


Amazonは独自のライブラリを公開しています:ここからダウンロードしてください

ライブラリをダウンロードしたら、ソリューションに「MWSClientCsRuntime-1.0.dll」の参照を追加します。

使用できる方法は2つあります。

  1. MWSClientCsRuntime.MwsUtil.UrlEncode(これは文字をエンコードするためのものです)
  2. MWSClientCsRuntime.MwsUtil.Sign(これは署名用です)

完全に調整されたコード:

 private void GetToken()
 {
     string secretKey = "your secret key";
     string serviceUrl = "https://mws.amazonservices.com/Sellers/2011-07-01";
     string CHARACTER_ENCODING = "UTF-8";
     string ALGORITHM = "HmacSHA256";

     Dictionary<string, string> parameters = new Dictionary<string, string>();

    parameters.Add("AWSAccessKeyId", MWSClientCsRuntime.MwsUtil.UrlEncode("your access key", true));
    parameters.Add("Action", MWSClientCsRuntime.MwsUtil.UrlEncode("GetAuthToken", true));
    parameters.Add("SellerId", MWSClientCsRuntime.MwsUtil.UrlEncode("your seller id", true));
    parameters.Add("SignatureMethod", MWSClientCsRuntime.MwsUtil.UrlEncode(ALGORITHM, true));
    parameters.Add("SignatureVersion", MWSClientCsRuntime.MwsUtil.UrlEncode("2", true));
    parameters.Add("Timestamp", MWSClientCsRuntime.MwsUtil.UrlEncode(("2015-07-06T17:13:00Z", true)); 
    parameters.Add("Version", MWSClientCsRuntime.MwsUtil.UrlEncode("2011-07-01", true));


    string formattedParameters = calculateStringToSignV2(parameters, serviceUrl);

    Uri u = new Uri("https://mws.amazonservices.com");
    string signature = MWSClientCsRuntime.MwsUtil.Sign(formattedParameters, secretKey, ALGORITHM);

    // Add signature to the parameters
    parameters.Add("Signature", MWSClientCsRuntime.MwsUtil.UrlEncode(signature, true));
    formattedParameters = calculateStringToSignV2(parameters, serviceUrl);

    string data = formattedParameters.Substring(formattedParameters.IndexOf("AWSAccessKeyId"));

    HttpWebRequest objWebRequest = (HttpWebRequest)WebRequest.Create(serviceUrl + "?" + data);
    objWebRequest.Method = "POST";
    objWebRequest.AllowAutoRedirect = true;
    objWebRequest.ContentLength = data.Length;

    StreamWriter swRequestWriter = new StreamWriter(objWebRequest.GetRequestStream());
    swRequestWriter.Write(data);
    swRequestWriter.Close();
    HttpWebResponse objWebResponse = null;
    try
    {
        // Get the response.
        objWebResponse =
            (HttpWebResponse)objWebRequest.GetResponse();

        StreamReader srResponseReader = new StreamReader(objWebResponse.GetResponseStream());
        string strResponseData = srResponseReader.ReadToEnd();
        srResponseReader.Close();

        responseTxt.Text = strResponseData;
    }
    catch (WebException e)
    {
        responseTxt.Text = e.Message;
    }


  private static string calculateStringToSignV2(Dictionary<string, string> _Parameters, string serviceUrl)
{

    Uri endpoint = new Uri(serviceUrl.ToLower());
    StringBuilder data = new StringBuilder();
    data.Append("POST\n");
    data.Append(endpoint.Host);
    data.Append("\n");
    data.Append("/Sellers/2011-07-01");
    data.Append("\n");

    if (_Parameters.Count > 0)
    {
        bool first = true;
        foreach (KeyValuePair<String, String> pair in _Parameters)
        {
            if (!first)
            {
                data.Append("&");
            }
            else
            {
                first = false;
            }
            data.Append((pair.Key));
            data.Append("=");
            data.Append((pair.Value));
        }
    }

    return data.ToString();
   }
 }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Crontabが機能しない-EC2-アマゾンウェブサービス(aws)-Ubuntu

分類Dev

クレジットカード情報のないアマゾンウェブサービス(AWS)アカウント(試用版)

分類Dev

クレジットカード情報のないアマゾンウェブサービス(AWS)アカウント(試用版)

分類Dev

アマゾンウェブサービスでのロードバランサーのセットアップ

分類Dev

別のサーバーを指すサブドメインのSSL証明書(アマゾンウェブサービス)-セットアップ

分類Dev

ブートストラップのドロップダウンサブメニューが機能しない

分類Dev

タイマーのフェードアウト内のJqueryアニメーションまたはスライドアップが機能しない

分類Dev

ウェブサイトのグリッドビューでステートメントを選択しても機能しない

分類Dev

アマゾンウェブサービスSESでのメール転送

分類Dev

アマゾン ウェブ サービスをテスト目的でどのように使用できますか [カードによる支払いなし]

分類Dev

アマゾンウェブサービスコンソールにラムダ関数コードをアップロードする際の問題

分類Dev

マテリアライズ:「if」ステートメントのドロップダウンが機能しない

分類Dev

マウスオーバーjqueryメソッドが機能しない

分類Dev

サインイン、私のウェブサイトのサインアップ機能が機能しない

分類Dev

アマゾンウェブサービスでのホスティングについて混乱している

分類Dev

アマゾンウェブサービス(AWS)のDjango

分類Dev

アマゾンウェブサービスRESTApiの問題

分類Dev

アマゾンウェブサービスS3でバケットとリソースへのアクセスを保護しますか?

分類Dev

ウェブサイトのJSメニューアニメーションが機能しない

分類Dev

マングースの「スキーマメソッド」コールバックが機能しない

分類Dev

アマゾンウェブサービス(EC2、ELBなど)の代替としてのGoogle Compute Engine

分類Dev

Netty オブジェクト エコーの例サーバーの channelRead メソッドがカスタム オブジェクトで機能しない

分類Dev

Railsのブートストラップタブ。タブのドロップゾーンが機能しない

分類Dev

バックグラウンドサービスが機能しない-Android

分類Dev

拡張スキーママングースの継承メソッド「仮想」が機能しない

分類Dev

ウェブサイトでの画像のアップロード/表示が機能しない

分類Dev

Typescriptインターフェイスメソッドのオーバーロードが機能しない

分類Dev

AndroidウェアラブルラウンドスクリーンのBoxInsetLayoutがTheme.AppCompatで機能しない

分類Dev

フォアグラウンド通知サービスが1つ以上のデバイスで機能しない

Related 関連記事

  1. 1

    Crontabが機能しない-EC2-アマゾンウェブサービス(aws)-Ubuntu

  2. 2

    クレジットカード情報のないアマゾンウェブサービス(AWS)アカウント(試用版)

  3. 3

    クレジットカード情報のないアマゾンウェブサービス(AWS)アカウント(試用版)

  4. 4

    アマゾンウェブサービスでのロードバランサーのセットアップ

  5. 5

    別のサーバーを指すサブドメインのSSL証明書(アマゾンウェブサービス)-セットアップ

  6. 6

    ブートストラップのドロップダウンサブメニューが機能しない

  7. 7

    タイマーのフェードアウト内のJqueryアニメーションまたはスライドアップが機能しない

  8. 8

    ウェブサイトのグリッドビューでステートメントを選択しても機能しない

  9. 9

    アマゾンウェブサービスSESでのメール転送

  10. 10

    アマゾン ウェブ サービスをテスト目的でどのように使用できますか [カードによる支払いなし]

  11. 11

    アマゾンウェブサービスコンソールにラムダ関数コードをアップロードする際の問題

  12. 12

    マテリアライズ:「if」ステートメントのドロップダウンが機能しない

  13. 13

    マウスオーバーjqueryメソッドが機能しない

  14. 14

    サインイン、私のウェブサイトのサインアップ機能が機能しない

  15. 15

    アマゾンウェブサービスでのホスティングについて混乱している

  16. 16

    アマゾンウェブサービス(AWS)のDjango

  17. 17

    アマゾンウェブサービスRESTApiの問題

  18. 18

    アマゾンウェブサービスS3でバケットとリソースへのアクセスを保護しますか?

  19. 19

    ウェブサイトのJSメニューアニメーションが機能しない

  20. 20

    マングースの「スキーマメソッド」コールバックが機能しない

  21. 21

    アマゾンウェブサービス(EC2、ELBなど)の代替としてのGoogle Compute Engine

  22. 22

    Netty オブジェクト エコーの例サーバーの channelRead メソッドがカスタム オブジェクトで機能しない

  23. 23

    Railsのブートストラップタブ。タブのドロップゾーンが機能しない

  24. 24

    バックグラウンドサービスが機能しない-Android

  25. 25

    拡張スキーママングースの継承メソッド「仮想」が機能しない

  26. 26

    ウェブサイトでの画像のアップロード/表示が機能しない

  27. 27

    Typescriptインターフェイスメソッドのオーバーロードが機能しない

  28. 28

    AndroidウェアラブルラウンドスクリーンのBoxInsetLayoutがTheme.AppCompatで機能しない

  29. 29

    フォアグラウンド通知サービスが1つ以上のデバイスで機能しない

ホットタグ

アーカイブ