将Feed上传到walmart

时间:2017-05-05 02:05:16

标签: c# rest restsharp walmart-api

我试图将一个Feed上传到walmart,经过多次尝试我使用postman为我生成C#restsharp代码,在postman中它可以工作,但是在使用c#restsharp代码时它会返回一个神秘的错误。像这样: "没有为响应类FeedAcknowledgement找到消息正文撰稿人"

这是什么意思?

这是我的代码:

 string requestUrl = "";
        requestUrl = string.Format("https://marketplace.walmartapis.com/v2/feeds?feedType=inventory");

        string method = "POST";

        // string[] sig = getSig(method, requestUrl).Replace("\r", "").Split('\n');

        var mySig = new Signature(ConsumerID, SecretKEY, requestUrl, method);
        var s = mySig.TimeStamp;
        var returendSigniture = mySig.GetSignature(s);

        var client = new RestClient("https://marketplace.walmartapis.com/v2/feeds?feedType=inventory");
        var request = new RestRequest(Method.POST);
        //request.AddHeader("postman-token", "c325ba5f-813a-f990-7899-6bfc4b14aa1b");
        request.AddHeader("cache-control", "no-cache");
        request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
        request.AddHeader("accept", "application/xml");
        request.AddHeader("wm_consumer.id", "--");
        request.AddHeader("wm_sec.auth_signature", returendSigniture);
        request.AddHeader("wm_sec.timestamp", mySig.TimeStamp);
        request.AddHeader("wm_qos.correlation_id", "123456abcdef");
        request.AddHeader("wm_svc.name", "Walmart Marketplace");
        request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"BOUNDERY\"\r\n\r\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<wm:inventory xmlns:wm=\"http://walmart.com/\">\n  <wm:sku>PP00500-2PC</wm:sku>\n  <wm:quantity>\n    <wm:unit>EACH</wm:unit>\n    <wm:amount>120</wm:amount>\n  </wm:quantity>\n  <wm:fulfillmentLagTime>1</wm:fulfillmentLagTime>\n</wm:inventory>\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
        IRestResponse response = client.Execute(request);

2 个答案:

答案 0 :(得分:0)

我花了一整天时间来弄清楚如何申请沃尔玛v3。我建议你做以下两个步骤:

  1. 使用Walmart signer生成签名令牌。
  2. 您将需要使用HttpWebRequest以类似于描述here的方式获取沃尔玛的回复。

答案 1 :(得分:0)

我无法让它在C#中本地工作,但我确实有一个解决方法。

Java SDK可以成功向沃尔玛提交多部分请求。我编写了一个SDK函数的包装器,它可以接受基本的命令行输入来读取文本文件并发送带有附加文件的相应调用。从这里,您可以从C#程序中调用.jar文件(我通过动态生成的批处理文件执行),并通过文本文件接收响应。这是一个次优系统,但它可靠地运行,当选择每天更新2000个项目的库存和使用一些脏代码之间时,我选择了Java包装器方法。一旦C#SDK问世,这将被取代,但我相信这是C#SDK可能被延迟的原因之一。

使用此解决方案后,才花费大约一周时间尝试使边界/流/附件在C#中工作并且没有成功。案件也提交给沃尔玛,我能够与他们的一些顶级工程支持人员合作,这个问题完全困扰他们。我能够将Java SDK执行一直追溯到构建Web请求的内置Maven / Java函数,因此Java正在做一些事情,而C语言中的多部分请求并不是很明显。