我正在尝试在C#中使用eBay Post-Order API中的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)错误请求。”如果有人能指出我正确的方向,我会非常感激。谢谢。
答案 0 :(得分:2)
我的第二个代码示例最终成为解决问题的正确方法。我意识到我的json略有偏差。我最后错过了额外的}。下面更新的json语法修复了我的第二个例子中的代码问题。
var json = "{\"legacyOrderId\":\"" + ebayFullOrderId + "\"}";
答案 1 :(得分: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;
}