mcpField
S
shipping-rate-calculator

shipping-rate-calculator

github.com/finsilabs其他6088 次安装5 天前更新
代码仓库

关于 shipping-rate-calculator

指导电商团队配置结账时的实时运费报价,涵盖 Shopify、WooCommerce、BigCommerce 和自定义商店。内容包括多承运商比价、分区规则、尺寸重量计算及结账选项管理。

主要功能

  1. 01配置承运商实时运费
  2. 02比较多家承运商报价
  3. 03设置分区与阶梯费率
  4. 04计算尺寸重量运费
  5. 05管理结账可选配送方式

适用场景

  1. 01在结账页显示实时运费
  2. 02按重量或地区创建费率表
  3. 03为大件轻货计算尺寸重量
  4. 04设置国际配送区域与报价

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill shipping-rate-calculator

安装后在 Claude Code 中输入/shipping-rate-calculator确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

tile.json
evals/dimensional-weight-calculation/
criteria.json
task.md
evals/multi-carrier-rate-engine-with-caching-a/
criteria.json
task.md
evals/shipping-rules-and-zone-based-rate-table/
criteria.json
task.md

详细介绍

运费计算器

概述

在结账时显示 UPS、FedEx、USPS、DHL 的实时运费,让客户选择首选服务,也能避免运费收取过低或过高。所有主流平台都原生支持或通过应用支持承运商计算运费;多承运商运费比价工具还能通过自动选择最便宜的选项,为你节省 15–40% 的运费成本。

何时使用此技能

  • 在结账时添加承运商实时运费报价
  • 构建多承运商运费比较功能
  • 实施免运费门槛或分级固定运费
  • 需要计算体积重量,以准确确定承运商运费
  • 设置国际运输的配送区域和运费表

核心说明

第 1 步:确定你的平台并选择合适的运费工具
平台推荐工具原因
ShopifyShopify Shipping(内置)或用于运费比价的 Easyship / ShipStationShopify Shipping 提供折扣后的 USPS、UPS、DHL 运费;Easyship 则增加 250+ 个承运商选项并支持运费比价
WooCommerceWooCommerce Shipping(USPS/DHL)+ Table Rate Shipping,用于自定义规则WooCommerce Shipping 处理基础承运商运费;Table Rate Shipping 增加基于重量/区域的规则表
BigCommerceShipperHQ 或 EasyshipShipperHQ 是 BigCommerce 功能最强大的运费管理工具,支持按体积计算运费
自定义 / 无头将 EasyPost 或 Shippo 用作承运商元 API两者都能通过一次 API 调用聚合 UPS、FedEx、USPS、DHL 的服务,比逐个直接集成各承运商简单得多
第 2 步:设置承运商计算运费
Shopify

Shopify Shipping(内置、免费,建议作为起点):

  1. 前往 Settings → Shipping and delivery → Manage rates
  2. 在国内配送区域下,点击 Add rate
  3. 选择 Use carrier or app to calculate rates
  4. 从以下承运商中选择:USPS、UPS、DHL Express
  5. 勾选你要提供的服务(例如,USPS Priority Mail、USPS Ground Advantage、UPS Ground、UPS 2nd Day Air)
  6. 可选:在承运商运费基础上添加加价或折扣百分比(可用于抵消包装材料成本)
  7. 保存——现在结账时将根据订单的实际重量和目的地动态显示运费

如需更多承运商选项(FedEx、区域承运商、国际承运商):

  1. 从 Shopify App Store 安装 Easyship 或 ShipStation
  2. 两者都以 Shopify“承运商计算运费”服务提供商的身份集成,并原生显示在结账页面
  3. Easyship 免费套餐可在结账时显示 50+ 个承运商的实时运费
  4. **注意:**结账时使用承运商计算运费,需要 Shopify 的 Advanced 套餐($299/mo)或更高版本,或者购买承运商计算运费附加服务(较低套餐每月 $20)

设置固定运费和免运费规则:

  • 在 Shopify Shipping 中,除了使用承运商计算运费或替代此类运费外,你还可以创建固定运费选项(标准配送 $5.99、加急配送 $14.99)
  • 可搭配免运费门槛:添加带有最低订单金额条件的免运费选项(参见 @free-shipping-thresholds 技能)
