2017-04-26 3 views
2

C#의 eBay Post-Order API에서 check_eligibility 호출을 사용하는 데 실패했습니다. 때마다 나는 나쁜 반응을 얻는다. 여기에 내가 해봤 한 방법입니다 :HttpWebRequest를 사용하여 C# 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) 잘못된 요청입니다. " 누군가가 올바른 방향으로 나를 가리킬 수 있다면 크게 감사하겠습니다. 감사.

답변

2

내 두 번째 코드 예제 내 문제를 해결하는 올바른 방법 었죠. 내가 깨달은 것은 내 아들이 약간 벗어났다는 것이다. 나는 마지막에 여분의}을 놓쳤다. 아래 업데이트 된 json 구문을 사용하면 두 번째 예제의 코드로 문제가 해결되었습니다.

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