C# 使用沃尔玛市场API源上载项目时出错
我正在尝试使用沃尔玛市场API上传商品(批量创建商品) 但始终会得到一个响应,即500内部服务器错误。有什么想法吗? 其他Api函数可以,但此函数不行。。 实际上,其他人使用的方法是“application/xml”,但这是“multipart/formdata” 请注意,下面代码中的XML字符串/示例取自,然后我更改了IDs属性C# 使用沃尔玛市场API源上载项目时出错,c#,multipartform-data,marketplace,datafeed,walmart-api,C#,Multipartform Data,Marketplace,Datafeed,Walmart Api,我正在尝试使用沃尔玛市场API上传商品(批量创建商品) 但始终会得到一个响应,即500内部服务器错误。有什么想法吗? 其他Api函数可以,但此函数不行。。 实际上,其他人使用的方法是“application/xml”,但这是“multipart/formdata” 请注意,下面代码中的XML字符串/示例取自,然后我更改了IDs属性 public bool RequestUpdateItem() { string strBaseUr
public bool RequestUpdateItem()
{
string strBaseUrl = string.Format("https://marketplace.walmartapis.com/v2/feeds?feedType=item");
string strRequestMethod = "POST";
WalmartSignature Signature = new WalmartSignature(consumerId, privateEncodedStr, strBaseUrl, strRequestMethod);
string strSignature = string.Empty;
HttpWebRequest httpWebRequest = null;
HttpWebResponse httpWebResponse = null;
WalmartOrderModel orderModel = new WalmartOrderModel();
StringBuilder strBuilder = new StringBuilder();
bool bReturnValue = false;
try
{
strSignature = Signature.GetSignature(null); // null -> generate timestamp
httpWebRequest = (HttpWebRequest)WebRequest.Create(strBaseUrl);
httpWebRequest.Method = strRequestMethod;
httpWebRequest.Accept = "application/xml";
httpWebRequest.ContentType = "multipart/form-data;";
httpWebRequest.Headers.Add("WM_SVC.NAME", "Walmart Marketplace");
httpWebRequest.Headers.Add("WM_SEC.AUTH_SIGNATURE", strSignature);
httpWebRequest.Headers.Add("WM_CONSUMER.ID", Signature.ConsumerId);
httpWebRequest.Headers.Add("WM_SEC.TIMESTAMP", Signature.TimeStamp);
httpWebRequest.Headers.Add("WM_QOS.CORRELATION_ID", Guid.NewGuid().ToString());
string strRequestBody =
@"<?xml version=""1.0"" encoding=""UTF-8""?>
<MPItemFeed xmlns=""http://walmart.com/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:schemaLocation=""http://walmart.com/MPItem.xsd"">
<MPItemFeedHeader>
<version>2.1</version>
<requestId>333pecEl55nics</requestId>
<requestBatchId>333ecElect55cs38</requestBatchId>
</MPItemFeedHeader>
<MPItem>
<sku>BDK72wsd44f</sku>
<Product>
<productName>QVS</productName>
<longDescription>QVS</longDescription>
<shelfDescription>QVS</shelfDescription>
<shortDescription>QVS</shortDescription>
<mainImage>
<mainImageUrl>http://images.antonline.com/img-main/500/037229400328.jpg</mainImageUrl>
</mainImage>
<productIdentifiers>
<productIdentifier>
<productIdType>UPC</productIdType>
<productId>220740171234</productId>
</productIdentifier>
</productIdentifiers>
<productTaxCode>2038710</productTaxCode>
<additionalProductAttributes>
<additionalProductAttribute>
<productAttributeName>product_id_override</productAttributeName>
<productAttributeValue>true</productAttributeValue>
</additionalProductAttribute>
</additionalProductAttributes>
<Electronics>
<brand>QVS</brand>
<ElectronicsCables>
</ElectronicsCables>
</Electronics>
</Product>
<price>
<currency>USD</currency>
<amount>99.29</amount>
</price>
<shippingWeight>
<value>0.12</value>
<unit>LB</unit>
</shippingWeight>
</MPItem>
</MPItemFeed>";
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(strRequestBody);
writer.Flush();
stream.Position = 0;
httpWebRequest.ContentLength = stream.Length;
using (Stream requestStream = httpWebRequest.GetRequestStream())
{
stream.CopyTo(requestStream);
//requestStream.Write(stream, 0, stream.Length);
httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
if (httpWebResponse.StatusCode == HttpStatusCode.OK)
{
Stream streamResponse = httpWebResponse.GetResponseStream();
var responseResult = XDocument.Load(streamResponse);
}
}
}
catch (Exception ex)
{
Console.WriteLine("RequestUpdateItem(): " + ex);
}
return bReturnValue;
}
public bool RequestUpdateItem()
{
string strBaseUrl=string.Format(“https://marketplace.walmartapis.com/v2/feeds?feedType=item");
字符串strRequestMethod=“POST”;
WalmartSignature=新的WalmartSignature(consumerId、privateEncodedStr、strBaseUrl、strRequestMethod);
string strSignature=string.Empty;
HttpWebRequest HttpWebRequest=null;
HttpWebResponse HttpWebResponse=null;
WalmartOrderModel orderModel=新的WalmartOrderModel();
StringBuilder strBuilder=新StringBuilder();
布尔值=假;
尝试
{
strSignature=Signature.GetSignature(null);//null->生成时间戳
httpWebRequest=(httpWebRequest)WebRequest.Create(strBaseUrl);
httpWebRequest.Method=strRequestMethod;
httpWebRequest.Accept=“application/xml”;
httpWebRequest.ContentType=“多部分/表单数据;”;
httpWebRequest.Headers.Add(“WM_SVC.NAME”,“沃尔玛市场”);
httpWebRequest.Headers.Add(“WM_SEC.AUTH_签名”,strSignature);
httpWebRequest.Headers.Add(“WM_CONSUMER.ID”,Signature.ConsumerId);
httpWebRequest.Headers.Add(“WM_SEC.TIMESTAMP”,Signature.TIMESTAMP);
httpWebRequest.Headers.Add(“WM_QOS.CORRELATION_ID”,Guid.NewGuid().ToString());
字符串strRequestBody=
@"
2.1
333pecEl55nics
333ecElect55cs38
BDK72wsd44f
QVS
QVS
QVS
QVS
http://images.antonline.com/img-main/500/037229400328.jpg
UPC
220740171234
2038710
产品标识覆盖
真的
QVS
美元
99.29
0.12
磅
";
MemoryStream stream=新的MemoryStream();
StreamWriter writer=新StreamWriter(流);
writer.Write(strRequestBody);
writer.Flush();
流位置=0;
httpWebRequest.ContentLength=stream.Length;
使用(Stream requestStream=httpWebRequest.GetRequestStream())
{
CopyTo(requestStream);
//requestStream.Write(stream,0,stream.Length);
httpWebResponse=(httpWebResponse)httpWebRequest.GetResponse();
if(httpWebResponse.StatusCode==HttpStatusCode.OK)
{
streamResponse=httpWebResponse.GetResponseStream();
var responseResult=XDocument.Load(streamResponse);
}
}
}
捕获(例外情况除外)
{
WriteLine(“RequestUpdateItem():”+ex);
}
返回值;
}
Fixed link有没有发现这个问题?我想你也应该使用多部分/表单数据发送一个文件,但是我得到了类似的错误我在请求体(XML)上添加了“--BOUNDARY--”字符串,比如“@”BOUNDARY--…--BOUNDARY--”,BOUNDARY的东西表示开始和结束的位置。