Shippo api不返回活跃运营商的所有费率[关闭]

Posted

技术标签:

【中文标题】Shippo api不返回活跃运营商的所有费率[关闭]【英文标题】:shippo api not returning all rates from active carriers [closed] 【发布时间】:2016-08-23 16:57:27 【问题描述】:

嗨,我正在玩 Shippo api。我有 5 个默认运营商都处于活动状态并处于测试模式。问题是当我创建一个货件并检查所有费率时,我只是获得 USPS 费率,我更喜欢所有承运人的费率并比较成本。有任何想法吗 ?问候

好的,有需要的人的代码

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", "support@goshipppo.com");

            // 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", "hippo@goshipppo.com");
            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();
    


【问题讨论】:

请提供一个完整的问题,包括您迄今为止尝试过的代码。 今天我们都把水晶球忘在家里了..密码在哪里..? 我个人使用 Endicia API 来计算我们的运费,至少在使用 Endicia 时,您必须通过请求 Endicia 并获得该运营商的批准才能访问其他运营商,因为有时费率会在每个客户的基础。 请删除反对票 【参考方案1】:

您看不到其他费率可能有多种原因。首先想到的是:

    您在 Shipment API 调用 (shipmentTable.Add("carrier_accounts", allCarriersAccounts);) 中明确列出了所有个承运人帐户。鉴于您希望查看所有不必要的运营商的费率,因为如果您不发送 carrier_accounts 属性,Shippo 将自动使用我们所有的帐户。因此,我建议删除此行以消除与此行相关的任何潜在错误。 我不知道您在 Shippo 上激活了哪些其他运营商,但这些其他运营商可能不支持美国国内发货。例如。 DHL Express 只支持国际货件,Canada Post 只支持来自加拿大的货件等。

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

【讨论】:

好吧,我尝试列出所有运营商,而不是,必须是第二点,我会检查并让你知道谢谢。 PD:我只有默认的运营商(你们在我创建帐户时给我的) 我添加了一个 UPS 承运人帐户,它可以正常工作!!,但现在生成一个标签时出现地址验证错误,很奇怪... 太棒了,很高兴它正在工作。其他默认的 Shippo 承运商不服务于美国国内(Uber Rush 除外,但它仅适用于顺丰和纽约市内的货件)。如果您需要有关验证的帮助,请告诉我。

以上是关于Shippo api不返回活跃运营商的所有费率[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 Shippo 中创建 Shipment 对象会返回处于 Queued 状态的对象

使用 Swift 访问 Shippo API 返回未记录的错误

使用 Shippo 和 PHP 制作运输标签

GoShippo API 不返回欧洲的费率

常见的 API 大全分享

Shippo API 导入错误