2016-08-23 2 views
1

안녕하세요 저는 shippo API를 가지고 놀고 있습니다. 5 개의 기본 통신사가 모두 활성 상태이고 테스트 모드입니다. 것은 나가 선적을 창조하고 모든 비율을 검사 할 때, 다만 USPS 비율을 얻고 나는 모든 운송업자에게서 비율을 선호하고 비용을 비교할 때이다. 어떤 아이디어? 감사합니다활성 캐리어에서 모든 요금을 반환하지 않는 shippo api

OK는

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와 함께 엔디 시아에 대한 요청으로 다른 운송 업체에 대한 액세스 권한을 부여 받아야하며 때로는 고객별로 개인화되는 요금 때문에 해당 운송 업체의 승인을 받아야합니다. –

답변

3

다른 요금이 표시되지 않는 이유는 여러 가지 이유가있을 수 있습니다 요구하는 사람들을위한 코드가있다. 마음에 와서 첫 번째 사항은 다음과 같습니다 당신은 명시 적으로 발송 API 호출 (shipmentTable.Add("carrier_accounts", allCarriersAccounts);)에서 모든 캐리어 계정을 나열하고

  1. . carrier_accounts 속성을 보내지 않으면 Shippo가 자동으로 모든 계정을 사용하므로 모든 이동 통신사 요금을보고 싶다고 가정하십시오. 따라서이 줄을 제거하여이 줄과 관련된 잠재적 인 버그를 제거하는 것이 좋습니다.
  2. Shippo에서 활성화 한 다른 이동 통신사를 알지 못하지만 다른 이동 통신사가 미국 내 배송을 지원하지 않을 수 있습니다. 예 : DHL Express는 캐나다, 캐나다 등에서 만 배송되는 국제 배송료 만 지원합니다.

희망 하시겠습니까? 궁금한 점이 더 있으면 더 많은 도움을 주시기 바랍니다.

+0

잘 지우십시오 나는 모든 통신사를 목록으로 만들지 않으며, 두번째 점이어야한다, 나는 검사하고 감사를 알게했다. PD : 나는 단지 기본 통신 사업자 만 가지고 있습니다. (계정을 만들었을 때 저에게 준 것) – emcas88

+0

UPS 운송 회사 계좌를 추가했는데 작동합니다 !!하지만 지금은 라벨을 생성하는 중 주소 확인 오류가 있습니다 ... – emcas88

+1

신난다. 다행이다. 다른 기본 Shippo 통신사는 미국 내 서비스를 제공하지 않습니다 (Uber Rush를 제외하고 SF 및 NYC의 선적에만 사용할 수 있음). 주소 확인에 도움이 필요한 경우 알려주십시오. –