2017-04-26 6 views
2

Ich versuche, den check_eligibility-Aufruf von der eBay Post-Bestell-API in C# sehr erfolglos zu verwenden. Jedes Mal bekomme ich eine schlechte Antwort. Hier ist eine Möglichkeit, die ich habe versucht:C# Ebay API Nachbestellung check_eligibility mit HttpWebRequest

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(); 

Und hier ist eine andere Art und Weise habe ich versucht:

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(); 
     } 

Unabhängig davon, welche Art und Weise ich versuche, beide kamen zurück mit der gleichen Botschaft: „Die Fern Server hat einen Fehler zurückgegeben: (400) Ungültige Anforderung. " Wenn mir jemand in die richtige Richtung zeigen könnte, würde ich es sehr schätzen. Vielen Dank.

Antwort

2

Mein zweites Codebeispiel endet als der richtige Weg, um mein Problem zu lösen. Was ich bemerkte, war, dass mein Json etwas abseits war. Ich habe das Extra am Ende vermisst. Die unten aktualisierte json-Syntax hat mein Problem mit dem Code aus meinem zweiten Beispiel behoben.

0

Bitte versuchen Sie diesen Code:

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; 
}