2017-04-26 6 views
2

C#のeBay Post-Order APIからのcheck_eligibility呼び出しを非常にうまく使用しようとしています。たびに私は悪い返答を得る。ここで私が試した一つの方法です:HttpWebRequestを使用したEbay API post-order check_eligibility

string url = "https://api.ebay.com/post-order/v2/cancellation/check_eligibility"; 
     HttpWebRequest cancelOrderRequest = (HttpWebRequest)WebRequest.Create(url); 

     cancelOrderRequest.Headers.Add("Authorization", "TOKEN " + AuthToken); 
     cancelOrderRequest.ContentType = "application/json"; 
     cancelOrderRequest.Accept = "application/json"; 
     cancelOrderRequest.Headers.Add("X-EBAY-C-MARKETPLACE-ID", "EBAY_US"); 

     cancelOrderRequest.Headers.Add("legacyOrderId", ebayFullOrderId); 

     cancelOrderRequest.Method = "POST"; 


     HttpWebResponse response = (HttpWebResponse)cancelOrderRequest.GetResponse(); 

そして、ここで私が試した別の方法である:関係なく、私がしようとしている道の

string url = "https://api.ebay.com/post-order/v2/cancellation/check_eligibility"; 
     var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
     httpWebRequest.ContentType = "application/json"; 
     httpWebRequest.Method = "POST"; 
     httpWebRequest.Headers.Add("Authorization", "TOKEN " + AuthToken); 
     httpWebRequest.Headers.Add("X-EBAY-C-MARKETPLACE-ID", "EBAY_US"); 
     httpWebRequest.Accept = "application/json"; 

     using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
     { 
      string json = "{\"legacyOrderId\":\"###-###\""; 

      streamWriter.Write(json); 
      streamWriter.Flush(); 
      streamWriter.Close(); 
     } 

     var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
     using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      var result = streamReader.ReadToEnd(); 
     } 

両方が戻って同じメッセージとなった、「リモートサーバーがエラーを返しました:(400)Bad Request。 "誰かが正しい方向に私を指すことができれば、私はそれを非常に感謝します。ありがとう。

答えて

2

私の2番目のコード例は、私の問題を解決する正しい方法ことになりました。私が気づいたのは私のjsonがややオフだったということです。私は最後に余分な}を欠いていました。以下のように更新されたjsonの構文は、私の第2の例のコードで問題を解決しました。

0

このコードを試してください:

private void MakeRequests() 
{ 
    HttpWebResponse response; 

    if (RequestEbay(out response)) 
    { 
     response.Close(); 
    } 
} 

private bool RequestEbay(out HttpWebResponse response) 
{ 
    response = null; 

    try 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.ebay.com/ws/api.dll"); 

     request.Headers.Add("X-EBAY-API-SITEID", @"0"); 
     request.Headers.Add("X-EBAY-API-COMPATIBILITY-LEVEL", @"967"); 
     request.Headers.Add("X-EBAY-API-CALL-NAME", @"GetOrders"); 

     request.Method = "POST"; 
     request.ServicePoint.Expect100Continue = false; 

     string body = @"<?xml version=""1.0"" encoding=""utf-8""?> 
     <GetOrdersRequest xmlns=""urn:ebay:apis:eBLBaseComponents""> 
      <RequesterCredentials> 
      <eBayAuthToken>!!!!!!!!!!!!!!!!YOUR EBAY TOKEN!!!!!!!!!!!!!!!!1</eBayAuthToken> 
      </RequesterCredentials> 
     <ErrorLanguage>en_US</ErrorLanguage> 
     <WarningLevel>High</WarningLevel> 
      <CreateTimeFrom>2016-12-01T19:09:02.768Z</CreateTimeFrom> 
      <CreateTimeTo>2017-12-15T19:09:02.768Z</CreateTimeTo> 
      <OrderRole>Seller</OrderRole> 
     </GetOrdersRequest>"; 
       byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); 
       request.ContentLength = postBytes.Length; 
       Stream stream = request.GetRequestStream(); 
       stream.Write(postBytes, 0, postBytes.Length); 
       stream.Close(); 

       response = (HttpWebResponse)request.GetResponse(); 
    } 
    catch (WebException e) 
    { 
     if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; 
     else return false; 
    } 
    catch (Exception) 
    { 
     if(response != null) response.Close(); 
     return false; 
    } 

    return true; 
}