如何让自建Shopify应用在运费设置中作为rates provider展示?
Shopify自定义应用作为运费费率提供方实现方案
你要实现的在运费设置页作为可选费率提供方展示的效果,核心是对接Shopify的承运商服务(Carrier Service)能力,相关逻辑不在普通应用嵌入的文档里,很多开发者一开始会找错方向。
前置准备
- 店铺权限要求:需要Shopify Advanced套餐、Shopify Plus套餐权限,普通套餐可以先联系Shopify客服申请开启自定义承运商API访问权限,否则接口调用会被拦截
- 应用权限配置:在Partner后台给你的自定义应用勾选
read_shipping、write_shipping两个权限范围,安装应用到店铺时要确认商户授权了这两个权限
具体实现步骤
- 创建自定义承运商服务
应用安装完成后,调用Shopify Admin API的承运商服务创建接口,生成你的费率提供方实体,参考请求如下:
POST /admin/api/2024-07/carrier_services.json { "carrier_service": { "name": "你的自定义费率服务名称", // 这个名称会直接显示在Add Rates的可选列表里 "callback_url": "你的服务端运费计算接口公网地址", // 必须是HTTPS协议,公网可访问,不能用自签名证书 "service_discovery": true, // 这个参数必须设为true,才会在后台运费设置页露出 "active": true } }
调用成功后会返回该承运商服务的唯一ID,做好持久化存储即可。
- 开发运费计算回调接口
你在上一步填的callback_url就是Shopify拉取运费费率的入口,两种场景下Shopify会向这个地址发POST请求:一是商户在后台配置运费选择你的服务时,二是用户在店铺结账计算运费时。请求体会携带收货地址、购物车商品明细、包裹总重量、订单货值等参数,你按照自己的业务规则计算完运费后,按以下格式返回即可:
{ "rates": [ { "service_name": "标准配送", "service_code": "STD001", "total_price": "1200", // 金额单位为货币最小单位,比如12元人民币对应1200分 "currency": "CNY", "min_delivery_date": "2024-08-12 00:00:00", "max_delivery_date": "2024-08-15 23:59:59" }, { "service_name": "特快配送", "service_code": "EXP001", "total_price": "2300", "currency": "CNY", "min_delivery_date": "2024-08-09 00:00:00", "max_delivery_date": "2024-08-10 23:59:59" } ] }
注意:这个回调接口的响应时间必须控制在10秒以内,超时后Shopify会直接判定你的服务不可用,不会展示对应运费选项。
- 验证展示效果
接口开发完成后,按照你提到的路径操作:进入Shopify后台Settings > Shipping & Delivery页面,点击Manage Rates按钮,选择对应Shipping Zone后点击Add Rates按钮,就能在弹出的可选列表里看到你创建的自定义费率提供方,选中后即可正常使用。
常见问题排查
- 创建完服务后台看不到:先检查
service_discovery参数是否设为true,再确认店铺是否开通了自定义承运商API权限 - 结账时不显示你的运费选项:先排查回调接口是否能正常公网访问、证书是否有效、响应时间是否超时、返回格式是否符合要求
- 本地调试可以用内网穿透工具将本地服务端口映射为公网HTTPS地址,临时填到callback_url里测试即可
内容的提问来源于stack exchange,提问作者Andy Aceituno
相关产品推荐
相关产品推荐

