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 状态的对象