2017-01-06 13 views
1

私はウォルマートのAPIに取り組んできましたが、私は、私は、コードAUTHIDから生成された署名であるC#HTTPリクエスト401と500エラー

public void post() 
    { 
     byte[] data = Encoding.ASCII.GetBytes(
$"username={user}&password={password}"); 

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://marketplace.walmartapis.com/v2/feeds?feedType=item"); 
     request.Method = "POST"; 
     request.Accept = "application/xml;"; 
     request.ContentLength = data.Length; 
     request.Headers.Add("WM_SVC.NAME", "Walmart Marketplace"); 
     request.Headers.Add(authId); 
     request.Headers.Add("WM_CONSUMER.ID", user); 
     request.Headers.Add(time); 
     request.Headers.Add(CorId); 
     using (Stream stream = request.GetRequestStream()) 
     { 
      stream.Write(data , 0, data.Length); 
     } 

     string responseContent = null; 

     using (WebResponse response = request.GetResponse()) 
     { 
      using (Stream stream = response.GetResponseStream()) 
      { 
       using (StreamReader sr99 = new StreamReader(stream)) 
       { 
        responseContent = sr99.ReadToEnd(); 
       } 
      } 
     } 

     MessageBox.Show(responseContent); 
    } 

を実行すると401エラーまたは500エラーのいずれかを取得しておきますwalmartによって提供されるjarファイル jarファイルから時刻も生成されます CorIDはランダムに生成された番号 です.userはユーザーIDです。

ここでは、ヘッダーパラメータを説明するリンクです。私の見出しに何かが恋しいですか?

https://developer.walmartapis.com/#getting-started

+0

あなたのbyte []データは、URLのパラメータを渡すために使用されるforrmatのテキストです。これは構造体のXMLエンコーディングではありません。 – Graffito

+0

[このリンク](http://stackoverflow.com/questions/39328095/walmart-seller-api-post-not-working-gives-401-unauthorized-in-php-only)が役に立つかもしれませんが、コードはphpです: (。 – Graffito

答えて

0

あなたの要求で複数の問題があります。まず、フィードを送信していますが、multipart/form-dataリクエストである場合はapplication/xmlとして送信します。これを超えてヘッダーが正しく設定されておらず、現在C#を使用してWalartに複数パート/フォームデータ要求を送信する際に大きな問題があります。私は誰もWalmartにC#経由でフィードを送っている投稿を見たことがありません。私は現在、C#を使用してバッチファイルを実行し、マルチパート/フォームデータリクエストを送信できるWalmart Java SDKの修正バージョンを起動します。

以下の返信は、フィード以外のリクエストについてのものです。ヘッダーをどのように設定する必要があるかを熟知するために、以下の例から始めます。これはWalmartインターフェースの大部分で機能しますが、リクエストがフィードスタイルのリクエストの場合は、マルチパート/フォームデータの問題を解決するために、Java SDKを使用するか、 C#SDK誰かがこれを読んで、C#経由でフィードを提出する方法についてより良い答えを得たなら、それについて聞いてみたいと思います!

次は、動作するapplication/xmlリクエストの例です。

string timestamp = CurrentTimeMillis().ToString().Trim(); 
string query = @"orders/"+poID+"/acknowledge"; 
string request = v3BaseUrl + query; //Constructed URI 

string stringToSign = consumerId  + "\n" + 
         request.Trim() + "\n" + 
         "POST"   + "\n" + 
         timestamp  + "\n"; 


string signedString = signData(stringToSign); //Your signed string 

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(request); 
webRequest.Accept = "application/xml"; 
webRequest.ContentType = "application/xml"; 
webRequest.Method = "POST"; 
webRequest.Headers.Add("WM_SVC.NAME", "Walmart Marketplace"); 
webRequest.Headers.Add("WM_SEC.AUTH_SIGNATURE", signedString); 
webRequest.Headers.Add("WM_CONSUMER.ID", consumerId); 
webRequest.Headers.Add("WM_SEC.TIMESTAMP", timestamp.ToString().Trim()); 
webRequest.Headers.Add("WM_QOS.CORRELATION_ID", Guid.NewGuid().ToString()); 
webRequest.Headers.Add("WM_CONSUMER.CHANNEL.TYPE", channelType); 
webRequest.ContentLength = 0; 
webRequest.Timeout = Timeout.Infinite; 
webRequest.KeepAlive = true; 

using (HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse()) 
{ 
    if (response.StatusCode == HttpStatusCode.OK) 
    { 
     success = true; 
    } 
}