2016-08-23 53 views
1

嗨,我在玩shippo api。我有5个默认载波全部处于活动状态并处于测试模式。问题是,当我创建一个货件并检查所有费率时,我只是获得了USPS费率,并且我希望所有运营商的费率和比较费用。有任何想法吗 ?问候shippo api没有返回来自活跃运营商的所有费率

确定没有为那些谁是要求它

using System; 
using Shippo; 
using System.Collections; 
using Newtonsoft.Json.Linq; 
using System.Linq; 


namespace ShippoApiTest 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     string shippoPrivateAuthToken = "xxxxxxxxxxxxxxxxxxxxxxxxxx"; 

     try 
     { 
      APIResource resource = new APIResource(shippoPrivateAuthToken); 

      Hashtable carriers = new Hashtable(); 
      carriers.Add("results", "20"); 
      var carriersAccounts = resource.AllCarrierAccount(carriers); 

      foreach (var item in carriersAccounts.Data) 
       Console.WriteLine(item.Carrier + " ----> " + item.AccountId + " -----> " + item.Active); 

      // to address 
      Hashtable toAddressTable = new Hashtable(); 
      toAddressTable.Add("object_purpose", "PURCHASE"); 
      toAddressTable.Add("name", "Mr. Hippo"); 
      toAddressTable.Add("company", "Shippo"); 
      toAddressTable.Add("street1", "955 Benecia Avenue"); 
      toAddressTable.Add("city", "Sunnyvale"); 
      toAddressTable.Add("state", "CA"); 
      toAddressTable.Add("zip", "94085"); 
      toAddressTable.Add("country", "US"); 
      toAddressTable.Add("phone", "555 341 9393"); 
      toAddressTable.Add("email", "[email protected]"); 

      // from address 
      Hashtable fromAddressTable = new Hashtable(); 
      fromAddressTable.Add("object_purpose", "PURCHASE"); 
      fromAddressTable.Add("name", "Ms Hippo"); 
      fromAddressTable.Add("company", "San Diego Zoo"); 
      fromAddressTable.Add("street1", "503 Pine Street"); 
      fromAddressTable.Add("city", "San Diego"); 
      fromAddressTable.Add("state", "GA"); 
      fromAddressTable.Add("zip", "31312"); 
      fromAddressTable.Add("country", "US"); 
      fromAddressTable.Add("email", "[email protected]"); 
      fromAddressTable.Add("phone", "619 231 1515"); 
      fromAddressTable.Add("metadata", "Customer ID 123456"); 


      // parcel 
      Hashtable parcelTable = new Hashtable(); 
      parcelTable.Add("length", "5"); 
      parcelTable.Add("width", "5"); 
      parcelTable.Add("height", "5"); 
      parcelTable.Add("distance_unit", "in"); 
      parcelTable.Add("weight", "2"); 
      parcelTable.Add("mass_unit", "lb"); 

      // shipment 
      Hashtable shipmentTable = new Hashtable(); 
      shipmentTable.Add("address_to", toAddressTable); 
      shipmentTable.Add("address_from", fromAddressTable); 
      shipmentTable.Add("parcel", parcelTable); 
      shipmentTable.Add("object_purpose", "PURCHASE"); 
      shipmentTable.Add("async", false); 

      var allCarriersAccounts = carriersAccounts.Data.Select(c => c.ObjectId).ToArray(); 

      shipmentTable.Add("carrier_accounts", allCarriersAccounts); 

      // create Shipment object 
      Console.WriteLine("Creating Shipment object.."); 
      Shipment shipment = resource.CreateShipment(shipmentTable); 

      // select desired shipping rate according to your business logic 
      // we simply select the first rate in this example    
      //Rate rate = shipment.RatesList[0]; 
      //var rates = resource.AllRates(shipmentTable); 

      foreach (var rate in shipment.RatesList) 
      { 
       Console.WriteLine((string)rate.Amount); 
       Console.WriteLine((string)rate.AmountLocal); 
       Console.WriteLine((string)rate.Currency); 
       Console.WriteLine((string)rate.CurrencyLocal); 
       Console.WriteLine((string)rate.Provider); 
       Console.WriteLine((bool)rate.Trackable); 
       Console.WriteLine((long)rate.Days); 
       Console.WriteLine((string)rate.DurationTerms); 
       Console.WriteLine((bool)rate.Insurance); 

       Console.WriteLine((bool)rate.Insurance); 
       Console.WriteLine((string)rate.ServicelevelName); 
       Console.WriteLine((string)rate.ServicelevelTerms); 

       Console.WriteLine("Attributes: "); 
       foreach (var attr in new JArray(rate.Attributes)) 
        foreach (var token in attr.Children()) 
         Console.Write(token); 

       Console.WriteLine("\n\n\n"); 
      } 

      var currentRate = shipment.RatesList[0]; 

      Console.WriteLine("Getting shipping label.."); 
      Hashtable transactionParameters = new Hashtable(); 
      transactionParameters.Add("rate", currentRate.ObjectId); 
      transactionParameters.Add("async", false); 
      Transaction transaction = resource.CreateTransaction(transactionParameters); 

      if (((String)transaction.ObjectStatus).Equals("SUCCESS", StringComparison.OrdinalIgnoreCase)) 
      { 
       Console.WriteLine("Label url : " + transaction.LabelURL); 
       Console.WriteLine("Tracking number : " + transaction.TrackingNumber); 
      } 
      else 
      { 
       Console.WriteLine("An Error has occured while generating your label. Messages : " + transaction.Messages); 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
      Console.ReadLine(); 
     } 

     Console.ReadLine(); 
    } 
} 
} 

All my carriers accounts

+0

请提供一个完整的问题,包括您迄今尝试过的代码。 – saarrrr

+0

今天我们都在家里忘了我们的水晶球..代码在哪里? – MethodMan

+0

我个人使用Endicia API作为我们的运费,并且至少在Endicia中,您必须获得Endicia的同意,才能向Endicia提出请求并获得其他运营商的许可,并且由于费率有时会根据每位客户进行个性化处理,因此需要由该运营商批准。 –

回答

3

可能有不同的原因,为什么你不看其他利率的代码。浮现在脑海的第一件事情是:

  1. 你明确列出在装运API调用(shipmentTable.Add("carrier_accounts", allCarriersAccounts);)所有载体账户。鉴于您希望看到所有运营商的费率是不必要的,因为如果您不发送carrier_accounts属性,则希波将自动使用我们所有的账户。因此,我建议删除此行以消除与此行相关的任何潜在错误。
  2. 我不知道你在Shippo上激活过哪些其他运营商,但潜在的这些其他运营商不支持美国国内运输。例如。 DHL Express只支持国际货件,加拿大邮政只从加拿大发货等。

希望有帮助!如果您有更多问题,很乐意提供进一步的帮助。

+0

以及我试着列出所有运营商,而不是,必须是第二点,我会检查并让你知道谢谢。 PD:我只有默认的运营商(当你创建账户的时候,我给你的那个运营商) – emcas88

+0

我加了一个UPS运营商帐号,它工作正常!!但现在生成一个标签,我得到了一个地址验证错误,很奇怪。 – emcas88

+1

太棒了,很高兴它的工作。其他默认的Shippo运营商不提供国内美国服务(Uber Rush除外,但仅适用于SF和NYC的运送服务)。 让我知道,如果你需要帮助重新地址验证。 –