顺丰api对接需先完成企业认证获取appkey、appsecret等凭证,并区分电子面单下单(sf1001)与轨迹查询(sf2001)两类接口;thinkphp中应封装sfapi类,用sha256签名、json请求体、curl调用;轨迹查询传logisticcode即可,下单须校验月结号、手机号、商品等字段。

顺丰API对接前提:获取认证凭证与明确接口类型
ThinkPHP 项目中对接顺丰 API,必须先完成企业资质认证。访问顺丰开放平台注册开发者账号,提交营业执照等材料后,会获得:AppKey、AppSecret、CustomerName(客户编码)、CustomerPwd(客户密码)。这些是调用下单与轨迹查询接口的必备身份凭证。
注意:顺丰提供两类核心接口——电子面单下单接口(如 SF1001) 和 物流轨迹查询接口(如 SF2001),两者参数结构、签名方式、请求地址均不同,不可混用。官方文档中明确区分「寄递服务」与「物流查询服务」,需按需申请对应权限。
封装顺丰SDK:在ThinkPHP中组织可复用的请求类
建议在 ThinkPHP/Library/Vendor/SF 目录下新建 SfApi.php 类文件,统一管理签名生成、HTTP请求、错误处理逻辑。关键点包括:
- 使用
hash_hmac('sha256', $data, $appSecret)生成 Authorization 请求头,而非 MD5; - 所有请求体为 JSON 格式,Content-Type 必须设为 application/json;
- 下单接口需传入完整运单信息(收寄件人、物品、重量、体积、服务类型),轨迹查询只需 LogisticCode(单号) 和 ShipperCode(固定为 SF);
- 推荐使用 cURL(启用 SSL 验证)替代 file_get_contents,确保 HTTPS 请求稳定可靠。
物流轨迹查询:ThinkPHP控制器中调用示例
在控制器(如 OrderController)中,可这样快速集成查询功能:
public function queryTrack() {
$logisticCode = I('get.code'); // 获取单号,如 SF123456789012 或 123456789012
$sf = new \Vendor\SF\SfApi(C('SF_APPKEY'), C('SF_APPSECRET'));
$result = $sf->track($logisticCode);
if ($result['success']) {
$this->assign('trace', $result['data']['Traces']);
$this->assign('status', $result['data']['State']);
$this->display();
} else {
$this->error($result['message']);
}
}
返回的 Traces 是按时间倒序排列的物流节点数组,含 AcceptTime、AcceptStation、Remark 字段,可直接用于前端渲染时间轴。
电子面单下单:关键字段与常见失败原因
下单接口要求严格校验,以下字段缺失或格式错误将直接导致失败:
- MonthCode:月结账号,若未开通月结则填空字符串,但需确认客户编码已绑定预付方式;
- IsReturnPrint:是否返回电子面单图片,设为 1 时需额外处理 Base64 图片流;
- Commodity:商品信息数组,至少包含名称、数量、单价,不能为空;
- Sender/Receiver 手机号:必须为 11 位中国大陆手机号,且不能含空格或横线。
下单成功后返回 OrderCode(顺丰内部单号)和 EOrderCode(电子运单号),后者即用户可见的 SF 开头单号,可用于后续轨迹查询。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