WooCommerce

WooCommerce Shipping(USPS + DHL,免费):

  1. 安装 WooCommerce Shipping 插件(由 WooCommerce 提供,免费)
  2. 前往 WooCommerce → Settings → Shipping → Add shipping zone,为每个地区添加配送区域
  3. 在每个区域下,点击 Add shipping method → 选择 USPS 或 DHL Express
  4. 配置结账时要显示的服务(Priority Mail、Ground Advantage 等)
  5. 为商品添加包装尺寸和重量,以便准确计算费率

WooCommerce Table Rate Shipping(适用于复杂规则,例如重量区间、自定义区域):

  1. 从 WooCommerce.com 购买 WooCommerce Table Rate Shipping 扩展
  2. 创建费率表,例如:0–1lb = $4.99、1–5lb = $7.99、5–20lb = $12.99
  3. 为国内和国际区域分别创建费率表

ShipStation for WooCommerce(多承运商费率比价):

  1. 安装 ShipStation for WooCommerce 插件
  2. 可将 ShipStation 配置为使用你协商的承运商费率,并通过 WooCommerce 的配送方式 API 在结账时显示这些费率
  3. 注意:ShipStation 会在其控制面板中显示费率,不一定会直接显示在客户结账页面上——请查看 ShipStation 文档,了解具体的 WooCommerce 结账费率显示功能
BigCommerce

ShipperHQ(BigCommerce 上功能最强大的选项):

  1. 从 BigCommerce App Marketplace 安装 ShipperHQ
  2. 将你的 UPS、FedEx、USPS、DHL 账户连接到 ShipperHQ(或使用 ShipperHQ 内置的承运商账户)
  3. ShipperHQ 会根据商品尺寸自动计算体积重量
  4. 配置费率比价规则:“显示最便宜的选项”“显示所有选项”或“按配送速度区间显示最便宜的选项”
  5. 设置加价规则:每件货物加收 $2 处理费,或所有 FedEx 费率打 85 折

BigCommerce 内置实时费率:

  1. 前往 Store Setup → Shipping → Add a shipping zone
  2. 在区域下添加实时承运商方式(通过 Endicia 接入 UPS、FedEx、USPS)
  3. 输入你的承运商账户凭据
  4. BigCommerce 会在结账时显示承运商的实时费率
自定义 / 无头架构

使用 EasyPost 或 Shippo 作为元 API,一次调用即可获取所有承运商的费率——这比单独集成 UPS、FedEx、USPS 和 DHL 简单得多:

import EasyPost from '@easypost/api';
const easypost = new EasyPost(process.env.EASYPOST_API_KEY);

// Get multi-carrier rates for a shipment
async function getShippingRates(params: {
  originZip: string;
  destinationZip: string;
  destinationCountry: string;
  weightOz: number;
  lengthIn: number;
  widthIn: number;
  heightIn: number;
}): Promise<{ carrier: string; service: string; rateCents: number; estimatedDays: number }[]> {
  const shipment = await easypost.Shipment.create({
    from_address: {
      zip: params.originZip,
      country: 'US',
    },
    to_address: {
      zip: params.destinationZip,
      country: params.destinationCountry,
    },
    parcel: {
      length: params.lengthIn,
      width: params.widthIn,
      height: params.heightIn,
      weight: params.weightOz, // EasyPost uses oz
    },
  });

  return shipment.rates.map(rate => ({
    carrier: rate.carrier,
    service: `${rate.carrier} ${rate.service}`,
    rateCents: Math.round(parseFloat(rate.rate) * 100),
    estimatedDays: rate.est_delivery_days ?? 5,
  })).sort((a, b) => a.rateCents - b.rateCents);
}

