作者:昼夜
关键词:顺丰、物流轨迹获取
在电商客户日常的工作过程中,或多或少的会需要与物流打交道,其中获取通过物流轨迹来监控货物位置信息以及订单状态的也是常见操作。那顺丰快递作为日常使用量比较大的物流平台,在平时使用中也会有较大的监控物流轨迹的一些需求,但是由于顺丰快递的特殊性,无法像其他物流一样可以直接通过百度获取到物流信息,需要通过其他的方法来进行批量的处理。那么接下来就演示一些可以获取到顺丰物流轨迹的方法。
1.在顺丰官网内获取
在顺丰官网(https://www.sf-express.com/chn/sc)中,通过输入订单编号+验证的形式,通过元素获取快递物流轨迹


但是这种获取方式每次查询的时候都需要完成验证,且单次最多查询20条,所以在面对大量的订单的时候获取的速度会比较慢,小量订单的时候比较适用。
2.猪猪云、快递100等三方工具内获取
影刀中也现有封装了一些通过三方工具去查询物流信息的一些指令,依托三方平台来完成对于各类快递服务商的物流信息获取


使用三方工具的话可以比较高效的获取到物流轨迹,但是三方工具需要收取一定的费用,在快递单量比较大的情况下的话产生的费用客户可能会觉得不好接受。
3.通过顺丰官方接口获取物流轨迹(主要推荐)
顺丰官方开放查询快递轨迹的API(路由查询接口),在完成个人认证的情况下每个月有50w次的免费查询次数,同时该接口有30次/s的实时查询率,适合用在较大量的快递信息查询当中。
这边介绍一下如何去完成应用搭建,然后通过接口查询顺丰快递的物流消息的。
首先,我们要在顺丰开放平台上完成个人/企业认证,之后新建一个应用,获取到顾客编码、沙箱/生产环境验证码等信息。


注意,新建应用在沙箱环境调试完成之后,需要拿他们顺丰官方给定的生产单号在沙箱环境中成功测试三次之后才能将应用运用到生产的实际环境中,具体可以参考https://open.sf-express.com/developSupport/195960。
然后就可以通过鉴权拿到Token,再使用这个Token走接口,根据我们的快递单号与寄件/收件人的手机号后4位去获取到物流的信息啦。
这里要说明一下,有两种查询方式,一个是通过快递单号+手机号后四位,另一个是应用绑定月结账号之后,直接通过快递单号进行查询,这边因为是企业统一寄件的手机号,所以我们采用第一种方式进行查询。
# 鉴权
def get_EXP_accessToken(partnerID, secret):
"""
partnerID:顾客编码(可从应用中获取)
secret:校验码(可从应用中获取)
return:
accessToken:访问令牌
"""
url = "https://sfapi.sf-express.com/oauth2/accessToken" # 当前位正式环境
headers = {
'content-type': 'application/x-www-form-urlencoded'
}
data = {
'partnerID': partnerID,
'secret': secret,
'grantType': 'password'
}
response = requests.post(url, headers=headers, data=data)
return response.json()# 查询路由信息
def EXP_RECE_SEARCH_ROUTES(partnerID, requestID, accessToken, trackingNumber, checkPhoneNo):
timestamp = int(datetime.datetime.now().timestamp())
url = "https://bspgw.sf-express.com/std/service" # 当前位生产环境
headers = {
'content-type': 'application/x-www-form-urlencoded;charset=utf-8'
}
msgData={
'trackingType': 1,
'trackingNumber': trackingNumber,
'checkPhoneNo': checkPhoneNo # 手机号后4位
}
data = {
'partnerID': partnerID,
'requestID': requestID, # 请求ID,需保证唯一性
'serviceCode': 'EXP_RECE_SEARCH_ROUTES',
'timestamp': str(timestamp),
'accessToken': accessToken,
'msgData':json.dumps(msgData)
}
response = requests.post(url, headers=headers, data=data)
return response.json()
这边演示第3种方式来查询物流轨迹

1.业务数据(msgData)报文支持json报文数据格式,在传入的时候要注意格式的转换
2.环境校验码要与当前请求url一致,在沙箱url下要使用沙箱校验码,在生产环境url下要使用生产环境校验码