2010-06-04 130 views
2

我想连接到联邦快递送货webservice v8。联邦快递Webservice打印多个运输标签

一切正常,当我只有一个RequestedPackageLineItems设置。当我添加两个项目时,出现以下错误。

“包数无效或包序列号无效。”

我的代码如下

ProcessShipmentRequest request = CreatePendingShipmentRequest(); 
ShipService service = new ShipService(); 
ProcessShipmentReply reply = service.processShipment(request); 
... 

private static ProcessShipmentRequest CreatePendingShipmentRequest() 
{ 
    ProcessShipmentRequest request = new ProcessShipmentRequest(); 

    request.WebAuthenticationDetail = new WebAuthenticationDetail(); 
    request.WebAuthenticationDetail.UserCredential = new WebAuthenticationCredential(); 
    request.WebAuthenticationDetail.UserCredential.Key = "XXX"; 
    request.WebAuthenticationDetail.UserCredential.Password = "XXX";    
    request.ClientDetail = new ClientDetail(); 
    request.ClientDetail.AccountNumber = "XXX"; 
    request.ClientDetail.MeterNumber = "XXX"; 

    request.TransactionDetail = new TransactionDetail(); 
    request.TransactionDetail.CustomerTransactionId = "*** Ground Domestic Shipping Request v8 using C# ***"; 
    request.Version = new VersionId(); 

    //Inside this method I set request.RequestedShipment.PackageCount = "2"; 
    SetShipmentDetails(request); 
    SetPackageLineItems(request); 

    return request; 
} 

private static void SetPackageLineItems(ProcessShipmentRequest request) 
{     
    request.RequestedShipment.RequestedPackageLineItems = new RequestedPackageLineItem[2]; 
    request.RequestedShipment.RequestedPackageLineItems[0] = new RequestedPackageLineItem(); 
    request.RequestedShipment.RequestedPackageLineItems[0].SequenceNumber = "1"; 
    request.RequestedShipment.RequestedPackageLineItems[0].Weight = new Weight(); 
    request.RequestedShipment.RequestedPackageLineItems[0].Weight.Value = 50.0M; 
    request.RequestedShipment.RequestedPackageLineItems[0].Weight.Units = WeightUnits.LB; 
    request.RequestedShipment.RequestedPackageLineItems[0].ItemDescription = "Item"; 
    request.RequestedShipment.RequestedPackageLineItems[0].Dimensions = new Dimensions(); 
    request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Length = "108"; 
    request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Width = "5"; 
    request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Height = "5"; 
    request.RequestedShipment.RequestedPackageLineItems[0].Dimensions.Units = LinearUnits.IN; 

    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences = new CustomerReference[3]; 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[0] = new CustomerReference(); 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[0].CustomerReferenceType = CustomerReferenceType.CUSTOMER_REFERENCE; 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[0].Value = "[LOT NUMBER]"; 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[1] = new CustomerReference(); 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[1].CustomerReferenceType = CustomerReferenceType.INVOICE_NUMBER; 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[1].Value = "45646"; 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[2] = new CustomerReference(); 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[2].CustomerReferenceType = CustomerReferenceType.P_O_NUMBER; 
    request.RequestedShipment.RequestedPackageLineItems[0].CustomerReferences[2].Value = "456446"; 

    request.RequestedShipment.RequestedPackageLineItems[1] = new RequestedPackageLineItem(); 
    request.RequestedShipment.RequestedPackageLineItems[1].SequenceNumber = "2"; 
    request.RequestedShipment.RequestedPackageLineItems[1].Weight = new Weight(); 
    request.RequestedShipment.RequestedPackageLineItems[1].Weight.Value = 50.0M; 
    request.RequestedShipment.RequestedPackageLineItems[1].Weight.Units = WeightUnits.LB; 
    request.RequestedShipment.RequestedPackageLineItems[1].ItemDescription = "Item"; 
    .... 
} 

回答

3

发现了如何做到这一点。

为了将多个运输标签合并成一个pdf,过程如下。

  1. 在航运信息
  2. 后创建的请求
  3. 填写并得到答复。
  4. 保存该重播和字节数组和MasterShippingID
  5. 创建一个新请求并为其分配主装运ID。
  6. 增加运输重量和尺寸
  7. POST和GET回复
  8. 保存字节数组与其他
  9. 继续下去,直到生成所有货物(每个主航运ID最多200)
  10. 合并所有的PDF文件,从返回联邦快递成为一个PDF文件。
  11. 做一个快乐的舞蹈。
+0

Michael, 我看到了你的答案。在一次运送中做很多包裹时,这不会变得粘稠吗? 我的意思是如果你有10个包,这是否意味着你需要10个Web服务调用?没有办法在一次或两次调用中将它们一起滚动? 谢谢 – 2010-07-16 19:59:31

+0

如果你可以找到一个非常棒的方法,那么来自fedex的代码需要多个调用。对我来说这似乎也很奇怪。 我正在评价你的回应,因为在我看来这将是最好的处理方式。 – 2010-07-18 00:36:05

+2

如果你有10个包,那么你需要10个Web服务调用,是的。我知道API似乎有多个订单项的空间,但它不起作用,文档建议您制作单独的请求(传递请求2-10的主ID)。这真的很愚蠢,但我不认为他们很快就会改变它。他们似乎做出的唯一改进是每隔几个月在架构中随机重新排列和重命名元素。 (看看V9和呜咽) – 2010-08-26 23:52:22

1

一个更简单的方法(虽然有成本)是Shiprush SDK。它可以让你构建一个单一的XML块,让ShipRush用fedex(或任何人)做所有有趣的事情。

他们也支持他们的工具。