前台结账能看到快递,后台 Sales > Orders > Create New Order 却显示没有可用配送方式。先别复制前台配置。后台订单使用的是所选Store、客户地址和adminhtml流程,范围或地址差一点,结果就会不同。
五分钟排除配置问题
- 在创建订单页确认右上角所选Store不是Default Config;
- 完整填写国家、省/州、邮编和城市,然后点击Get shipping methods and rates;
- 检查商品是否为虚拟商品、重量是否为0、数量是否满足承运商限制;
- 到 Stores > Configuration > Sales > Shipping Methods 切到同一Website/Store View,确认Enabled、Ship to Applicable Countries与最小金额;
- 检查 Stores > Configuration > Sales > Shipping Settings 的Origin国家与邮编。
让日志告诉你承运商为什么退出
对核心承运商可临时打开Debug;第三方模块在 collectRates() 返回false前记录条件和响应。不要记录完整姓名、电话和地址,日志中只保留国家、邮编前几位、重量和请求ID。
bin/magento config:show carriers/flatrate/active bin/magento config:show carriers/flatrate/sallowspecific bin/magento config:show shipping/origin/country_id tail -f var/log/system.log var/log/debug.log
接口型承运商
如果UPS、FedEx或自建物流API在后台请求超时,抓取一次服务端日志里的请求耗时和HTTP状态。后台页面不会总把异常显示出来。给HTTP客户端设置连接超时与总超时,并在失败时返回明确的RateError,而不是空数组。
有rates但页面不刷新
打开Network查看 sales_order_create/loadBlock 请求。响应里已经有配送HTML但页面没更新,多半是后台JS扩展覆盖了order.loadArea。依次禁用最近安装的adminhtml模块,在测试环境用默认后台主题复现。
不要为了让订单继续而直接向quote_address写shipping_method。这样会绕过价格和可用性校验,后续发票、税额和订单总计可能不一致。
最终用相同客户、相同Store、相同地址和相同商品分别从前台与后台计算一次运费,并核对quote_shipping_rate表中的carrier、method、price和error_message。