// Apply store-level rules on top of carrier rates
function applyShippingRules(params: {
  carrierRates: { carrier: string; service: string; rateCents: number; estimatedDays: number }[];
  cartSubtotalCents: number;
  freeShippingThresholdCents: number;
}): { label: string; rateCents: number; estimatedDays: number }[] {
  const rates = [...params.carrierRates];

  // Add free shipping option if eligible
  if (params.cartSubtotalCents >= params.freeShippingThresholdCents) {
    rates.unshift({ carrier: 'store', service: 'Free Shipping', rateCents: 0, estimatedDays: 7 });
  }

  // Show max 3 options to avoid choice paralysis:
  // 1. Free (if available)
  // 2. Cheapest paid option
  // 3. Fastest guaranteed option
  const freeOption = rates.find(r => r.rateCents === 0);
  const cheapestPaid = rates.filter(r => r.rateCents > 0).sort((a, b) => a.rateCents - b.rateCents)[0];
  const fastest = rates.filter(r => r.estimatedDays <= 2).sort((a, b) => a.estimatedDays - b.estimatedDays)[0];

  return [freeOption, cheapestPaid, fastest]
    .filter(Boolean)
    .filter((r, i, arr) => arr.findIndex(x => x?.service === r?.service) === i) // deduplicate
    .map(r => ({ label: r!.service, rateCents: r!.rateCents, estimatedDays: r!.estimatedDays }));
}
第 3 步:配置体积重量计算

承运商按实际重量和体积重量中的较大值收费。务必进行配置。

Shopify:

  • 在每个商品变体中输入包装尺寸(Products → [Product] → Shipping section)
  • Shopify 在计算承运商费率时会自动计算体积重量

WooCommerce:

  • 在 WooCommerce 商品的 Shipping 标签页中输入尺寸(长度、宽度、高度,单位为英寸/厘米)
  • WooCommerce Shipping 插件会使用这些尺寸计算 DHL 和 USPS 的体积费率

ShipperHQ:

  • ShipperHQ 提供高级体积重量装箱模拟功能——它会确定多个商品如何装入实际包装箱,并根据装箱后的箱子而非仅根据商品重量总和计算费率

体积重量手动核算:

  • DIM 系数(美国国内):每磅 139 立方英寸
  • 公式:(L × W × H) / 139 = DIM 重量(磅)
  • 如果 DIM 重量 > 实际重量,承运商会按 DIM 重量收费
第 4 步:在结账时显示适当数量的选项

配送选项过多会导致客户放弃结账。最佳实践:

  1. 最便宜的选项——始终显示此选项(通常为“Ground”或“Standard”)
  2. 免费配送——如果购物车符合条件,请在顶部醒目显示
  3. 最快的选项——为有时效需求的客户提供 1 天或 2 天航空配送

移除所有中间选项(3 天、5 天等)——客户不需要 6 个选项。

在 ShipperHQ 中:使用“Rate Filters”仅显示指定的服务等级。在 Easyship 中:配置“Checkout Rules”以限制显示的选项。

最佳实践

  • 始终为承运商 API 设置超时 — 承运商费率 API 可能需要 2–5 秒;如果未能及时响应,请显示缓存费率或固定费率作为备选
  • 请求费率前先验证地址 — 无效地址会导致费率错误和结账失败;大多数承运商都提供地址验证 API(Shippo 内置了此功能)
  • 将包裹重量向上取整 — 承运商会将重量向上取整到下一个整磅/千克;计算费率时也应如此,避免显示的费率低于客户实际需要支付的金额
  • 将免费配送作为单独选项提供,而不是通过折扣承运商费率实现 — 应将其显示为“免费配送(5–7 天)”,而不是修改承运商列出的费率
  • 购物车发生变化时重新计算费率 — 添加商品、更改数量或更新配送地址时,重新获取费率

常见问题

问题解决方案
承运商 API 对有效地址未返回任何费率检查地址是否为邮政信箱(UPS/FedEx 不向邮政信箱配送);邮政信箱地址改用 USPS 作为备选
结账时显示的配送费用低于订单实际收取的金额在订单确认逻辑中重新计算最终配送费率,而不只是购物车中;购物车与结账之间的费率可能发生变化
体积大但重量轻的商品费率较高启用体积重量计算;大多数承运商会对大箱子使用体积重量 — ShipperHQ 会自动处理
费率请求导致结账缓慢(3+ 秒)使用承运商聚合服务(EasyPost/Shippo),而不是单独调用各承运商的 API;聚合服务的响应速度更快

相关技能

  • @free-shipping-thresholds
  • @international-shipping
  • @order-fulfillment-workflow
  • @checkout-flow-optimization
  • @dropshipping-integration

评论

支持 Markdown